Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 37 additions & 22 deletions grammars/html (rails).cson
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
]
60 changes: 38 additions & 22 deletions grammars/javascript (rails).cson
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
]
110 changes: 110 additions & 0 deletions spec/grammar-spec.coffee
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
describe "Ruby on Rails package", ->
grammar= null
beforeEach ->
waitsForPromise ->
atom.packages.activatePackage("language-ruby-on-rails")
Expand All @@ -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 '''
<div class='<%= foo %>'>
<div class="<%= bar %>">
<div class= '<%= foo %>'>
<div class= "<%= bar %>">

'''
expect(lines[0][0]).toEqual value: "<div class='", 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: '<div class="', 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']
expect(lines[2][0]).toEqual value: "<div class= '", scopes: ['text.html.ruby']
expect(lines[2][1]).toEqual value: '<%=', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[2][2]).toEqual value: ' foo ', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html']
expect(lines[2][3]).toEqual value: '%>', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[2][4]).toEqual value: "'>", scopes: ['text.html.ruby']
expect(lines[3][0]).toEqual value: '<div class= "', scopes: ['text.html.ruby']
expect(lines[3][1]).toEqual value: '<%=', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[3][2]).toEqual value: ' bar ', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html']
expect(lines[3][3]).toEqual value: '%>', scopes: ['text.html.ruby', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[3][4]).toEqual value: '">', scopes: ['text.html.ruby']



it "parses the JavaScript grammar", ->
grammar = atom.grammars.grammarForScopeName("source.js.rails source.js.jquery")
expect(grammar).toBeDefined()
expect(grammar.scopeName).toBe "source.js.rails source.js.jquery"

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: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[0][1]).toEqual value: ' foo = 10 ', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html']
expect(lines[0][2]).toEqual value: '%>', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']

it 'tokenizes the <%= %>', ->
lines = grammar.tokenizeLines '''
<%= foo %>
'''

expect(lines[0][0]).toEqual value: '<%=', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[0][1]).toEqual value: ' foo ', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html']
expect(lines[0][2]).toEqual value: '%>', scopes: ['source.js.rails source.js.jquery', '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: ['source.js.rails source.js.jquery']
expect(lines[0][1]).toEqual value: '<%=', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[0][2]).toEqual value: ' foo ', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html']
expect(lines[0][3]).toEqual value: '%>', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[0][4]).toEqual value: "'", scopes: ['source.js.rails source.js.jquery']
expect(lines[1][0]).toEqual value: '"', scopes: ['source.js.rails source.js.jquery']
expect(lines[1][1]).toEqual value: '<%=', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[1][2]).toEqual value: ' bar ', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html']
expect(lines[1][3]).toEqual value: '%>', scopes: ['source.js.rails source.js.jquery', 'source.ruby.rails.embedded.html', 'punctuation.section.embedded.ruby']
expect(lines[1][4]).toEqual value: '"', scopes: ['source.js.rails source.js.jquery']

it "parses the RJS grammar", ->
grammar = atom.grammars.grammarForScopeName("source.ruby.rails.rjs")
expect(grammar).toBeDefined()
Expand Down