From 9610949329f5fdf8d5290cac7331cabf2a00bf49 Mon Sep 17 00:00:00 2001 From: Wliu Date: Sat, 29 Aug 2015 11:51:58 -0400 Subject: [PATCH] Add support for props and relax support.function regex --- grammars/javascript.cson | 12 ++++++++---- spec/javascript-spec.coffee | 31 +++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/grammars/javascript.cson b/grammars/javascript.cson index d12f50f2..a7b8cca6 100644 --- a/grammars/javascript.cson +++ b/grammars/javascript.cson @@ -487,14 +487,14 @@ 'match': '(? 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,6 +447,17 @@ 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.modifier.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('/**/')