Skip to content

Commit d70bb4e

Browse files
authored
Merge pull request #480 from pangloss/develop
Develop -> Master
2 parents 6b58cd0 + 22c6f6d commit d70bb4e

File tree

2 files changed

+62
-35
lines changed

2 files changed

+62
-35
lines changed

indent/javascript.vim

+36-20
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*'
4545
let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C'
4646
let s:expr_case = s:line_pre . '\%(case\s\+[^\:]*\|default\)\s*:\s*\C'
4747
" Regex of syntax group names that are or delimit string or are comments.
48-
let s:syng_strcom = '\%(string\|regex\|special\|comment\|template\)\c'
48+
let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c'
4949

5050
" Regex of syntax group names that are strings.
5151
let s:syng_string = 'regex\c'
@@ -347,22 +347,29 @@ function GetJavascriptIndent()
347347
endif
348348

349349
" If we got a closing bracket on an empty line, find its match and indent
350-
" according to it. For parentheses we indent to its column - 1, for the
351-
" others we indent to the containing line's MSL's level. Return -1 if fail.
352-
let col = matchend(line, s:line_pre . '[]})]')
353-
if col > 0 && !s:IsInStringOrComment(v:lnum, col)
354-
call cursor(v:lnum, col)
355-
let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0)
356-
if parlnum > 0
357-
let ind = s:InMultiVarStatement(parlnum, 0, 0) ? indent(parlnum) : indent(s:GetMSL(parlnum, 0))
358-
endif
350+
" according to it.
351+
let col = s:Match(v:lnum, s:line_pre . '[]})]')
352+
if col > 0
353+
let parlnum = v:lnum
354+
while col
355+
call cursor(parlnum, 1)
356+
let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0)
357+
let col = s:Match(parlnum, s:line_pre . '[]})]')
358+
if col
359+
continue
360+
end
361+
if parlnum > 0
362+
let ind = s:InMultiVarStatement(parlnum, 0, 0)|| s:LineHasOpeningBrackets(parlnum) !~ '2'
363+
\ ? indent(parlnum) : indent(s:GetMSL(parlnum, 0))
364+
endif
365+
endwhile
359366
return ind
360367
endif
361368

362369

363370
" If line starts with an operator...
364371
if (line =~ s:operator_first)
365-
if (s:Match(lnum, s:operator_first))
372+
if (s:Match(lnum, s:operator_first) || s:Match(lnum, s:line_pre . '[])}]'))
366373
" and so does previous line, don't indent
367374
return indent(lnum)
368375
end
@@ -421,30 +428,39 @@ function GetJavascriptIndent()
421428
return 0
422429
endif
423430

431+
" foo('foo',
432+
" bar('bar', function() {
433+
" hi();
434+
" })
435+
" );
424436

437+
" function (a, b, c, d,
438+
" e, f, g) {
439+
" console.log('inner');
440+
" }
425441
" If the previous line ended with a block opening, add a level of indent.
426442
if s:Match(lnum, s:block_regex)
427-
return s:InMultiVarStatement(lnum, 0, 0) ? indent(lnum) + s:sw() : indent(s:GetMSL(lnum, 0)) + s:sw()
443+
return s:InMultiVarStatement(lnum, 0, 0) || s:LineHasOpeningBrackets(lnum) !~ '2' ?
444+
\ indent(lnum) + s:sw() : indent(s:GetMSL(lnum, 0)) + s:sw()
428445
endif
429446

