Skip to content

Commit 1d8c267

Browse files
committed
Merge branch 'develop'
- Closes #304
2 parents bab4f39 + 255d5e6 commit 1d8c267

File tree

4 files changed

+52
-18
lines changed

4 files changed

+52
-18
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ then simply perform the following commands to fix your current buffer:
2626

2727
Add to vimrc:
2828

29-
Plugin "pangloss/vim-javascript"
29+
Plugin 'pangloss/vim-javascript'
3030

3131
And install it:
3232

ftplugin/javascript.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
setlocal suffixesadd+=.js

indent/javascript.vim

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ setlocal nosmartindent
1616
" Now, set up our indentation expression and keys that trigger it.
1717
setlocal indentexpr=GetJavascriptIndent()
1818
setlocal formatexpr=Fixedgq(v:lnum,v:count)
19-
setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e
19+
setlocal indentkeys=0{,0},0),0],0\,:,!^F,o,O,e
2020

2121
" Only define the function once.
2222
if exists("*GetJavascriptIndent")
@@ -29,8 +29,8 @@ set cpo&vim
2929
" 1. Variables {{{1
3030
" ============
3131

32-
let s:js_keywords = '^\s*\(break\|case\|catch\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)'
33-
32+
let s:js_keywords = '^\s*\(break\|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\)'
33+
let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*'
3434
" Regex of syntax group names that are or delimit string or are comments.
3535
let s:syng_strcom = 'string\|regex\|comment\c'
3636

@@ -53,21 +53,31 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\|[^=]
5353

5454
" Regex that defines continuation lines.
5555
" TODO: this needs to deal with if ...: and so on
56-
let s:msl_regex = s:continuation_regex
56+
let s:msl_regex = s:continuation_regex.'|'.s:expr_case
5757

5858
let s:one_line_scope_regex = '\<\%(if\|else\|for\|while\)\>[^{;]*' . s:line_term
5959

6060
" Regex that defines blocks.
6161
let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
6262

63-
let s:var_stmt = '^\s*var'
63+
let s:var_stmt = '^\s*(const\|let\|var)'
6464

6565
let s:comma_first = '^\s*,'
6666
let s:comma_last = ',\s*$'
6767

6868
let s:ternary = '^\s\+[?|:]'
6969
let s:ternary_q = '^\s\+?'
7070

71+
let s:case_indent = &sw
72+
let s:case_indent_after = &sw
73+
let m = matchlist(&cinoptions, ':\(.\)')
74+
if (len(m) > 2)
75+
let s:case_indent = m[1]
76+
endif
77+
let m = matchlist(&cinoptions, '=\(.\)')
78+
if (len(m) > 2)
79+
let s:case_indent_after = m[1]
80+
endif
7181
" 2. Auxiliary Functions {{{1
7282
" ======================
7383

@@ -300,6 +310,17 @@ function GetJavascriptIndent()
300310
" previous nonblank line number
301311
let prevline = prevnonblank(v:lnum - 1)
302312

313+
if (line =~ s:expr_case)
314+
if (getline(prevline) =~ s:expr_case)
315+
return indent(prevline)
316+
else
317+
if (getline(prevline) =~ s:block_regex)
318+
return indent(prevline) + s:case_indent
319+
else
320+
return indent(prevline) - s:case_indent_after
321+
endif
322+
endif
323+
endif
303324
" If we got a closing bracket on an empty line, find its match and indent
304325
" according to it. For parentheses we indent to its column - 1, for the
305326
" others we indent to the containing line's MSL's level. Return -1 if fail.
@@ -342,6 +363,9 @@ function GetJavascriptIndent()
342363
if (getline(prevline) =~ s:comma_first)
343364
return indent(prevline) - &sw
344365
endif
366+
if (getline(prevline) =~ s:expr_case)
367+
return indent(prevline) + s:case_indent_after
368+
endif
345369

346370
if (line =~ s:ternary)
347371
if (getline(prevline) =~ s:ternary_q)
@@ -385,15 +409,19 @@ function GetJavascriptIndent()
385409
return 0
386410
endif
387411

388-
" Set up variables for current line.
389-
let line = getline(lnum)
390-
let ind = indent(lnum)
391412

