Skip to content

Commit fd8d446

Browse files
committed
Improve highlighting of ternary if statements.
'?' and ':' are now highlighted, and we no longer treat 'x' as a label in the statement '1 ? a.x : 0'. Some test cases: var a = 1 ? a.x : 0; var a = 1 ? { x: 1 ? a.x : 0, y: 2 } : 0; var a = 1 ? ( 1 ? 1 : 0 ) : 0;
1 parent e80eb0a commit fd8d446

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

syntax/javascript.vim

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ syntax region javaScriptRegexpCharClass start=+\[+ end=+\]+ contained
7878
syntax region javaScriptRegexpString start=+\(\(\(return\|case\)\s\+\)\@<=\|\(\([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\\\\|\\/+ end=+/[gim]\{,3}+ contains=javaScriptSpecial,javaScriptRegexpCharClass,@htmlPreproc oneline
7979
syntax match javaScriptNumber /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/
8080
syntax match javaScriptFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/
81-
syntax match javaScriptLabel /\(?\s*\)\@<!\<\w\+\(\s*:\)\@=/
81+
syntax match javaScriptLabel /\<\w\+\(\s*:\)\@=/
8282

8383
"" JavaScript Prototype
8484
syntax keyword javaScriptPrototype prototype
@@ -153,10 +153,13 @@ endif "DOM/HTML/CSS
153153

154154

155155
"" Code blocks
156-
syntax cluster javaScriptAll contains=javaScriptComment,javaScriptLineComment,javaScriptDocComment,javaScriptStringD,javaScriptStringS,javaScriptRegexpString,javaScriptNumber,javaScriptFloat,javaScriptLabel,javaScriptSource,javaScriptThis,javaScriptType,javaScriptOperator,javaScriptBoolean,javaScriptNull,javaScriptFunction,javaScriptConditional,javaScriptRepeat,javaScriptBranch,javaScriptStatement,javaScriptGlobalObjects,javaScriptExceptions,javaScriptFutureKeys,javaScriptDomErrNo,javaScriptDomNodeConsts,javaScriptHtmlEvents,javaScriptDotNotation
156+
" there is a name collision with javaScriptExpression in html.vim, hence the use of the '2' here
157+
syntax cluster javaScriptExpression2 contains=javaScriptComment,javaScriptLineComment,javaScriptDocComment,javaScriptStringD,javaScriptStringS,javaScriptRegexpString,javaScriptNumber,javaScriptFloat,javaScriptSource,javaScriptThis,javaScriptType,javaScriptOperator,javaScriptBoolean,javaScriptNull,javaScriptFunction,javaScriptGlobalObjects,javaScriptExceptions,javaScriptFutureKeys,javaScriptDomErrNo,javaScriptDomNodeConsts,javaScriptHtmlEvents,javaScriptDotNotation,javaScriptBracket,javaScriptParen,javaScriptBlock,javaScriptParenError
158+
syntax cluster javaScriptAll contains=@javaScriptExpression2,javaScriptLabel,javaScriptConditional,javaScriptRepeat,javaScriptBranch,javaScriptStatement,javaScriptTernaryIf
157159
syntax region javaScriptBracket matchgroup=javaScriptBracket transparent start="\[" end="\]" contains=@javaScriptAll,javaScriptParensErrB,javaScriptParensErrC,javaScriptBracket,javaScriptParen,javaScriptBlock,@htmlPreproc
158160
syntax region javaScriptParen matchgroup=javaScriptParen transparent start="(" end=")" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrC,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
159161
syntax region javaScriptBlock matchgroup=javaScriptBlock transparent start="{" end="}" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrB,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
162+
syntax region javaScriptTernaryIf matchgroup=javaScriptTernaryIfOperator start=+?+ end=+:+ contains=@javaScriptExpression2
160163

161164
"" catch errors caused by wrong parenthesis
162165
syntax match javaScriptParensError ")\|}\|\]"
@@ -203,6 +206,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
203206
HiLink javaScriptDocParam Label
204207
HiLink javaScriptStringS String
205208
HiLink javaScriptStringD String
209+
HiLink javaScriptTernaryIfOperator Conditional
206210
HiLink javaScriptRegexpString String
207211
HiLink javaScriptRegexpCharClass Character
208212
HiLink javaScriptCharacter Character

0 commit comments

Comments
 (0)