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

Commit 3e19414

Browse files
committed
🐛 Fix constructor body not being highlighted
Also bring it in line with the new function tokenization syntax
1 parent a6adf14 commit 3e19414

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
@@ -640,15 +640,6 @@ describe "Javascript grammar", ->
640640
{tokens} = grammar.tokenizeLine('class extends $$')
641641
expect(tokens[4]).toEqual value: '$$', scopes: ['source.js', 'meta.class.js', 'entity.name.type.js']
642642

643-
it "tokenizes constructors", ->
644-
{tokens} = grammar.tokenizeLine('constructor(p1, p2)')
645-
expect(tokens[0]).toEqual value: 'constructor', scopes: ['source.js', 'entity.name.function.constructor.js']
646-
expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.parameters.js', 'punctuation.definition.parameters.begin.bracket.round.js']
647-
expect(tokens[2]).toEqual value: 'p1', scopes: ['source.js', 'meta.parameters.js', 'variable.parameter.function.js']
648-
expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.parameters.js', 'meta.delimiter.object.comma.js']
649-
expect(tokens[5]).toEqual value: 'p2', scopes: ['source.js', 'meta.parameters.js', 'variable.parameter.function.js']
650-
expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.parameters.js', 'punctuation.definition.parameters.end.bracket.round.js']
651-
652643
describe "ES6 import", ->
653644
it "tokenizes import", ->
654645
{tokens} = grammar.tokenizeLine('import "module-name";')
@@ -1028,6 +1019,16 @@ describe "Javascript grammar", ->
10281019
expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
10291020
expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js']
10301021

1022+
it "tokenizes constructors", ->
1023+
{tokens} = grammar.tokenizeLine('constructor(p1, p2) { this.p1 = p1; }')
1024+
expect(tokens[0]).toEqual value: 'constructor', scopes: ['source.js', 'meta.function.js', 'entity.name.function.constructor.js']
1025+
expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'punctuation.definition.parameters.begin.bracket.round.js']
1026+
expect(tokens[2]).toEqual value: 'p1', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.parameter.function.js']
1027+
expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'meta.delimiter.object.comma.js']
1028+
expect(tokens[5]).toEqual value: 'p2', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'variable.parameter.function.js']
1029+
expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'meta.parameters.js', 'punctuation.definition.parameters.end.bracket.round.js']
1030+
expect(tokens[10]).toEqual value: 'this', scopes: ['source.js', 'variable.language.js']
1031+
10311032
it "tokenizes named function expressions", ->
10321033
{tokens} = grammar.tokenizeLine('var func = function foo(){}')
10331034
expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.type.var.js']

0 commit comments

Comments
 (0)