392413
" If the previous line ended with a block opening, add a level of indent.
393414
if s:Match(lnum, s:block_regex)
394-
return indent(s:GetMSL(lnum, 0)) + &sw
415+
if (line =~ s:expr_case)
416+
return indent(s:GetMSL(lnum, 0)) + &sw/2
417+
else
418+
return indent(s:GetMSL(lnum, 0)) + &sw
419+
endif
395420
endif
396421

422+
" Set up variables for current line.
423+
let line = getline(lnum)
424+
let ind = indent(lnum)
397425
" If the previous line contained an opening bracket, and we are still in it,
398426
" add indent depending on the bracket type.
399427
if line =~ '[[({]'

syntax/javascript.vim

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,11 @@ syntax keyword jsBooleanFalse false
3838
syntax keyword jsModules import export contained
3939
syntax keyword jsModuleWords default from as contained
4040
syntax keyword jsOf of contained
41+
syntax keyword jsArgsObj arguments
4142

42-
syntax region jsImportContainer start="^\s\?import \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString
43+
syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock
4344

44-
syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr
45+
syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock
4546

4647
"" JavaScript comments
4748
syntax keyword jsCommentTodo TODO FIXME XXX TBD contained
@@ -64,7 +65,7 @@ if !exists("javascript_ignore_javaScriptdoc")
6465
" tags containing a param
6566
syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite
6667
" tags containing type and param
67-
syntax match jsDocTags contained "@\(arg\|argument\|param\|property\)\>" nextgroup=jsDocType skipwhite
68+
syntax match jsDocTags contained "@\(arg\|argument\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite
6869
" tags containing type but no param
6970
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite
7071
" tags containing references
@@ -91,7 +92,7 @@ syntax match jsTemplateVar "\${.\{-}}" contained
9192
syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell
9293
syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell
9394
syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc
94-
syntax region jsTaggedTemplate start=/\k\+\(\(\n\|\s\)\+\)\?`/ end=+`\|$+ contains=jsTemplateString
95+
syntax region jsTaggedTemplate start=/\k\+\(\(\n\|\s\)\+\)\?`/ end=+`+ contains=jsTemplateString keepend
9596
syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained
9697
syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained
9798
syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained
@@ -106,10 +107,12 @@ syntax keyword jsNumber Infinity
106107
syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/
107108
syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained
108109
syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained
110+
syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite
111+
syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite
109112

110-
syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise
113+
syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\(>\)\@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj
111114
syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained
112-
syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis contained
115+
syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis,jsArgsObj contained
113116
syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained
114117
syntax match jsFuncAssignIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained
115118

@@ -130,6 +133,7 @@ syntax keyword jsLabel case default
130133
syntax keyword jsKeyword yield
131134
syntax keyword jsClass extends class
132135
syntax keyword jsException try catch throw finally
136+
syntax keyword jsAsyncKeyword async await
133137

134138
syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window
135139
syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/
@@ -189,7 +193,7 @@ endif "DOM/HTML/CSS
189193
"" end DOM/HTML/CSS specified things
190194

191195
"" Code blocks
192-
syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass
196+
syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj,jsDecorator,jsAsyncKeyword
193197
syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException
194198
syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold
195199
syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold
@@ -216,7 +220,6 @@ syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup
216220
syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr nextgroup=jsFuncBlock keepend skipwhite skipempty
217221
syntax match jsFuncArgCommas contained ','
218222
syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/
219-
syntax keyword jsArgsObj arguments contained containedin=jsFuncBlock
220223

221224
syntax match jsArrowFunction /=>/
222225

@@ -265,6 +268,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
265268
HiLink jsStatement Statement
266269
HiLink jsException Exception
267270
HiLink jsKeyword Keyword
271+
HiLink jsAsyncKeyword Keyword
268272
HiLink jsArrowFunction Type
269273
HiLink jsFunction Type
270274
HiLink jsGenerator jsFunction
@@ -303,6 +307,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
303307
HiLink jsBuiltins Special
304308
HiLink jsModules Include
305309
HiLink jsModuleWords Include
310+
HiLink jsDecorator Special
306311

307312
HiLink jsDomErrNo Constant
308313
HiLink jsDomNodeConsts Constant

0 commit comments

Comments
 (0)