Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 7bdc838

Browse files
committed
Merge pull request #101 from nn2242/feature/add-constant-separator
Feature/add constant separator
2 parents c06595a + 92eb705 commit 7bdc838

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

grammars/ruby.cson

+17-6
Original file line numberDiff line numberDiff line change
@@ -1962,10 +1962,6 @@
19621962
'match': '\\||~|>>'
19631963
'name': 'keyword.operator.other.ruby'
19641964
}
1965-
{
1966-
'match': ':'
1967-
'name': 'punctuation.separator.other.ruby'
1968-
}
19691965
{
19701966
'match': '\\;'
19711967
'name': 'punctuation.separator.statement.ruby'
@@ -1975,8 +1971,23 @@
19751971
'name': 'punctuation.separator.object.ruby'
19761972
}
19771973
{
1978-
'match': '\\.|::'
1979-
'name': 'punctuation.separator.method.ruby'
1974+
'comment': 'Mark as namespace separator if double colons followed by capital letter'
1975+
'match': '(::)\\s*(?=[A-Z])'
1976+
'captures':
1977+
'1':
1978+
'name': 'punctuation.separator.namespace.ruby'
1979+
}
1980+
{
1981+
'comment': 'Mark as method separator if double colons not followed by capital letter'
1982+
'match': '(\\.|::)\\s*(?![A-Z])'
1983+
'captures':
1984+
'1':
1985+
'name': 'punctuation.separator.method.ruby'
1986+
}
1987+
{
1988+
'comment': 'Must come after method and constant separators to prefer double colons'
1989+
'match': ':'
1990+
'name': 'punctuation.separator.other.ruby'
19801991
}
19811992
{
19821993
'match': '\\{'

spec/ruby-spec.coffee

+37-3
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ describe "Ruby grammar", ->
2525
expect(tokens[2]).toEqual value: 'require ', scopes: ['source.ruby']
2626

2727
{tokens} = grammar.tokenizeLine('Kernel::require "."')
28-
expect(tokens[1]).toEqual value: ':', scopes: ['source.ruby', 'punctuation.separator.other.ruby']
29-
expect(tokens[2]).toEqual value: ':', scopes: ['source.ruby', 'punctuation.separator.other.ruby']
30-
expect(tokens[3]).toEqual value: 'require ', scopes: ['source.ruby']
28+
expect(tokens[1]).toEqual value: '::', scopes: ['source.ruby', 'punctuation.separator.method.ruby']
29+
expect(tokens[2]).toEqual value: 'require ', scopes: ['source.ruby']
3130

3231
it "tokenizes symbols", ->
3332
{tokens} = grammar.tokenizeLine(':test')
@@ -58,6 +57,41 @@ describe "Ruby grammar", ->
5857
expect(tokens[4]).toEqual value: ' ', scopes: ['source.ruby']
5958
expect(tokens[5]).toEqual value: '1', scopes: ['source.ruby', 'constant.numeric.ruby']
6059

60+
it "tokenizes :: separators", ->
61+
{tokens} = grammar.tokenizeLine('File::read "test"')
62+
expect(tokens[0]).toEqual value: 'File', scopes: ['source.ruby', 'support.class.ruby']
63+
expect(tokens[1]).toEqual value: '::', scopes: ['source.ruby', 'punctuation.separator.method.ruby']
64+
expect(tokens[2]).toEqual value: 'read ', scopes: ['source.ruby']
65+
66+
{tokens} = grammar.tokenizeLine('File:: read "test"')
67+
expect(tokens[0]).toEqual value: 'File', scopes: ['source.ruby', 'variable.other.constant.ruby']
68+
expect(tokens[1]).toEqual value: '::', scopes: ['source.ruby', 'punctuation.separator.method.ruby']
69+
expect(tokens[2]).toEqual value: ' ', scopes: ['source.ruby']
70+
expect(tokens[3]).toEqual value: 'read ', scopes: ['source.ruby']
71+
72+
{tokens} = grammar.tokenizeLine('RbConfig::CONFIG')
73+
expect(tokens[0]).toEqual value: 'RbConfig', scopes: ['source.ruby', 'support.class.ruby']
74+
expect(tokens[1]).toEqual value: '::', scopes: ['source.ruby', 'punctuation.separator.namespace.ruby']
75+
expect(tokens[2]).toEqual value: 'CONFIG', scopes: ['source.ruby', 'variable.other.constant.ruby']
76+
77+
{tokens} = grammar.tokenizeLine('RbConfig:: CONFIG')
78+
expect(tokens[0]).toEqual value: 'RbConfig', scopes: ['source.ruby', 'variable.other.constant.ruby']
79+
expect(tokens[1]).toEqual value: '::', scopes: ['source.ruby', 'punctuation.separator.namespace.ruby']
80+
expect(tokens[2]).toEqual value: ' ', scopes: ['source.ruby']
81+
expect(tokens[3]).toEqual value: 'CONFIG', scopes: ['source.ruby', 'variable.other.constant.ruby']
82+
83+
it "tokenizes . separator", ->
84+
{tokens} = grammar.tokenizeLine('File.read "test"')
85+
expect(tokens[0]).toEqual value: 'File', scopes: ['source.ruby', 'support.class.ruby']
86+
expect(tokens[1]).toEqual value: '.', scopes: ['source.ruby', 'punctuation.separator.method.ruby']
87+
expect(tokens[2]).toEqual value: 'read ', scopes: ['source.ruby']
88+
89+
{tokens} = grammar.tokenizeLine('File. read "test"')
90+
expect(tokens[0]).toEqual value: 'File', scopes: ['source.ruby', 'variable.other.constant.ruby']
91+
expect(tokens[1]).toEqual value: '.', scopes: ['source.ruby', 'punctuation.separator.method.ruby']
92+
expect(tokens[2]).toEqual value: ' ', scopes: ['source.ruby']
93+
expect(tokens[3]).toEqual value: 'read ', scopes: ['source.ruby']
94+
6195
it "tokenizes %{} style strings", ->
6296
{tokens} = grammar.tokenizeLine('%{te{s}t}')
6397

0 commit comments

Comments
 (0)