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

Commit f9520c4

Browse files
author
Wliu
authored
Merge pull request #405 from Alhadis/case-fix
Fix missing highlighting in case statements
2 parents 2ca6aba + f300a4d commit f9520c4

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

Diff for: grammars/javascript.cson

+45-5
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,20 @@
275275
'name': 'meta.export.js'
276276
}
277277
{
278-
'match': '(?<!\\.)\\b(super|this|arguments)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(super|this|arguments)(?=\\s*:)'
278+
'match': '''(?x)
279+
(?<!\\.)\\b(super|this|arguments)(?!\\s*:)\\b
280+
|
281+
(?<=\\?)\\s*(super|this|arguments)(?=\\s*:)
282+
|
283+
(?<=[\\s}:;]case|^case)\\s+(super|this|arguments)(?=\\s*:)
284+
'''
279285
'captures':
280286
'1':
281287
'name': 'variable.language.js'
282288
'2':
283289
'name': 'variable.language.js'
290+
'3':
291+
'name': 'variable.language.js'
284292
}
285293
{
286294
# [async] function [name](params)
@@ -907,28 +915,52 @@
907915
'name': 'keyword.operator.spread.js'
908916
}
909917
{
910-
'match': '(?<!\\.)\\b(true|false)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(true|false)(?=\\s*:)'
918+
'match': '''(?x)
919+
(?<!\\.)\\b(true|false)(?!\\s*:)\\b
920+
|
921+
(?<=\\?)\\s*(true|false)(?=\\s*:)
922+
|
923+
(?<=[\\s}:;]case|^case)\\s+(true|false)(?=\\s*:)
924+
'''
911925
'captures':
912926
'1':
913927
'name': 'constant.language.boolean.$1.js'
914928
'2':
915929
'name': 'constant.language.boolean.$2.js'
930+
'3':
931+
'name': 'constant.language.boolean.$3.js'
916932
}
917933
{
918-
'match': '(?<!\\.)\\b(null)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(null)(?=\\s*:)'
934+
'match': '''(?x)
935+
(?<!\\.)\\b(null)(?!\\s*:)\\b
936+
|
937+
(?<=\\?)\\s*(null)(?=\\s*:)
938+
|
939+
(?<=[\\s}:;]case|^case)\\s+(null)(?=\\s*:)
940+
'''
919941
'captures':
920942
'1':
921943
'name': 'constant.language.null.js'
922944
'2':
923945
'name': 'constant.language.null.js'
946+
'3':
947+
'name': 'constant.language.null.js'
924948
}
925949
{
926-
'match': '(?<!\\.)\\b(debugger)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(debugger)(?=\\s*:)'
950+
'match': '''(?x)
951+
(?<!\\.)\\b(debugger)(?!\\s*:)\\b
952+
|
953+
(?<=\\?)\\s*(debugger)(?=\\s*:)
954+
|
955+
(?<=[\\s}:;]case|^case)\\s+(debugger)(?=\\s*:)
956+
'''
927957
'captures':
928958
'1':
929959
'name': 'keyword.other.js'
930960
'2':
931961
'name': 'keyword.other.js'
962+
'3':
963+
'name': 'keyword.other.js'
932964
}
933965
{
934966
'match': '(?<!\\$)\\b(Anchor|Applet|Area|Array|Boolean|Button|Checkbox|Date|document|event|FileUpload|Form|Frame|Function|Hidden|History|Image|JavaArray|JavaClass|JavaObject|JavaPackage|java|Layer|Link|Location|Map|MimeType|Number|navigator|netscape|Object|Option|Packages|Password|Plugin|performance|Radio|RegExp|Reset|Select|Set|String|Style|Submit|Symbol|screen|sun|Text|Textarea|WeakMap|WeakSet|window|XMLHttpRequest)\\b'
@@ -955,12 +987,20 @@
955987
'name': 'support.constant.dom.js'
956988
}
957989
{
958-
'match': '(?<!\\.)\\b(module|exports|__filename|__dirname|global|process)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)(module|exports|__filename|__dirname|global|process)(?=\\s*:)'
990+
'match': '''(?x)
991+
(?<!\\.)\\b(module|exports|__filename|__dirname|global|process)(?!\\s*:)\\b
992+
|
993+
(?<=\\?)\\s*(module|exports|__filename|__dirname|global|process)(?=\\s*:)
994+
|
995+
(?<=[\\s}:;]case|^case)\\s+(module|exports|__filename|__dirname|global|process)(?=\\s*:)
996+
'''
959997
'captures':
960998
'1':
961999
'name': 'support.variable.js'
9621000
'2':
9631001
'name': 'support.variable.js'
1002+
'3':
1003+
'name': 'support.variable.js'
9641004
}
9651005
{
9661006
'match': '\\b(Infinity|NaN|undefined)\\b'

Diff for: spec/javascript-spec.coffee

+6
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ describe "Javascript grammar", ->
8686
expect(tokens[4]).toEqual value: ' ', scopes: ['source.js']
8787
expect(tokens[5]).toEqual value: keyword, scopes: ['source.js', scope]
8888

89+
it "tokenises `#{keyword}` in case statements", ->
90+
{tokens} = grammar.tokenizeLine("case #{keyword}:")
91+
expect(tokens[0]).toEqual value: 'case', scopes: ['source.js', 'keyword.control.js']
92+
expect(tokens[2]).toEqual value: keyword, scopes: ['source.js', scope]
93+
expect(tokens[3]).toEqual value: ':', scopes: ['source.js', 'keyword.operator.js']
94+
8995
describe "built-in globals", ->
9096
it "tokenizes built-in classes", ->
9197
{tokens} = grammar.tokenizeLine('window')

0 commit comments

Comments
 (0)