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

Commit 0b4b99c

Browse files
author
Wliu
authored
Merge pull request #408 from MaximSokolov/fix-arrow-functions-inside-teranry-exp
Fix arrow functions inside ternary expressions
2 parents d6238db + 157241d commit 0b4b99c

File tree

2 files changed

+272
-173
lines changed

2 files changed

+272
-173
lines changed

Diff for: grammars/javascript.cson

+116-89
Original file line numberDiff line numberDiff line change
@@ -279,20 +279,8 @@
279279
]
280280
}
281281
{
282-
'match': '''(?x)
283-
(?<!\\.)\\b(super|this|arguments)(?!\\s*:)\\b
284-
|
285-
(?<=\\?)\\s*(super|this|arguments)(?=\\s*:)
286-
|
287-
(?<=[\\s}:;]case|^case)\\s+(super|this|arguments)(?=\\s*:)
288-
'''
289-
'captures':
290-
'1':
291-
'name': 'variable.language.js'
292-
'2':
293-
'name': 'variable.language.js'
294-
'3':
295-
'name': 'variable.language.js'
282+
'match': '(?<!\\.)\\b(super|this|arguments)(?!\\s*:)\\b'
283+
'name': 'variable.language.js'
296284
}
297285
{
298286
# [async] function [name](params)
@@ -890,25 +878,20 @@
890878
]
891879
}
892880
{
893-
'match': '(?<!\\.)\\b(yield)(?!\\s*:)\\b(?:\\s*(\\*))?|(?<=\\?)(?:\\s*)(yield)(?=\\s*:)',
881+
'match': '(?<!\\.)\\b(yield)(?!\\s*:)\\b(?:\\s*(\\*))?',
894882
'captures':
895883
'1':
896884
'name': 'keyword.control.js'
897885
'2':
898886
'name': 'storage.modifier.js'
899-
'3':
900-
'name': 'keyword.control.js'
901-
'4':
902-
'name': 'storage.modifier.js'
903887
'name': 'meta.control.yield.js'
904888
}
905889
{
906-
'match': '(?<!\\.)\\b(await|break|case|catch|continue|do|else|finally|for|if|import|package|return|switch|throw|try|while|with)(?!\\s*:)\\b'
890+
'match': '(?<!\\.)\\b(await|break|catch|continue|do|else|finally|for|if|import|package|return|throw|try|while|with)(?!\\s*:)\\b'
907891
'name': 'keyword.control.js'
908892
}
909893
{
910-
'match': '(?<!\\.)\\b(default)\\b'
911-
'name': 'keyword.control.js'
894+
'include': '#switch_statement'
912895
}
913896
{
914897
'match': '(?<!\\.)\\b(delete|in|of|instanceof|new|typeof|void)(?!\\s*:)\\b'
@@ -919,52 +902,16 @@
919902
'name': 'keyword.operator.spread.js'
920903
}
921904
{
922-
'match': '''(?x)
923-
(?<!\\.)\\b(true|false)(?!\\s*:)\\b
924-
|
925-
(?<=\\?)\\s*(true|false)(?=\\s*:)
926-
|
927-
(?<=[\\s}:;]case|^case)\\s+(true|false)(?=\\s*:)
928-
'''
929-
'captures':
930-
'1':
931-
'name': 'constant.language.boolean.$1.js'
932-
'2':
933-
'name': 'constant.language.boolean.$2.js'
934-
'3':
935-
'name': 'constant.language.boolean.$3.js'
905+
'match': '(?<!\\.)\\b(true|false)(?!\\s*:)\\b'
906+
'name': 'constant.language.boolean.$1.js'
936907
}
937908
{
938-
'match': '''(?x)
939-
(?<!\\.)\\b(null)(?!\\s*:)\\b
940-
|
941-
(?<=\\?)\\s*(null)(?=\\s*:)
942-
|
943-
(?<=[\\s}:;]case|^case)\\s+(null)(?=\\s*:)
944-
'''
945-
'captures':
946-
'1':
947-
'name': 'constant.language.null.js'
948-
'2':
949-
'name': 'constant.language.null.js'
950-
'3':
951-
'name': 'constant.language.null.js'
909+
'match': '(?<!\\.)\\b(null)(?!\\s*:)\\b'
910+
'name': 'constant.language.null.js'
952911
}
953912
{
954-
'match': '''(?x)
955-
(?<!\\.)\\b(debugger)(?!\\s*:)\\b
956-
|
957-
(?<=\\?)\\s*(debugger)(?=\\s*:)
958-
|
959-
(?<=[\\s}:;]case|^case)\\s+(debugger)(?=\\s*:)
960-
'''
961-
'captures':
962-
'1':
963-
'name': 'keyword.other.js'
964-
'2':
965-
'name': 'keyword.other.js'
966-
'3':
967-
'name': 'keyword.other.js'
913+
'match': '(?<!\\.)\\b(debugger)(?!\\s*:)\\b'
914+
'name': 'keyword.other.debugger.js'
968915
}
969916
{
970917
'match': '''(?x) (?<!\\$) \\b
@@ -1036,20 +983,8 @@
1036983
'name': 'support.constant.dom.js'
1037984
}
1038985
{
1039-
'match': '''(?x)
1040-
(?<!\\.)\\b(module|exports|__filename|__dirname|global|process)(?!\\s*:)\\b
1041-
|
1042-
(?<=\\?)\\s*(module|exports|__filename|__dirname|global|process)(?=\\s*:)
1043-
|
1044-
(?<=[\\s}:;]case|^case)\\s+(module|exports|__filename|__dirname|global|process)(?=\\s*:)
1045-
'''
1046-
'captures':
1047-
'1':
1048-
'name': 'support.variable.js'
1049-
'2':
1050-
'name': 'support.variable.js'
1051-
'3':
1052-
'name': 'support.variable.js'
986+
'match': '(?<!\\.)\\b(module|exports|__filename|__dirname|global|process)(?!\\s*:)\\b'
987+
'name': 'support.variable.js'
1053988
}
1054989
{
1055990
'match': '\\b(Infinity|NaN|undefined)\\b'
@@ -1071,6 +1006,24 @@
10711006
}
10721007
]
10731008
}
1009+
{
1010+
'begin': '\\?'
1011+
'beginCaptures':
1012+
'0':
1013+
'name': 'keyword.operator.ternary.js'
1014+
'end': ':'
1015+
'endCaptures':
1016+
'0':
1017+
'name': 'keyword.operator.ternary.js'
1018+
'patterns': [
1019+
{
1020+
'include': '#prevent_object_keys_matching'
1021+
}
1022+
{
1023+
'include': '$self'
1024+
}
1025+
]
1026+
}
10741027
{
10751028
'include': '#operators'
10761029
}
@@ -1090,12 +1043,8 @@
10901043
'include': '#properties'
10911044
}
10921045
{
1093-
'match': '(?<!\\.)\\b([A-Z][A-Z0-9_]+)(?!\\s*:)\\b|(?<=\\?)(?:\\s*)([A-Z][A-Z0-9_]+)(?=\\s*:)'
1094-
'captures':
1095-
'1':
1096-
'name': 'constant.other.js'
1097-
'2':
1098-
'name': 'constant.other.js'
1046+
'match': '(?<!\\.)\\b[A-Z][A-Z0-9_]+(?!\\s*:)\\b'
1047+
'name': 'constant.other.js'
10991048
}
11001049
{
11011050
'match': '(?<!\\$)\\b[0-9]+[\\w$]*'
@@ -1229,11 +1178,7 @@
12291178
'name': 'keyword.operator.bitwise.js'
12301179
}
12311180
{
1232-
'match': '\\?|:'
1233-
'name': 'keyword.operator.js'
1234-
}
1235-
{
1236-
'match': '='
1181+
'match': '=|:'
12371182
'name': 'keyword.operator.assignment.js'
12381183
}
12391184
{
@@ -1816,3 +1761,85 @@
18161761
]
18171762
}
18181763
]
1764+
'switch_statement':
1765+
'patterns': [
1766+
{
1767+
# switch(expression) {...}
1768+
'begin': '\\bswitch\\b'
1769+
'beginCaptures':
1770+
'0':
1771+
'name': 'keyword.control.switch.js'
1772+
'end': '}'
1773+
'endCaptures':
1774+
'0':
1775+
'name': 'punctuation.definition.section.switch-block.end.bracket.curly.js'
1776+
'name': 'meta.switch-statement.js'
1777+
'patterns': [
1778+
{
1779+
'begin': '\\('
1780+
'beginCaptures':
1781+
'0':
1782+
'name': 'punctuation.definition.switch-expression.begin.bracket.round.js'
1783+
'end': '\\)'
1784+
'endCaptures':
1785+
'0':
1786+
'name': 'punctuation.definition.switch-expression.end.bracket.round.js'
1787+
'patterns': [
1788+
'include': '$self'
1789+
]
1790+
}
1791+
{
1792+
'begin': '{'
1793+
'beginCaptures':
1794+
'0':
1795+
'name': 'punctuation.definition.section.switch-block.begin.bracket.curly.js'
1796+
'end': '(?=})'
1797+
'patterns': [
1798+
{
1799+
'begin': '\\bcase\\b'
1800+
'beginCaptures':
1801+
'0':
1802+
'name': 'keyword.control.case.js'
1803+
'end': ':'
1804+
'endCaptures':
1805+
'0':
1806+
'name': 'punctuation.definition.section.case-statement.js'
1807+
'patterns': [
1808+
{
1809+
'include': '#prevent_object_keys_matching'
1810+
}
1811+
{
1812+
'include': '$self'
1813+
}
1814+
]
1815+
}
1816+
{
1817+
'match': '(?:^\\s*)?\\b(default)\\b\\s*(:)'
1818+
'captures':
1819+
'1':
1820+
'name': 'keyword.control.default.js'
1821+
'2':
1822+
'name': 'punctuation.definition.section.case-statement.js'
1823+
}
1824+
{
1825+
'include': '$self'
1826+
}
1827+
]
1828+
}
1829+
]
1830+
}
1831+
]
1832+
'prevent_object_keys_matching':
1833+
'patterns': [
1834+
{
1835+
# e.g. don't treat null as an object key in
1836+
# ? null :
1837+
# case null:
1838+
'match': '(\\w+)(?=\\s*:)'
1839+
'captures':
1840+
'1':
1841+
'patterns': [
1842+
'include': '$self'
1843+
]
1844+
}
1845+
]

0 commit comments

Comments
 (0)