diff --git a/grammars/javascript.cson b/grammars/javascript.cson index bd9b5573..3d8befcd 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -60,7 +60,7 @@ 'name': 'meta.class.js' } { - 'begin': '([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*(=)\\s*(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)(\\()' + 'begin': '([a-zA-Z_?.$][\\w?.$]*)\\.(prototype)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*(=)\\s*(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)(?=\\()' 'beginCaptures': '1': 'name': 'support.class.js' @@ -76,18 +76,19 @@ 'name': 'storage.type.function.js' '7': 'name': 'storage.type.function.js' - '8': - 'name': 'punctuation.definition.parameters.begin.js' 'comment': 'match stuff like: Sound.prototype.play = function() { … }' - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'name': 'meta.function.prototype.js' 'patterns': [ { 'include': '#function-params' } + { + 'include': '#function-body' + } ] } { @@ -105,7 +106,7 @@ 'name': 'meta.function.js' } { - 'begin': '([a-zA-Z_?.$][\\w?.$]*)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*(=)\\s*(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(\\()' + 'begin': '([a-zA-Z_?.$][\\w?.$]*)\\.([a-zA-Z_?.$][\\w?.$]*)\\s*(=)\\s*(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(?=\\()' 'beginCaptures': '1': 'name': 'support.class.js' @@ -124,19 +125,22 @@ '8': 'name': 'punctuation.definition.parameters.begin.js' 'comment': 'match stuff like: Sound.play = function() { … }' - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'name': 'meta.function.js' 'patterns': [ { 'include': '#function-params' } + { + 'include': '#function-body' + } ] } { - 'begin': '([a-zA-Z_?$][\\w?$]*)\\s*(=)\\s*(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(\\()' + 'begin': '([a-zA-Z_?$][\\w?$]*)\\s*(=)\\s*(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(?=\\()' 'beginCaptures': '1': 'name': 'entity.name.function.js' @@ -153,19 +157,22 @@ '7': 'name': 'punctuation.definition.parameters.begin.js' 'comment': 'match stuff like: play = function() { … }' - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'name': 'meta.function.js' 'patterns': [ { 'include': '#function-params' } + { + 'include': '#function-body' + } ] } { - 'begin': '\\b(?:(async)(?:\\s+))?(function\\*?)\\s*((\\*)|(?:(?:\\s+)(\\*?[a-zA-Z_$]\\w*)))?\\s*(\\()' + 'begin': '\\b(?:(async)(?:\\s+))?(function\\*?)\\s*((\\*)|(?:(?:\\s+)(\\*?[a-zA-Z_$]\\w*)))?\\s*(?=\\()' 'beginCaptures': '1': 'name': 'storage.modifier.js' @@ -178,19 +185,22 @@ '6': 'name': 'punctuation.definition.parameters.begin.js' 'comment': 'match regular function like: function myFunc(arg) { … }' - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'name': 'meta.function.js' 'patterns': [ { 'include': '#function-params' } + { + 'include': '#function-body' + } ] } { - 'begin': '\\b([a-zA-Z_?.$][\\w?.$]*)\\s*(:)\\s*\\b(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(\\()' + 'begin': '\\b([a-zA-Z_?.$][\\w?.$]*)\\s*(:)\\s*\\b(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(?=\\()' 'beginCaptures': '1': 'name': 'entity.name.function.js' @@ -207,19 +217,22 @@ '7': 'name': 'punctuation.definition.parameters.begin.js' 'comment': 'match stuff like: foobar: function() { … }' - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'name': 'meta.function.json.js' 'patterns': [ { 'include': '#function-params' } + { + 'include': '#function-body' + } ] } { - 'begin': '(?:((\')([^\']*?)(\'))|((")([^"]*?)(")))\\s*(:)\\s*\\b(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(\\()' + 'begin': '(?:((\')([^\']*?)(\'))|((")([^"]*?)(")))\\s*(:)\\s*\\b(?:(async)(?:\\s+))?(function\\*?)\\s*(\\*?)\\s*([a-zA-Z_?$][\\w?$]*)?\\s*(?=\\()' 'beginCaptures': '1': 'name': 'string.quoted.single.js' @@ -250,32 +263,38 @@ '14': 'name': 'punctuation.definition.parameters.begin.js' 'comment': 'Attempt to match "foo": function' - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'name': 'meta.function.json.js' 'patterns': [ { 'include': '#function-params' } + { + 'include': '#function-body' + } ] } { - 'begin': '\\b(constructor)\\s*(\\()' + 'begin': '\\b(constructor)\\s*(?=\\()' 'beginCaptures': '1': 'name': 'entity.name.function.constructor.js' '2': 'name': 'punctuation.definition.parameters.begin.js' - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'patterns': [ { 'include': '#function-params' } + { + 'include': '#function-body' + } ] } { @@ -300,27 +319,68 @@ } { 'name': 'meta.function.arrow.js' - 'begin': '(?)' + 'begin': '(?)' 'beginCaptures': '1': 'name': 'punctuation.definition.parameters.begin.js' - 'end': '(\\))(\\s*=>)' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' - '2': - 'name': 'storage.type.arrow.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'patterns': [ { - 'include': '#function-params' + 'begin': '\\(' + 'beginCaptures': + '0': + 'name': 'punctuation.definition.parameters.begin.js' + 'end': '(\\))(\\s*=>)' + 'endCaptures': + '1': + 'name': 'punctuation.definition.parameters.end.js' + '2': + 'name': 'storage.type.arrow.js' + 'patterns': [ + { + 'include': '#numbers' + } + { + 'include': '#strings' + } + { + 'match': '\\[|\\]' + 'name': 'meta.brace.square.js' + } + { + 'match': '\\{|\\}' + 'name': 'meta.brace.curly.js' + } + { + 'match': ',' + 'name': 'meta.object.delimiter.js' + } + { + 'match': '=' + 'name': 'keyword.operator.js' + } + { + 'include': '#comments' + } + { + 'match': '[a-zA-Z_$][a-zA-Z_$0-9]*' + 'name': 'variable.parameter.function.js' + } + ] + } + { + 'include': '#function-body' } ] } { 'comment': 'match stuff like: play = (a,b) => { … }' 'name': 'meta.function.arrow.js' - 'begin': '([a-zA-Z_?$][\\w?$]*)\\s*(=)\\s*(\\()(?=(?:[^\\(\\)]*)?\\)\\s*=>)' + 'begin': '([a-zA-Z_?$][\\w?$]*)\\s*(=)\\s*(?=\\((?:[^\\(\\)]*)?\\)\\s*=>)' 'beginCaptures': '1': 'name': 'entity.name.function.js' @@ -328,15 +388,56 @@ 'name': 'keyword.operator.js' '3': 'name': 'punctuation.definition.parameters.begin.js' - 'end': '(\\))(\\s*=>)' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' - '2': - 'name': 'storage.type.arrow.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' 'patterns': [ { - 'include': '#function-params' + 'begin': '\\(' + 'beginCaptures': + '0': + 'name': 'punctuation.definition.parameters.begin.js' + 'end': '(\\))(\\s*=>)' + 'endCaptures': + '1': + 'name': 'punctuation.definition.parameters.end.js' + '2': + 'name': 'storage.type.arrow.js' + 'patterns': [ + { + 'include': '#numbers' + } + { + 'include': '#strings' + } + { + 'match': '\\[|\\]' + 'name': 'meta.brace.square.js' + } + { + 'match': '\\{|\\}' + 'name': 'meta.brace.curly.js' + } + { + 'match': ',' + 'name': 'meta.object.delimiter.js' + } + { + 'match': '=' + 'name': 'keyword.operator.js' + } + { + 'include': '#comments' + } + { + 'match': '[a-zA-Z_$][a-zA-Z_$0-9]*' + 'name': 'variable.parameter.function.js' + } + ] + } + { + 'include': '#function-body' } ] } @@ -661,7 +762,7 @@ 'name': 'meta.method.js' 'comment': 'match regular function like: function myFunc(arg) { … }' - 'begin': '\\b((?!(?:break|case|catch|continue|do|else|finally|for|function|if|export|import|package|return|switch|throw|try|while|with)[\\s\\(])(?:[a-zA-Z_$][a-zA-Z_$0-9]*))\\s*(\\()(?=(?:[^\\(\\)]*)?\\)\\s*\\{)' + 'begin': '\\b((?!(?:break|case|catch|continue|do|else|finally|for|function|if|export|import|package|return|switch|throw|try|while|with)[\\s\\(])(?:[a-zA-Z_$][a-zA-Z_$0-9]*))\\s*(?=\\((?:[^\\(\\)]*)?\\)\\s*\\{)' 'beginCaptures': '1': 'name': 'entity.name.function.js' @@ -672,51 +773,77 @@ { 'include': '#function-params' } + { + 'include': '#function-body' + } { 'include': '#strings' } ] - 'end': '(\\))' + 'end': '\\}' 'endCaptures': - '1': - 'name': 'punctuation.definition.parameters.end.js' + '0': + 'name': 'punctuation.definition.function.body.end.js' } ] 'function-params': 'patterns': [ { - 'include': '#numbers' - } - { - 'include': '#strings' - } - { - 'match': '\\(|\\)' - 'name': 'meta.brace.round.js' - } - { - 'match': '\\[|\\]' - 'name': 'meta.brace.square.js' - } - { - 'match': '\\{|\\}' - 'name': 'meta.brace.curly.js' - } - { - 'match': ',' - 'name': 'meta.object.delimiter.js' - } - { - 'match': '=' - 'name': 'keyword.operator.js' - } - { - 'include': '#comments' + 'begin': '\\(' + 'beginCaptures': + '0': + 'name': 'punctuation.definition.parameters.begin.js' + 'end': '\\)' + 'endCaptures': + '0': + 'name': 'punctuation.definition.parameters.end.js' + 'patterns': [ + { + 'include': '#numbers' + } + { + 'include': '#strings' + } + { + 'match': '\\[|\\]' + 'name': 'meta.brace.square.js' + } + { + 'match': '\\{|\\}' + 'name': 'meta.brace.curly.js' + } + { + 'match': ',' + 'name': 'meta.object.delimiter.js' + } + { + 'match': '=' + 'name': 'keyword.operator.js' + } + { + 'include': '#comments' + } + { + 'match': '[a-zA-Z_$][a-zA-Z_$0-9]*' + 'name': 'variable.parameter.function.js' + } + ] } + ] + 'function-body': + 'patterns': [ { - 'match': '[a-zA-Z_$][a-zA-Z_$0-9]*' - 'name': 'variable.parameter.function.js' + 'begin': '\\{' + 'beginCaptures': + '0': + 'name': 'punctuation.definition.function.body.begin.js' + 'end': '(?=\\})' + 'patterns': [ + { + 'include': '$self' + } + ] } ] 'interpolated_js': diff --git a/spec/javascript-spec.coffee b/spec/javascript-spec.coffee index e960c933..e55fd157 100644 --- a/spec/javascript-spec.coffee +++ b/spec/javascript-spec.coffee @@ -406,13 +406,16 @@ describe "Javascript grammar", -> describe "non-anonymous functions", -> it "tokenizes methods", -> - {tokens} = grammar.tokenizeLine('Foo.method = function nonAnonymous(') + {tokens} = grammar.tokenizeLine('Foo.method = function nonAnonymous(){}') expect(tokens[0]).toEqual value: 'Foo', scopes: ['source.js', 'meta.function.js', 'support.class.js'] expect(tokens[2]).toEqual value: 'method', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js'] expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'keyword.operator.js'] expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js'] expect(tokens[8]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js'] expect(tokens[9]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js'] + expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[12]).toEqual value: '}', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.end.js'] it "tokenizes methods", -> {tokens} = grammar.tokenizeLine('f(a, b) {}') @@ -422,8 +425,10 @@ describe "Javascript grammar", -> expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.method.js', 'meta.object.delimiter.js'] expect(tokens[5]).toEqual value: 'b', scopes: ['source.js', 'meta.method.js', 'variable.parameter.function.js'] expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[8]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[9]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.end.js'] - {tokens} = grammar.tokenizeLine('hi({host, root = "./", plugins = [a, "b", "c", d]}) {}') + {tokens} = grammar.tokenizeLine('hi({host, root = "./", plugins = [a, "b", "c", d]}){}') expect(tokens[0]).toEqual value: 'hi', scopes: ['source.js', 'meta.method.js', 'entity.name.function.js'] expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.begin.js'] expect(tokens[2]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'meta.brace.curly.js'] @@ -447,41 +452,60 @@ describe "Javascript grammar", -> expect(tokens[34]).toEqual value: ']', scopes: ['source.js', 'meta.method.js', 'meta.brace.square.js'] expect(tokens[35]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'meta.brace.curly.js'] expect(tokens[36]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[37]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[38]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.end.js'] it "tokenizes functions", -> - {tokens} = grammar.tokenizeLine('var func = function nonAnonymous(') + {tokens} = grammar.tokenizeLine('var func = function nonAnonymous(){}') expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.modifier.js'] expect(tokens[2]).toEqual value: 'func', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js'] expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'keyword.operator.js'] expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js'] expect(tokens[8]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js'] expect(tokens[9]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js'] + expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[12]).toEqual value: '}', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.end.js'] it "tokenizes object functions", -> - {tokens} = grammar.tokenizeLine('foo: function nonAnonymous(') + {tokens} = grammar.tokenizeLine('foo: function nonAnonymous(){}') expect(tokens[0]).toEqual value: 'foo', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js'] expect(tokens[1]).toEqual value: ':', scopes: ['source.js', 'meta.function.json.js', 'keyword.operator.js'] expect(tokens[3]).toEqual value: 'function', scopes: ['source.js', 'meta.function.json.js', 'storage.type.function.js'] expect(tokens[5]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js'] expect(tokens[6]).toEqual value: '(', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.begin.js'] + expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[8]).toEqual value: '{', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[9]).toEqual value: '}', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.end.js'] it "tokenizes quoted object functions", -> - {tokens} = grammar.tokenizeLine('"foo": function nonAnonymous(') + {tokens} = grammar.tokenizeLine('"foo": function nonAnonymous(){}') expect(tokens[1]).toEqual value: 'foo', scopes: ['source.js', 'meta.function.json.js', 'string.quoted.double.js', 'entity.name.function.js'] expect(tokens[3]).toEqual value: ':', scopes: ['source.js', 'meta.function.json.js', 'keyword.operator.js'] expect(tokens[5]).toEqual value: 'function', scopes: ['source.js', 'meta.function.json.js', 'storage.type.function.js'] expect(tokens[7]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js'] expect(tokens[8]).toEqual value: '(', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.begin.js'] + expect(tokens[9]).toEqual value: ')', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[10]).toEqual value: '{', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[11]).toEqual value: '}', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.end.js'] it "tokenizes async functions", -> {tokens} = grammar.tokenizeLine('async function f(){}') expect(tokens[0]).toEqual value: 'async', scopes: ['source.js', 'meta.function.js', 'storage.modifier.js'] expect(tokens[2]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js'] expect(tokens[4]).toEqual value: 'f', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js'] + expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js'] + expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[7]).toEqual value: '{', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[8]).toEqual value: '}', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.end.js'] {tokens} = grammar.tokenizeLine('async f(){}') expect(tokens[0]).toEqual value: 'async', scopes: ['source.js', 'storage.modifier.js'] expect(tokens[2]).toEqual value: 'f', scopes: ['source.js', 'meta.method.js', 'entity.name.function.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.begin.js'] + expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[5]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[6]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.end.js'] it "tokenizes arrow functions with params", -> {tokens} = grammar.tokenizeLine('(param1,param2)=>{}') @@ -490,6 +514,8 @@ describe "Javascript grammar", -> expect(tokens[3]).toEqual value: 'param2', scopes: ['source.js', 'meta.function.arrow.js', 'variable.parameter.function.js'] expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.parameters.end.js'] expect(tokens[5]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.js', 'storage.type.arrow.js'] + expect(tokens[6]).toEqual value: '{', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[7]).toEqual value: '}', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.end.js'] it "tokenizes stored arrow functions with params", -> {tokens} = grammar.tokenizeLine('var func = (param1,param2)=>{}') @@ -500,6 +526,8 @@ describe "Javascript grammar", -> expect(tokens[9]).toEqual value: 'param2', scopes: ['source.js', 'meta.function.arrow.js', 'variable.parameter.function.js'] expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.parameters.end.js'] expect(tokens[11]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.js', 'storage.type.arrow.js'] + expect(tokens[12]).toEqual value: '{', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[13]).toEqual value: '}', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.end.js'] describe "strings and functions", -> it "doesn't confuse them", -> @@ -522,7 +550,7 @@ describe "Javascript grammar", -> expect(tokens[3]).toEqual value: '){', scopes: ['source.js', 'meta.method.js', 'string.quoted.double.js'] expect(tokens[4]).toEqual value: '"', scopes: ['source.js', 'meta.method.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js'] expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js'] - expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js'] + expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'meta.method.js'] delimsByScope = "string.quoted.double.js": '"' @@ -598,9 +626,9 @@ describe "Javascript grammar", -> expect(tokens[7]).toEqual value: ', arg2 ', scopes: ['source.js', 'meta.function.js', 'comment.block.js'] expect(tokens[8]).toEqual value: '*/', scopes: ['source.js', 'meta.function.js', 'comment.block.js', 'punctuation.definition.comment.js'] expect(tokens[9]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.end.js'] - expect(tokens[10]).toEqual value: ' ', scopes: ['source.js'] - expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'punctuation.section.scope.begin.js'] - expect(tokens[12]).toEqual value: '}', scopes: ['source.js', 'punctuation.section.scope.end.js'] + expect(tokens[10]).toEqual value: ' ', scopes: ['source.js', 'meta.function.js'] + expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.begin.js'] + expect(tokens[12]).toEqual value: '}', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.end.js'] {tokens} = grammar.tokenizeLine('foo: function (/**Bar*/bar){') expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.begin.js'] @@ -608,6 +636,8 @@ describe "Javascript grammar", -> expect(tokens[7]).toEqual value: 'Bar', scopes: ['source.js', 'meta.function.json.js', 'comment.block.documentation.js'] expect(tokens[8]).toEqual value: '*/', scopes: ['source.js', 'meta.function.json.js', 'comment.block.documentation.js', 'punctuation.definition.comment.js'] expect(tokens[9]).toEqual value: 'bar', scopes: ['source.js', 'meta.function.json.js', 'variable.parameter.function.js'] + expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.end.js'] + expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.begin.js'] {tokens} = grammar.tokenizeLine('function test(bar, // comment') expect(tokens[0]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']