430447
" Set up variables for current line.
431448
let line = getline(lnum)
432449
let ind = indent(lnum)
433450
" If the previous line contained an opening bracket, and we are still in it,
434451
" add indent depending on the bracket type.
435-
if s:Match(lnum, '[[({})\]]')
452+
if s:Match(lnum, '\%([[({]\)\|\%([^\t \])}][})\]]\)')
436453
let counts = s:LineHasOpeningBrackets(lnum)
437454
if counts =~ '2'
438-
call cursor(lnum, 1)
439-
" Search for the opening tag
440-
let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0)
441-
if parlnum > 0 && !s:InMultiVarStatement(parlnum,0,0)
442-
return indent(s:GetMSL(parlnum, 0))
455+
call cursor(lnum,matchend(s:RemoveTrailingComments(line), '.\+\zs[])}]'))
456+
while s:lookForParens('(\|{\|\[', ')\|}\|\]', 'bW', 0) == lnum
457+
call cursor(lnum, matchend(s:RemoveTrailingComments(strpart(line,0,col('.'))), '.*\zs[])}]'))
458+
endwhile
459+
if line('.') < lnum && !s:InMultiVarStatement(line('.'),0,0)
460+
return indent(s:GetMSL(line('.'), 0))
443461
end
444462
elseif counts =~ '1' || s:Onescope(lnum)
445463
return ind + s:sw()
446-
else
447-
call cursor(v:lnum, vcol)
448464
end
449465
end
450466

syntax/javascript.vim

+26-15
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contai
8383
syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs
8484
syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/
8585
syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName
86+
syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue
87+
syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue
8688

8789
exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '')
8890
exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '')
@@ -99,8 +101,9 @@ syntax keyword jsConditional switch skipwhite skipempty nextgro
99101
syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat
100102
syntax keyword jsRepeat do skipwhite skipempty nextgroup=jsBlock
101103
syntax keyword jsLabel contained case default
102-
syntax keyword jsException try finally skipwhite skipempty nextgroup=jsBlock
103-
syntax keyword jsException catch skipwhite skipempty nextgroup=jsParenCatch
104+
syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock
105+
syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsBlock
106+
syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch
104107
syntax keyword jsException throw
105108
syntax keyword jsAsyncKeyword async await
106109

@@ -126,18 +129,19 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT
126129
syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize
127130

128131
"" Code blocks
129-
syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold
130-
syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold
131-
syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold
132-
syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold
133-
syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold
134-
syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock extend fold
135-
syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsNoise extend fold
136-
syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold
137-
syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold
138-
syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold
139-
syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator extend fold
140-
syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression
132+
syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold
133+
syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold
134+
syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold
135+
syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold
136+
syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold
137+
syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold
138+
syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold
139+
syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold
140+
syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold
141+
syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold
142+
syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold
143+
syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold
144+
syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression
141145

142146
syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs
143147
syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs
@@ -166,6 +170,8 @@ syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=
166170
syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression
167171
syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend
168172
syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs
173+
syntax region jsClassStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs
174+
syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs
169175

170176
" Comments
171177
syntax keyword jsCommentTodo contained TODO FIXME XXX TBD
@@ -202,7 +208,7 @@ if !exists("javascript_ignore_javaScriptdoc")
202208
endif "" JSDoc end
203209

204210
syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsSpreadOperator
205-
syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsAsyncKeyword
211+
syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword
206212

207213
" Define the default highlighting.
208214
" For version 5.7 and earlier: only when not done already
@@ -229,6 +235,8 @@ if version >= 508 || !exists("did_javascript_syn_inits")
229235
HiLink jsString String
230236
HiLink jsObjectKeyString String
231237
HiLink jsTemplateString String
238+
HiLink jsObjectStringKey String
239+
HiLink jsClassStringKey String
232240
HiLink jsTaggedTemplate StorageClass
233241
HiLink jsTernaryIfOperator Operator
234242
HiLink jsRegexpString String
@@ -248,6 +256,9 @@ if version >= 508 || !exists("did_javascript_syn_inits")
248256
HiLink jsRepeat Repeat
249257
HiLink jsStatement Statement
250258
HiLink jsException Exception
259+
HiLink jsTry Exception
260+
HiLink jsFinally Exception
261+
HiLink jsCatch Exception
251262
HiLink jsAsyncKeyword Keyword
252263
HiLink jsArrowFunction Type
253264
HiLink jsFunction Type

0 commit comments

Comments
 (0)