Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 3f2b018

Browse files
WliuWliu
Wliu
authored and
Wliu
committed
Merge pull request #360 from atom/wl-constructor-body-highlighting
Fix constructor body not being highlighted
2 parents a3ef259 + 3e19414 commit 3f2b018

File tree

2 files changed

+36
-21
lines changed

2 files changed

+36
-21
lines changed

grammars/javascript.cson

+26-12
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,32 @@
415415
}
416416
]
417417
}
418+
{
419+
'begin': '(?=\\b(constructor)\\s*)'
420+
'end': '(?<=})'
421+
'patterns': [
422+
{
423+
'include': '#comments'
424+
}
425+
{
426+
'include': '#function_body'
427+
}
428+
{
429+
'begin': '\\G'
430+
'end': '(?<=\\))'
431+
'name': 'meta.function.js'
432+
'patterns': [
433+
{
434+
'match': '\\b(constructor)\\s*'
435+
'name': 'entity.name.function.constructor.js'
436+
}
437+
{
438+
'include': '#function_innards'
439+
}
440+
]
441+
}
442+
]
443+
}
418444
{
419445
# ES6 method definitions: foo() {}
420446
'begin': '''(?x)
@@ -651,18 +677,6 @@
651677
'1':
652678
'name': 'storage.type.function.arrow.js'
653679
}
654-
{
655-
'begin': '\\b(constructor)\\s*(?=\\()'
656-
'beginCaptures':
657-
'1':
658-
'name': 'entity.name.function.constructor.js'
659-
'end': '(?<=\\})'
660-
'patterns': [
661-
{
662-
'include': '#function_params'
663-
}
664-
]
665-
}
666680
{
667681
'match': '''(?x)
668682
\\b(class)

spec/javascript-spec.coffee

+10-9
Original file line numberDiff line numberDiff line change
@@ -649,15 +649,6 @@ describe "Javascript grammar", ->
649649
{tokens} = grammar.tokenizeLine('class extends $$')
650650
expect(tokens[4]).toEqual value: '$$', scopes: ['source.js', 'meta.class.js', 'entity.name.type.class.js']
651651

652-
it "tokenizes constructors", ->
653-
{tokens} = grammar.tokenizeLine('constructor(p1, p2)')
654-
expect(tokens[0]).toEqual value: 'constructor', scopes: ['source.js', 'entity.name.function.constructor.js']
655-
expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.parameters.js', 'punctuation.definition.parameters.begin.bracket.round.js']
656-
expect(tokens[2]).toEqual value: 'p1', scopes: ['source.js', 'meta.parameters.js', 'variable.parameter.function.js']
657-
expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.parameters.js', 'meta.delimiter.object.comma.js']
658-
expect(tokens[5]).toEqual value: 'p2', scopes: ['source.js', 'meta.parameters.js', 'variable.parameter.function.js']
659-
expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.parameters.js', 'punctuation.definition.parameters.end.bracket.round.js']
660-
661652
describe "ES6 import", ->
662653
it "tokenizes import", ->
663654
{tokens} = grammar.tokenizeLine('import "module-name";')
@@ -1042,6 +1033,16 @@ describe "Javascript grammar", ->
10421033
expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
10431034
expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js']
10441035

1036+
it "tokenizes constructors", ->
1037+
{tokens} = grammar.tokenizeLine('constructor(p1, p2) { this.p1 = p1; }')
1038+
expect(tokens[0]).toEqual value: 'constructor', scopes: ['source.js', 'meta.function.js', 'entity.name.function.constructor.js']
1039+
expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'punctuation.definition.parameters.begin.bracket.round.js']
1040+
expect(tokens[2]).toEqual value: 'p1', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.parameter.function.js']
1041+
expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.delimiter.object.comma.js']
1042+
expect(tokens[5]).toEqual value: 'p2', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.parameter.function.js']
1043+
expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'punctuation.definition.parameters.end.bracket.round.js']
1044+
expect(tokens[10]).toEqual value: 'this', scopes: ['source.js', 'variable.language.js']
1045+
10451046
it "tokenizes named function expressions", ->
10461047
{tokens} = grammar.tokenizeLine('var func = function foo(){}')
10471048
expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.type.var.js']

0 commit comments

Comments
 (0)