From 4ef4d79e18eb6607de0b045ba9b246b73497094b Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Tue, 23 Aug 2016 17:47:57 +0300 Subject: [PATCH 1/4] :bug: Fix function keyword as property name --- grammars/javascript.cson | 2 +- spec/javascript-spec.coffee | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 5572d851..b74a5c84 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -297,7 +297,7 @@ { # [async] function [name](params) # function* name(params) – generator function declaration - 'begin': '(?=(\\basync\\b\\s*)?\\bfunction\\b)' + 'begin': '(?=(\\basync\\b\\s*)?\\bfunction\\b(?!:))' 'end': '(?<=})' 'patterns': [ { diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 68f0b29c..cefc4fea 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1084,6 +1084,13 @@ describe "Javascript grammar", -> expect(tokens[7]).toEqual value: 'foo', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js'] expect(tokens[8]).toEqual value: '(', scopes: ['source.js', 'meta.function.json.js', 'meta.parameters.js', 'punctuation.definition.parameters.begin.bracket.round.js'] + {tokens} = grammar.tokenizeLine('function: a => a') + expect(tokens[0]).toEqual value: 'function', scopes: ['source.js', 'meta.function.arrow.json.js', 'entity.name.function.js'] + expect(tokens[1]).toEqual value: ':', scopes: ['source.js', 'meta.function.arrow.json.js', 'keyword.operator.assignment.js'] + expect(tokens[3]).toEqual value: 'a', scopes: ['source.js', 'meta.function.arrow.json.js', 'meta.parameters.js', 'variable.parameter.function.js'] + expect(tokens[5]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.json.js', 'storage.type.function.arrow.js'] + expect(tokens[6]).toEqual value: ' a', scopes: ['source.js'] + it "tokenizes generator functions", -> {tokens} = grammar.tokenizeLine('function* foo(){}') expect(tokens[0]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js'] From 3a2cb948cbe26b6ad1b91240cebcc052791401a5 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Tue, 23 Aug 2016 18:06:49 +0300 Subject: [PATCH 2/4] :white_check_mark: Add test for arrow function --- spec/javascript-spec.coffee | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index cefc4fea..cf1119f0 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1091,6 +1091,13 @@ describe "Javascript grammar", -> expect(tokens[5]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.json.js', 'storage.type.function.arrow.js'] expect(tokens[6]).toEqual value: ' a', scopes: ['source.js'] + {tokens} = grammar.tokenizeLine('"func": a => a') + expect(tokens[1]).toEqual value: 'func', scopes: ['source.js', 'meta.function.arrow.json.js', 'string.quoted.double.js', 'entity.name.function.js'] + expect(tokens[3]).toEqual value: ':', scopes: ['source.js', 'meta.function.arrow.json.js', 'keyword.operator.assignment.js'] + expect(tokens[5]).toEqual value: 'a', scopes: ['source.js', 'meta.function.arrow.json.js', 'meta.parameters.js', 'variable.parameter.function.js'] + expect(tokens[7]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.json.js', 'storage.type.function.arrow.js'] + expect(tokens[8]).toEqual value: ' a', scopes: ['source.js'] + it "tokenizes generator functions", -> {tokens} = grammar.tokenizeLine('function* foo(){}') expect(tokens[0]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js'] From 86b6ac1e5aa3a6c6e07b6c6aad61260f14d744b4 Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Tue, 23 Aug 2016 18:25:58 +0300 Subject: [PATCH 3/4] :bug: Allow whitespaces before colon with arrow function as a property --- grammars/javascript.cson | 4 ++-- spec/javascript-spec.coffee | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index b74a5c84..6a3b81e8 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -297,7 +297,7 @@ { # [async] function [name](params) # function* name(params) – generator function declaration - 'begin': '(?=(\\basync\\b\\s*)?\\bfunction\\b(?!:))' + 'begin': '(?=(\\basync\\b\\s*)?\\bfunction\\b(?!\\s*:))' 'end': '(?<=})' 'patterns': [ { @@ -591,7 +591,7 @@ (?<=})| ((?! \\s*{| - \\G[\\w$]+:| + \\G[\\w$]+\\s*:| \\s*/\\*|\\s*// )(?=\\s*\\S)) ''' diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index cf1119f0..8cf4e9b9 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1084,12 +1084,12 @@ describe "Javascript grammar", -> expect(tokens[7]).toEqual value: 'foo', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js'] expect(tokens[8]).toEqual value: '(', scopes: ['source.js', 'meta.function.json.js', 'meta.parameters.js', 'punctuation.definition.parameters.begin.bracket.round.js'] - {tokens} = grammar.tokenizeLine('function: a => a') + {tokens} = grammar.tokenizeLine('function : a => a') expect(tokens[0]).toEqual value: 'function', scopes: ['source.js', 'meta.function.arrow.json.js', 'entity.name.function.js'] - expect(tokens[1]).toEqual value: ':', scopes: ['source.js', 'meta.function.arrow.json.js', 'keyword.operator.assignment.js'] - expect(tokens[3]).toEqual value: 'a', scopes: ['source.js', 'meta.function.arrow.json.js', 'meta.parameters.js', 'variable.parameter.function.js'] - expect(tokens[5]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.json.js', 'storage.type.function.arrow.js'] - expect(tokens[6]).toEqual value: ' a', scopes: ['source.js'] + expect(tokens[2]).toEqual value: ':', scopes: ['source.js', 'meta.function.arrow.json.js', 'keyword.operator.assignment.js'] + expect(tokens[4]).toEqual value: 'a', scopes: ['source.js', 'meta.function.arrow.json.js', 'meta.parameters.js', 'variable.parameter.function.js'] + expect(tokens[6]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.json.js', 'storage.type.function.arrow.js'] + expect(tokens[7]).toEqual value: ' a', scopes: ['source.js'] {tokens} = grammar.tokenizeLine('"func": a => a') expect(tokens[1]).toEqual value: 'func', scopes: ['source.js', 'meta.function.arrow.json.js', 'string.quoted.double.js', 'entity.name.function.js'] From 3a402d4d9bf6cd3785ee5556f8d2c817cd7516ff Mon Sep 17 00:00:00 2001 From: Maxim Sokolov Date: Tue, 23 Aug 2016 18:29:53 +0300 Subject: [PATCH 4/4] :white_check_mark: Test --- spec/javascript-spec.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index 8cf4e9b9..4c7bee56 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -1098,6 +1098,9 @@ describe "Javascript grammar", -> expect(tokens[7]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.json.js', 'storage.type.function.arrow.js'] expect(tokens[8]).toEqual value: ' a', scopes: ['source.js'] + {tokens} = grammar.tokenizeLine('"func" : a => a') + expect(tokens[8]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.json.js', 'storage.type.function.arrow.js'] + it "tokenizes generator functions", -> {tokens} = grammar.tokenizeLine('function* foo(){}') expect(tokens[0]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']