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

Commit 9012ab8

Browse files
author
Wliu
authored
Merge pull request #137 from esdoppio/at-rule-include
Rewrite #at_rule_include
2 parents c0a619f + 4591d4c commit 9012ab8

File tree

2 files changed

+48
-12
lines changed

2 files changed

+48
-12
lines changed

grammars/scss.cson

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -294,27 +294,41 @@
294294
'at_rule_include':
295295
'patterns': [
296296
{
297-
'begin': '\\s*((@)include\\b)\\s*'
298-
'captures':
297+
'begin': '(?<=@include)\\s+([\\w-]+)\\s*(\\()'
298+
'beginCaptures':
299299
'1':
300-
'name': 'keyword.control.at-rule.include.scss'
301-
'2':
302-
'name': 'punctuation.definition.keyword.scss'
303-
'3':
304300
'name': 'entity.name.function.scss'
305-
'4':
306-
'name': 'entity.name.text.scss'
307-
'end': '\\s*[\\)|\\s\\;]'
301+
'2':
302+
'name': 'punctuation.definition.parameters.begin.bracket.round.scss'
303+
'end': '\\)'
304+
'endCaptures':
305+
'0':
306+
'name': 'punctuation.definition.parameters.end.bracket.round.scss'
308307
'name': 'meta.at-rule.include.scss'
309308
'patterns': [
310309
{
311310
'include': '#function_attributes'
312311
}
313-
{
314-
'include': '#functions'
315-
}
316312
]
317313
}
314+
{
315+
'match': '(?<=@include)\\s+([\\w-]+)'
316+
'captures':
317+
'0':
318+
'name': 'meta.at-rule.include.scss'
319+
'1':
320+
'name': 'entity.name.function.scss'
321+
}
322+
{
323+
'match': '((@)include)\\b'
324+
'captures':
325+
'0':
326+
'name': 'meta.at-rule.include.scss'
327+
'1':
328+
'name': 'keyword.control.at-rule.include.scss'
329+
'2':
330+
'name': 'punctuation.definition.keyword.scss'
331+
}
318332
]
319333
'at_rule_keyframes':
320334
'patterns': [

spec/scss-spec.coffee

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,28 @@ describe 'SCSS grammar', ->
4040
expect(tokens[0]).toEqual value: '@', scopes: ['source.css.scss', 'meta.at-rule.at-root.scss', 'keyword.control.at-rule.at-root.scss', 'punctuation.definition.keyword.scss']
4141
expect(tokens[1]).toEqual value: 'at-root', scopes: ['source.css.scss', 'meta.at-rule.at-root.scss', 'keyword.control.at-rule.at-root.scss']
4242

43+
describe '@include', ->
44+
it 'tokenizes it correctly', ->
45+
{tokens} = grammar.tokenizeLine '@include'
46+
47+
expect(tokens[0]).toEqual value: '@', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss', 'punctuation.definition.keyword.scss']
48+
expect(tokens[1]).toEqual value: 'include', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss']
49+
50+
{tokens} = grammar.tokenizeLine '@include media{}'
51+
52+
expect(tokens[0]).toEqual value: '@', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss', 'punctuation.definition.keyword.scss']
53+
expect(tokens[1]).toEqual value: 'include', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss']
54+
expect(tokens[3]).toEqual value: 'media', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'entity.name.function.scss']
55+
expect(tokens[4]).toEqual value: '{', scopes: ['source.css.scss', 'meta.property-list.scss', 'punctuation.section.property-list.begin.bracket.curly.scss']
56+
57+
{tokens} = grammar.tokenizeLine '@include media($width: 100px){}'
58+
59+
expect(tokens[3]).toEqual value: 'media', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'entity.name.function.scss']
60+
expect(tokens[4]).toEqual value: '(', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'punctuation.definition.parameters.begin.bracket.round.scss']
61+
expect(tokens[6]).toEqual value: ':', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'punctuation.definition']
62+
expect(tokens[10]).toEqual value: ')', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'punctuation.definition.parameters.end.bracket.round.scss']
63+
expect(tokens[11]).toEqual value: '{', scopes: ['source.css.scss', 'meta.property-list.scss', 'punctuation.section.property-list.begin.bracket.curly.scss']
64+
4365
describe '@mixin', ->
4466
it 'tokenizes solitary @mixin correctly', ->
4567
{tokens} = grammar.tokenizeLine '@mixin'

0 commit comments

Comments
 (0)