diff --git a/grammars/javascript.cson b/grammars/javascript.cson index 2005ab94..a7917d78 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -384,13 +384,9 @@ 'name': 'storage.type.js' } { - 'match': '(? describe "constants", -> it "tokenizes ALL_CAPS variables as constants", -> {tokens} = grammar.tokenizeLine('var MY_COOL_VAR = 42;') - expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.type.var.js'] + expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.modifier.js'] expect(tokens[1]).toEqual value: ' ', scopes: ['source.js'] expect(tokens[2]).toEqual value: 'MY_COOL_VAR', scopes: ['source.js', 'constant.other.js'] expect(tokens[3]).toEqual value: ' ', scopes: ['source.js'] @@ -414,7 +414,6 @@ describe "Javascript grammar", -> 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'] - it "tokenizes methods", -> {tokens} = grammar.tokenizeLine('f(a, b) {}') expect(tokens[0]).toEqual value: 'f', 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'] @@ -448,9 +447,20 @@ describe "Javascript grammar", -> 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'] + {tokens} = grammar.tokenizeLine('hello.wow().submit();') + expect(tokens[0]).toEqual value: 'hello', scopes: ['source.js'] + expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] + expect(tokens[2]).toEqual value: 'wow', scopes: ['source.js', 'support.function.js'] + expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.brace.round.js'] + expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js'] + expect(tokens[5]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] + expect(tokens[6]).toEqual value: 'submit', scopes: ['source.js', 'support.function.dom.js'] + expect(tokens[7]).toEqual value: '(', scopes: ['source.js', 'meta.brace.round.js'] + expect(tokens[8]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js'] + it "tokenizes functions", -> {tokens} = grammar.tokenizeLine('var func = function nonAnonymous(') - expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.type.var.js'] + 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'] @@ -493,7 +503,7 @@ describe "Javascript grammar", -> it "tokenizes stored arrow functions with params", -> {tokens} = grammar.tokenizeLine('var func = (param1,param2)=>{}') - expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.type.var.js'] + expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.modifier.js'] expect(tokens[2]).toEqual value: 'func', scopes: ['source.js', 'meta.function.arrow.js', 'entity.name.function.js'] expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'meta.function.arrow.js', 'keyword.operator.js'] expect(tokens[7]).toEqual value: 'param1', scopes: ['source.js', 'meta.function.arrow.js', 'variable.parameter.function.js'] @@ -508,7 +518,7 @@ describe "Javascript grammar", -> expect(tokens[1]).toEqual value: "a", scopes: ['source.js', 'string.quoted.single.js'] expect(tokens[2]).toEqual value: "'", scopes: ['source.js', 'string.quoted.single.js', 'punctuation.definition.string.end.js'] expect(tokens[3]).toEqual value: ".", scopes: ['source.js', 'meta.delimiter.method.period.js'] - expect(tokens[4]).toEqual value: "b", scopes: ['source.js'] + expect(tokens[4]).toEqual value: "b", scopes: ['source.js', 'support.function.js'] expect(tokens[5]).toEqual value: "(", scopes: ['source.js', 'meta.brace.round.js'] expect(tokens[6]).toEqual value: "'", scopes: ['source.js', 'string.quoted.single.js', 'punctuation.definition.string.begin.js'] expect(tokens[7]).toEqual value: ":c(d)", scopes: ['source.js', 'string.quoted.single.js'] @@ -543,6 +553,23 @@ describe "Javascript grammar", -> expect(tokens[14]).toEqual value: delim, scopes: ['source.js', scope, 'punctuation.definition.string.end.js'] expect(tokens[15]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js'] + describe "properties", -> + it "tokenizes them", -> + {tokens} = grammar.tokenizeLine('hello.prop.anotherProp.notAProp().yesProp.window;') + expect(tokens[0]).toEqual value: 'hello', scopes: ['source.js'] + expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] + expect(tokens[2]).toEqual value: 'prop', scopes: ['source.js', 'entity.name.property.js'] + expect(tokens[3]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] + expect(tokens[4]).toEqual value: 'anotherProp', scopes: ['source.js', 'entity.name.property.js'] + expect(tokens[5]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] + expect(tokens[6]).toEqual value: 'notAProp', scopes: ['source.js', 'support.function.js'] + expect(tokens[7]).toEqual value: '(', scopes: ['source.js', 'meta.brace.round.js'] + expect(tokens[8]).toEqual value: ')', scopes: ['source.js', 'meta.brace.round.js'] + expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] + expect(tokens[10]).toEqual value: 'yesProp', scopes: ['source.js', 'entity.name.property.js'] + expect(tokens[9]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.method.period.js'] + expect(tokens[12]).toEqual value: 'window', scopes: ['source.js', 'support.class.js'] + describe "comments", -> it "tokenizes /* */ comments", -> {tokens} = grammar.tokenizeLine('/**/')