From d962b314483bd20b772a31969273e8a69db6c597 Mon Sep 17 00:00:00 2001 From: esdoppio Date: Thu, 16 Jun 2016 10:32:56 +0800 Subject: [PATCH 1/4] SCSS: Add specs for @-rule `include` with content block --- spec/scss-spec.coffee | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec/scss-spec.coffee b/spec/scss-spec.coffee index cc4a142..e64f345 100644 --- a/spec/scss-spec.coffee +++ b/spec/scss-spec.coffee @@ -40,6 +40,15 @@ describe 'SCSS grammar', -> 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'] expect(tokens[1]).toEqual value: 'at-root', scopes: ['source.css.scss', 'meta.at-rule.at-root.scss', 'keyword.control.at-rule.at-root.scss'] + describe '@include', -> + it 'tokenizes it correctly', -> + {tokens} = grammar.tokenizeLine '@include media{}' + + expect(tokens[0]).toEqual value: '@', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss', 'punctuation.definition.keyword.scss'] + expect(tokens[1]).toEqual value: 'include', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss'] + expect(tokens[3]).toEqual value: 'media', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'entity.name.function.scss'] + expect(tokens[4]).toEqual value: '{', scopes: ['source.css.scss', 'meta.property-list.scss', 'punctuation.section.property-list.begin.bracket.curly.scss'] + describe '@mixin', -> it 'tokenizes solitary @mixin correctly', -> {tokens} = grammar.tokenizeLine '@mixin' From 4bae4ac1855b2eb1e2149faf70b469e92d76dddf Mon Sep 17 00:00:00 2001 From: esdoppio Date: Thu, 16 Jun 2016 10:42:34 +0800 Subject: [PATCH 2/4] SCSS: Add specs for @-rule `include` with content block and arguments --- spec/scss-spec.coffee | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/scss-spec.coffee b/spec/scss-spec.coffee index e64f345..c103811 100644 --- a/spec/scss-spec.coffee +++ b/spec/scss-spec.coffee @@ -49,6 +49,14 @@ describe 'SCSS grammar', -> expect(tokens[3]).toEqual value: 'media', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'entity.name.function.scss'] expect(tokens[4]).toEqual value: '{', scopes: ['source.css.scss', 'meta.property-list.scss', 'punctuation.section.property-list.begin.bracket.curly.scss'] + {tokens} = grammar.tokenizeLine '@include media($width: 100px){}' + + expect(tokens[3]).toEqual value: 'media', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'entity.name.function.scss'] + expect(tokens[4]).toEqual value: '(', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'punctuation.definition.parameters.begin.bracket.round.scss'] + expect(tokens[6]).toEqual value: ':', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'punctuation.definition'] + expect(tokens[10]).toEqual value: ')', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'punctuation.definition.parameters.end.bracket.round.scss'] + expect(tokens[11]).toEqual value: '{', scopes: ['source.css.scss', 'meta.property-list.scss', 'punctuation.section.property-list.begin.bracket.curly.scss'] + describe '@mixin', -> it 'tokenizes solitary @mixin correctly', -> {tokens} = grammar.tokenizeLine '@mixin' From 77b1b68b692ba6cc92d8fdc9c4cb58b3d6fdeda4 Mon Sep 17 00:00:00 2001 From: esdoppio Date: Thu, 23 Jun 2016 08:56:33 +0800 Subject: [PATCH 3/4] SCSS: Add specs for solitary @-rule `include` --- spec/scss-spec.coffee | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/scss-spec.coffee b/spec/scss-spec.coffee index c103811..feb7b75 100644 --- a/spec/scss-spec.coffee +++ b/spec/scss-spec.coffee @@ -42,6 +42,11 @@ describe 'SCSS grammar', -> describe '@include', -> it 'tokenizes it correctly', -> + {tokens} = grammar.tokenizeLine '@include' + + expect(tokens[0]).toEqual value: '@', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss', 'punctuation.definition.keyword.scss'] + expect(tokens[1]).toEqual value: 'include', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss'] + {tokens} = grammar.tokenizeLine '@include media{}' expect(tokens[0]).toEqual value: '@', scopes: ['source.css.scss', 'meta.at-rule.include.scss', 'keyword.control.at-rule.include.scss', 'punctuation.definition.keyword.scss'] From 4591d4ccb0eac38a69dd3ce9e02a321b3fe0d559 Mon Sep 17 00:00:00 2001 From: esdoppio Date: Thu, 16 Jun 2016 11:02:55 +0800 Subject: [PATCH 4/4] SCSS: Rewrite #at_rule_include --- grammars/scss.cson | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/grammars/scss.cson b/grammars/scss.cson index 48919ec..bf75f71 100644 --- a/grammars/scss.cson +++ b/grammars/scss.cson @@ -294,27 +294,41 @@ 'at_rule_include': 'patterns': [ { - 'begin': '\\s*((@)include\\b)\\s*' - 'captures': + 'begin': '(?<=@include)\\s+([\\w-]+)\\s*(\\()' + 'beginCaptures': '1': - 'name': 'keyword.control.at-rule.include.scss' - '2': - 'name': 'punctuation.definition.keyword.scss' - '3': 'name': 'entity.name.function.scss' - '4': - 'name': 'entity.name.text.scss' - 'end': '\\s*[\\)|\\s\\;]' + '2': + 'name': 'punctuation.definition.parameters.begin.bracket.round.scss' + 'end': '\\)' + 'endCaptures': + '0': + 'name': 'punctuation.definition.parameters.end.bracket.round.scss' 'name': 'meta.at-rule.include.scss' 'patterns': [ { 'include': '#function_attributes' } - { - 'include': '#functions' - } ] } + { + 'match': '(?<=@include)\\s+([\\w-]+)' + 'captures': + '0': + 'name': 'meta.at-rule.include.scss' + '1': + 'name': 'entity.name.function.scss' + } + { + 'match': '((@)include)\\b' + 'captures': + '0': + 'name': 'meta.at-rule.include.scss' + '1': + 'name': 'keyword.control.at-rule.include.scss' + '2': + 'name': 'punctuation.definition.keyword.scss' + } ] 'at_rule_keyframes': 'patterns': [