diff --git a/grammars/html (rails).cson b/grammars/html (rails).cson index fe70edf..9aea837 100644 --- a/grammars/html (rails).cson +++ b/grammars/html (rails).cson @@ -9,34 +9,49 @@ 'foldingStopMarker': '(?x)\n\t\t((?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)>\n\t\t|^\\s*-->\n\t\t|(^|\\s)\\}\n\t\t)' 'patterns': [ { - 'begin': '<%+#' - 'captures': - '0': - 'name': 'punctuation.definition.comment.erb' - 'end': '%>' - 'name': 'comment.block.erb' + 'include': '#tags' } { - 'begin': '<%+(?!>)[-=]?' - 'captures': - '0': - 'name': 'punctuation.section.embedded.ruby' - 'end': '-?%>' - 'name': 'source.ruby.rails.embedded.html' + 'include': 'text.html.basic' + } +] +'injections': + 'string.quoted': + 'patterns': [ + { + 'include': '#tags' + } + ] + +'repository': + 'tags': 'patterns': [ { + 'begin': '<%+#' 'captures': - '1': - 'name': 'punctuation.definition.comment.ruby' - 'match': '(#).*?(?=-?%>)' - 'name': 'comment.line.number-sign.ruby' + '0': + 'name': 'punctuation.definition.comment.erb' + 'end': '%>' + 'name': 'comment.block.erb' } { - 'include': 'source.ruby.rails' + 'begin': '<%+(?!>)[-=]?' + 'captures': + '0': + 'name': 'punctuation.section.embedded.ruby' + 'end': '-?%>' + 'name': 'source.ruby.rails.embedded.html' + 'patterns': [ + { + 'captures': + '1': + 'name': 'punctuation.definition.comment.ruby' + 'match': '(#).*?(?=-?%>)' + 'name': 'comment.line.number-sign.ruby' + } + { + 'include': 'source.ruby.rails' + } + ] } ] - } - { - 'include': 'text.html.basic' - } -] diff --git a/grammars/javascript (rails).cson b/grammars/javascript (rails).cson index 10f3388..3a25610 100644 --- a/grammars/javascript (rails).cson +++ b/grammars/javascript (rails).cson @@ -7,34 +7,50 @@ 'foldingStopMarker': '\\*\\*/|^\\s*\\}' 'patterns': [ { - 'begin': '<%+#' - 'captures': - '0': - 'name': 'punctuation.definition.comment.erb' - 'end': '%>' - 'name': 'comment.block.erb' + 'include': '#tags' } { - 'begin': '<%+(?!>)[-=]?' - 'captures': - '0': - 'name': 'punctuation.section.embedded.ruby' - 'end': '-?%>' - 'name': 'source.ruby.rails.embedded.html' + 'include': 'source.js' + } +] + +'injections': + 'string.quoted': + 'patterns': [ + { + 'include': '#tags' + } + ] + +'repository': + 'tags': 'patterns': [ { + 'begin': '<%+#' 'captures': - '1': - 'name': 'punctuation.definition.comment.ruby' - 'match': '(#).*?(?=-?%>)' - 'name': 'comment.line.number-sign.ruby' + '0': + 'name': 'punctuation.definition.comment.erb' + 'end': '%>' + 'name': 'comment.block.erb' } { - 'include': 'source.ruby.rails' + 'begin': '<%+(?!>)[-=]?' + 'captures': + '0': + 'name': 'punctuation.section.embedded.ruby' + 'end': '-?%>' + 'name': 'source.ruby.rails.embedded.html' + 'patterns': [ + { + 'captures': + '1': + 'name': 'punctuation.definition.comment.ruby' + 'match': '(#).*?(?=-?%>)' + 'name': 'comment.line.number-sign.ruby' + } + { + 'include': 'source.ruby.rails' + } + ] } ] - } - { - 'include': 'source.js' - } -] diff --git a/spec/grammar-spec.coffee b/spec/grammar-spec.coffee index ab12474..66592fd 100644 --- a/spec/grammar-spec.coffee +++ b/spec/grammar-spec.coffee @@ -1,4 +1,5 @@ describe "Ruby on Rails package", -> + grammar= null beforeEach -> waitsForPromise -> atom.packages.activatePackage("language-ruby-on-rails") @@ -8,11 +9,120 @@ describe "Ruby on Rails package", -> expect(grammar).toBeDefined() expect(grammar.scopeName).toBe "text.html.ruby" + describe 'HTML ERB tags', -> + beforeEach -> + waitsForPromise -> + atom.packages.activatePackage('language-ruby-on-rails') + + it 'tokenizes the <% %>', -> + lines = grammar.tokenizeLines ''' + <% foo = 10 %> + ''' + + expect(lines[0][0]).toEqual value: '<%', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + expect(lines[0][1]).toEqual value: ' foo = 10 ', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html'] + expect(lines[0][2]).toEqual value: '%>', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + + it 'tokenizes the <%= %>', -> + lines = grammar.tokenizeLines ''' + <%= foo %> + ''' + + expect(lines[0][0]).toEqual value: '<%=', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + expect(lines[0][1]).toEqual value: ' foo ', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html'] + expect(lines[0][2]).toEqual value: '%>', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + + it 'tokenizes the <%= %> in string', -> + lines = grammar.tokenizeLines ''' + '<%= foo %>' + "<%= bar %>" + ''' + expect(lines[0][0]).toEqual value: "'", scopes: ['text.html.ruby'] + expect(lines[0][1]).toEqual value: '<%=', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + expect(lines[0][2]).toEqual value: ' foo ', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html'] + expect(lines[0][3]).toEqual value: '%>', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + expect(lines[0][4]).toEqual value: "'", scopes: ['text.html.ruby'] + expect(lines[1][0]).toEqual value: '"', scopes: ['text.html.ruby'] + expect(lines[1][1]).toEqual value: '<%=', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + expect(lines[1][2]).toEqual value: ' bar ', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html'] + expect(lines[1][3]).toEqual value: '%>', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby'] + expect(lines[1][4]).toEqual value: '"', scopes: ['text.html.ruby'] + + it 'tokenizes the <%= %> in string in HTML tag', -> + lines = grammar.tokenizeLines ''' +