Skip to content

Commit d70bb4e

Browse files
authored
Merge pull request pangloss#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

Lines changed: 36 additions & 20 deletions
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

Lines changed: 26 additions & 15 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy