From 49d46bf9e9fac03ff760961a7c73265ddbbda476 Mon Sep 17 00:00:00 2001 From: Delapouite Date: Wed, 23 Sep 2015 20:07:06 +0200 Subject: [PATCH 01/25] feat(conceal): add arrow_function option --- README.md | 19 ++++++++++--------- syntax/javascript.vim | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 1cc50aee..797c89e4 100644 --- a/README.md +++ b/README.md @@ -67,15 +67,16 @@ Default Value: 0 You can customize concealing characters by defining one or more of the following variables: - let g:javascript_conceal_function = "ƒ" - let g:javascript_conceal_null = "ø" - let g:javascript_conceal_this = "@" - let g:javascript_conceal_return = "⇚" - let g:javascript_conceal_undefined = "¿" - let g:javascript_conceal_NaN = "ℕ" - let g:javascript_conceal_prototype = "¶" - let g:javascript_conceal_static = "•" - let g:javascript_conceal_super = "Ω" + let g:javascript_conceal_function = "ƒ" + let g:javascript_conceal_null = "ø" + let g:javascript_conceal_this = "@" + let g:javascript_conceal_return = "⇚" + let g:javascript_conceal_undefined = "¿" + let g:javascript_conceal_NaN = "ℕ" + let g:javascript_conceal_prototype = "¶" + let g:javascript_conceal_static = "•" + let g:javascript_conceal_super = "Ω" + let g:javascript_conceal_arrow_function = "⇒" ## Contributing diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..0b7fcd03 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -221,7 +221,7 @@ syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end= syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ -syntax match jsArrowFunction /=>/ +exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') " Define the default highlighting. " For version 5.7 and earlier: only when not done already From de7a60c5c803fb240610d6dc233ae13c61b30468 Mon Sep 17 00:00:00 2001 From: Vitor Cortez Date: Wed, 30 Sep 2015 23:38:41 -0300 Subject: [PATCH 02/25] Add dollar sign to jsDocParam matches --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..ae4b3d1a 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -77,7 +77,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite syntax region jsDocTypeNoParam start="{" end="}" oneline contained syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" + syntax match jsDocParam contained "\%(#\|\$\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags syntax case match From 4c983baf28818fdf941faa73cab6e81d3f45d0a3 Mon Sep 17 00:00:00 2001 From: Simon Olofsson Date: Tue, 6 Oct 2015 11:58:51 +0200 Subject: [PATCH 03/25] Add common DOM Functions getElementById, getElementsByClassName, querySelector and querySelectorAll are often used Functions. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..a3086cb8 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -166,7 +166,7 @@ if exists("javascript_enable_domhtmlcss") " DOM2 things syntax match jsDomElemAttrs contained /\%(nodeName\|nodeValue\|nodeType\|parentNode\|childNodes\|firstChild\|lastChild\|previousSibling\|nextSibling\|attributes\|ownerDocument\|namespaceURI\|prefix\|localName\|tagName\)\>/ - syntax match jsDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementsByTagName\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=jsParen skipwhite + syntax match jsDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementById\|getElementsByClassName\|getElementsByTagName\|querySelector\|querySelectorAll\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=jsParen skipwhite " HTML things syntax match jsHtmlElemAttrs contained /\%(className\|clientHeight\|clientLeft\|clientTop\|clientWidth\|dir\|id\|innerHTML\|lang\|length\|offsetHeight\|offsetLeft\|offsetParent\|offsetTop\|offsetWidth\|scrollHeight\|scrollLeft\|scrollTop\|scrollWidth\|style\|tabIndex\|title\)\>/ syntax match jsHtmlElemFuncs contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=jsParen skipwhite From 7b9e11ad89549f08e1c750fc46bff0a03f059d95 Mon Sep 17 00:00:00 2001 From: William Chargin Date: Wed, 30 Dec 2015 16:43:57 -0800 Subject: [PATCH 04/25] Make arrow-functions one-liners Summary: This fixes the indentation for expression arrow functions that are continued on multiple lines. This does not affect the `FunctionBody` variant of arrow functions, which were already correct due to the opening brace. Resolves pangloss/vim-javascript#332. Test Plan: Type ```javascript const myNiftyArrowFunction = (foo, bar) => foo + bar; myNiftyArrowFunction(1, 2); ``` and note that it's indented correctly as you type. Then run `gg=G` and make sure that it stays indented correctly. Note also that the indentation of ```javascript const myFunctionBodiedArrowFunction = (foo, bar) => { doAThing(); return foo + bar; }; myFunctionBodiedArrowFunction(1, 2); ``` is still correct. --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0f526db9..6ce1db8f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -55,7 +55,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@[^{;]*' . s:line_term +let s:one_line_scope_regex = '\%(\<\%(if\|else\|for\|while\)\>\|=>\)[^{;]*' . s:line_term " Regex that defines blocks. let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term From c024f95c08b9bbd897f082620ddd14fb9fe8eff1 Mon Sep 17 00:00:00 2001 From: William Chargin Date: Fri, 1 Jan 2016 15:52:13 -0800 Subject: [PATCH 05/25] Respect 'very-magic' in 'jsAssignmentExpr' regexp Summary: This regex was modified in 325c0487f90707ef3e3669c1125779c7e5734037, where the tokens `\(>\)\@!` were added. This was supposed to be a negative lookahead for a literal `>`. However, this didn't work because the regexp has the `\v` flag, so the regexp actually ended up matching nothing. Closes #333. Test Plan: Install the [gerw/vim-HiLinkTrace][HLT] plugin. Write `let x = 3` in a new JavaScript file. Place the cursor on the `x` and enter `:HLT`. Before the patch is applied, the `SynStack` and `HltTrace` fields of the message should be blank. Then, apply the patch, relaunch vim, and repeat the `HLT` command; the message should now contain `SynStack: jsAssignmentExpr->...`. [HLT]: https://github.com/gerw/vim-HiLinkTrace --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..af2ee5ab 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -110,7 +110,7 @@ syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite -syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\(>\)\@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj +syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\>@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained 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 syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained From ca58cdddebf27d330eb0d27efa749fda7063cb68 Mon Sep 17 00:00:00 2001 From: Kevin Fahy Date: Fri, 8 Jan 2016 21:27:29 -0800 Subject: [PATCH 06/25] Fix nested template variable syntax highlighting Accept JS expressions in template variables so that their contents are highlighted normally. Change `jsTemplateVar` to a region rather than a match. Fixes #316 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 74fa7ffd..58aad0c5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -88,7 +88,7 @@ syntax case match "" Syntax in the JavaScript code syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained -syntax match jsTemplateVar "\${.\{-}}" contained +syntax region jsTemplateVar matchgroup=jsBraces start=+${+ end=+}+ contained contains=@jsExpression syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc From ee412e34c850e319171503142066bb75cab50964 Mon Sep 17 00:00:00 2001 From: James Whitney Date: Wed, 20 Jan 2016 01:21:53 +1100 Subject: [PATCH 07/25] Add jsComment to jsFuncArgs Fixes #297 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 74fa7ffd..b4e9b132 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -217,7 +217,7 @@ exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsF syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ From f41da19fc0b60ec578263392932b05fe0c618d3b Mon Sep 17 00:00:00 2001 From: James Whitney Date: Wed, 20 Jan 2016 08:56:19 +1100 Subject: [PATCH 08/25] Add jsLineComment to jsFuncArgs Fixes #297 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index b4e9b132..4fa4906e 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -217,7 +217,7 @@ exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsF syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ From 68290c3e7fdb1fe2e4874be2cd881457bdd320c8 Mon Sep 17 00:00:00 2001 From: Artem Baguinski Date: Tue, 26 Jan 2016 10:28:36 +0100 Subject: [PATCH 09/25] make the m variable script-local --- indent/javascript.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6ce1db8f..e1e1fc7e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -70,13 +70,13 @@ let s:ternary_q = '^\s\+?' let s:case_indent = &sw let s:case_indent_after = &sw -let m = matchlist(&cinoptions, ':\(.\)') -if (len(m) > 2) - let s:case_indent = m[1] +let s:m = matchlist(&cinoptions, ':\(.\)') +if (len(s:m) > 2) + let s:case_indent = s:m[1] endif -let m = matchlist(&cinoptions, '=\(.\)') -if (len(m) > 2) - let s:case_indent_after = m[1] +let s:m = matchlist(&cinoptions, '=\(.\)') +if (len(s:m) > 2) + let s:case_indent_after = s:m[1] endif " 2. Auxiliary Functions {{{1 " ====================== From 32137f1f0c228d25b45057bd4e0b7329ab181c0e Mon Sep 17 00:00:00 2001 From: Zheng Chaoping Date: Fri, 29 Jan 2016 23:07:52 +0800 Subject: [PATCH 10/25] Use shfitwidth() instead of &sw in indent/javascript.vim --- indent/javascript.vim | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e1e1fc7e..1aeeb89a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -26,6 +26,17 @@ endif let s:cpo_save = &cpo set cpo&vim +" Get shiftwidth value +if exists('*shiftwidth') + func s:sw() + return shiftwidth() + endfunc +else + func s:sw() + return &sw + endfunc +endif + " 1. Variables {{{1 " ============ @@ -68,8 +79,8 @@ let s:comma_last = ',\s*$' let s:ternary = '^\s\+[?|:]' let s:ternary_q = '^\s\+?' -let s:case_indent = &sw -let s:case_indent_after = &sw +let s:case_indent = s:sw() +let s:case_indent_after = s:sw() let s:m = matchlist(&cinoptions, ':\(.\)') if (len(s:m) > 2) let s:case_indent = s:m[1] @@ -201,9 +212,9 @@ function s:GetVarIndent(lnum) " if the previous line doesn't end in a comma, return to regular indent if (line !~ s:comma_last) - return indent(prev_lnum) - &sw + return indent(prev_lnum) - s:sw() else - return indent(lvar) + &sw + return indent(lvar) + s:sw() endif endif @@ -342,7 +353,7 @@ function GetJavascriptIndent() return indent(prevline) " otherwise we indent 1 level else - return indent(lvar) + &sw + return indent(lvar) + s:sw() endif endif endif @@ -361,7 +372,7 @@ function GetJavascriptIndent() " If the line is comma first, dedent 1 level if (getline(prevline) =~ s:comma_first) - return indent(prevline) - &sw + return indent(prevline) - s:sw() endif if (getline(prevline) =~ s:expr_case) return indent(prevline) + s:case_indent_after @@ -371,7 +382,7 @@ function GetJavascriptIndent() if (getline(prevline) =~ s:ternary_q) return indent(prevline) else - return indent(prevline) + &sw + return indent(prevline) + s:sw() endif endif @@ -413,9 +424,9 @@ function GetJavascriptIndent() " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) if (line =~ s:expr_case) - return indent(s:GetMSL(lnum, 0)) + &sw/2 + return indent(s:GetMSL(lnum, 0)) + s:sw()/2 else - return indent(s:GetMSL(lnum, 0)) + &sw + return indent(s:GetMSL(lnum, 0)) + s:sw() endif endif @@ -428,12 +439,12 @@ function GetJavascriptIndent() let counts = s:LineHasOpeningBrackets(lnum) if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 if col('.') + 1 == col('$') - return ind + &sw + return ind + s:sw() else return virtcol('.') endif elseif counts[1] == '1' || counts[2] == '1' - return ind + &sw + return ind + s:sw() else call cursor(v:lnum, vcol) end @@ -443,18 +454,18 @@ function GetJavascriptIndent() " -------------------------- let ind_con = ind - let ind = s:IndentWithContinuation(lnum, ind_con, &sw) + let ind = s:IndentWithContinuation(lnum, ind_con, s:sw()) " }}}2 " " let ols = s:InOneLineScope(lnum) if ols > 0 - let ind = ind + &sw + let ind = ind + s:sw() else let ols = s:ExitingOneLineScope(lnum) while ols > 0 && ind > 0 - let ind = ind - &sw + let ind = ind - s:sw() let ols = s:InOneLineScope(ols - 1) endwhile endif From bc74a6fff6ab7d0b616bd7a361c06277a193172f Mon Sep 17 00:00:00 2001 From: Damion Vega Date: Sat, 13 Feb 2016 23:02:00 -0700 Subject: [PATCH 11/25] Added Buffer to jsGlobalObjects --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4fa4906e..20930a86 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -135,7 +135,7 @@ syntax keyword jsClass extends class syntax keyword jsException try catch throw finally syntax keyword jsAsyncKeyword async await -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 +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError From 62c15f60211b45d0ce0d9becf5ce4983aa5ddb62 Mon Sep 17 00:00:00 2001 From: Cameron Steffen Date: Mon, 7 Sep 2015 00:39:32 -0500 Subject: [PATCH 12/25] Issue #294 better one line scope --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1aeeb89a..a39e1335 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -66,7 +66,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@\|=>\)[^{;]*' . s:line_term +let s:one_line_scope_regex = '\%(\\|\<\%(if\|for\|while\)\>\s*(.*)\)' . s:line_term " Regex that defines blocks. let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term From fd99d77784979ce8097c3432cf838e7e3a47650c Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 4 Mar 2016 17:11:14 -0800 Subject: [PATCH 13/25] Adding first pass at ES6 Class support --- syntax/javascript.vim | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index dc6e5e0b..4305b13b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -42,7 +42,7 @@ syntax keyword jsArgsObj arguments syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock -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 +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,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock,jsClassDefinition "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -131,7 +131,6 @@ syntax keyword jsConditional if else switch syntax keyword jsRepeat do while for syntax keyword jsLabel case default syntax keyword jsKeyword yield -syntax keyword jsClass extends class syntax keyword jsException try catch throw finally syntax keyword jsAsyncKeyword async await @@ -193,12 +192,13 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -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 +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,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc contained fold +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold +syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions contained fold +syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition contained fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis @@ -223,6 +223,10 @@ syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +syntax keyword jsClassKeywords extends class contained +syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty +syntax match jsClassDefinition /class [a-zA-Z_$][0-9a-zA-Z_$ \n]*/ contains=jsClassKeywords nextgroup=jsClassBlock skipwhite skipempty + " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet @@ -282,7 +286,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsOperator Operator HiLink jsOf Operator HiLink jsStorageClass StorageClass - HiLink jsClass Structure + HiLink jsClassKeywords Structure HiLink jsThis Special HiLink jsStatic Special HiLink jsSuper Special @@ -299,6 +303,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsBraces Noise HiLink jsFuncBraces Noise HiLink jsFuncParens Noise + HiLink jsClassBraces Noise HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsGlobalObjects Special @@ -320,6 +325,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsCssStyles Label + HiLink jsClassMethodDefinitions Type + delcommand HiLink endif From 995183bd1e39fe3b4094dd217470ce92cc183972 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 4 Mar 2016 19:52:27 -0800 Subject: [PATCH 14/25] ES6 Class Fixes * Added support for . within class definition and mapped to jsClassNoise * Linked jsClassNoise to Noise * Tweaked code/whitespace alignment of the jsClass* section --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4305b13b..3f2ef5be 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -224,8 +224,9 @@ syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax keyword jsClassKeywords extends class contained +syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty -syntax match jsClassDefinition /class [a-zA-Z_$][0-9a-zA-Z_$ \n]*/ contains=jsClassKeywords nextgroup=jsClassBlock skipwhite skipempty +syntax match jsClassDefinition /class [a-zA-Z_$][0-9a-zA-Z_$ \n.]*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -304,6 +305,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncBraces Noise HiLink jsFuncParens Noise HiLink jsClassBraces Noise + HiLink jsClassNoise Noise HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsGlobalObjects Special From 43784bc2ac2729197fd14e3c79bdb53e11753f37 Mon Sep 17 00:00:00 2001 From: juneidy Date: Mon, 21 Dec 2015 08:48:17 +0800 Subject: [PATCH 15/25] Added jsduck documentation types Allowed single quote for param, misplaced localdoc Allowed dash for param --- syntax/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index dc6e5e0b..5a6a8dd1 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -63,21 +63,21 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsBlockComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param - 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 + syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite " tags containing type and param - syntax match jsDocTags contained "@\(arg\|argument\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite + syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite " tags containing type but no param syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite " tags containing references syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite " other tags (no extra syntax) - syntax match jsDocTags contained "@\(abstract\|access\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" + syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" syntax region jsDocType start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite syntax region jsDocTypeNoParam start="{" end="}" oneline contained syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\$\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" + syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags syntax case match From a57c0a154960604e85f2ce53b0c5fc09b4433148 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 19:16:33 -0700 Subject: [PATCH 16/25] Higher specificity for jsTemplate braces --- syntax/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 18f8df97..4613136e 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -88,7 +88,7 @@ syntax case match "" Syntax in the JavaScript code syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained -syntax region jsTemplateVar matchgroup=jsBraces start=+${+ end=+}+ contained contains=@jsExpression +syntax region jsTemplateVar matchgroup=jsTemplateBraces start=+${+ end=+}+ contained contains=@jsExpression syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc @@ -308,6 +308,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsClassNoise Noise HiLink jsSpecial Special HiLink jsTemplateVar Special + HiLink jsTemplateBraces jsBraces HiLink jsGlobalObjects Special HiLink jsExceptions Special HiLink jsFutureKeys Special From 73232334f004e21e556ff84041481722c0d2904a Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 19:50:52 -0700 Subject: [PATCH 17/25] Improvements to rest highlighting * Added higher specificity to the dots in the spread declaration --- syntax/javascript.vim | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4613136e..5bd26ccc 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -215,11 +215,12 @@ endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') -syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite -syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty -syntax match jsFuncArgCommas contained ',' -syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ +syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite +syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax match jsFuncArgCommas contained ',' +syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots +syntax match jsFuncArgRestDots contained /\.\.\./ exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') @@ -316,6 +317,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModules Include HiLink jsModuleWords Include HiLink jsDecorator Special + HiLink jsFuncArgRestDots Noise HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From c1ea11050a996d050fa0a2ef41419bac603b9007 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 16:53:50 -0700 Subject: [PATCH 18/25] Adding jsFuncBlock support --- syntax/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5bd26ccc..dfbb261f 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -198,7 +198,7 @@ syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contai syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions contained fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition contained fold +syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis @@ -214,6 +214,7 @@ if main_syntax == "javascript" endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') +exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite @@ -222,8 +223,6 @@ syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ -exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') - syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty From ae177c45e0ec305b14a9cc93e508ca170c6dce00 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 18:01:36 -0700 Subject: [PATCH 19/25] First pass at handling lamba arguments --- syntax/javascript.vim | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index dfbb261f..f6379319 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -192,7 +192,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -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,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition +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,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -214,7 +214,7 @@ if main_syntax == "javascript" endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') -exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite @@ -223,6 +223,11 @@ syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ +" Matches a single keyword argument with no parens +syntax match jsArrowFuncArgs /\(\k\)\+\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +" Matches a series of arguments surrounded in parens +syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend + syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty From 91f860b1b038a9b501af31440d80a4ab183dc04b Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 18:15:23 -0700 Subject: [PATCH 20/25] Linking jsArrowFuncArgs to jsFuncArgs --- syntax/javascript.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index f6379319..079fe3f5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -282,6 +282,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsArrowFunction Type HiLink jsFunction Type HiLink jsGenerator jsFunction + HiLink jsArrowFuncArgs jsFuncArgs HiLink jsFuncName Function HiLink jsArgsObj Special HiLink jsError Error From 82473d0d6e6455c9a9d93faff1a655d4ea173a35 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 19:38:07 -0700 Subject: [PATCH 21/25] Allow ... in arrow arguments definition --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 079fe3f5..2ba6dd74 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -226,7 +226,7 @@ syntax match jsFuncArgRestDots contained /\.\.\./ " Matches a single keyword argument with no parens syntax match jsArrowFuncArgs /\(\k\)\+\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend " Matches a series of arguments surrounded in parens -syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\|\.\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained From 6590bbcdf3e88eb3c8da32ab66f3baaffcbbf5ea Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 20:18:41 -0700 Subject: [PATCH 22/25] Fix Generator definitions Tacking this on since it relates to ES6 functions. The generator astericks were breaking the highlighting of function arguments. This should fix generators --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 2ba6dd74..d696a0af 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -216,7 +216,7 @@ endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') -syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite +syntax match jsGenerator contained '\*' nextgroup=jsFuncName,jsFuncArgs skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' From d8c18d9d3a6b40496791d41efb49a2b26856c21e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 4 Apr 2016 01:56:52 -0700 Subject: [PATCH 23/25] Fix Comment Regions Our comment detection was a bit buggy because we did not use the extend keyword. This meant that if the comment was contained within a region or a match of sorts, it would get pre-maturely ended by a containing group. Using the extend keyword means that it will override any containing parent matcher and still display a comment, which is how JS actually interprets the code. --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d696a0af..21c33880 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -46,11 +46,11 @@ syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsM "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained -syntax region jsLineComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell +syntax region jsLineComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell extend syntax region jsEnvComment start="\%^#!" end="$" display syntax region jsLineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell fold syntax region jsCvsTag start="\$\cid:" end="\$" oneline contained -syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold +syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend "" JSDoc / JSDoc Toolkit if !exists("javascript_ignore_javaScriptdoc") From 36f34b25d63211f1fab20c1f748a3dd070b4c270 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 4 Apr 2016 02:10:46 -0700 Subject: [PATCH 24/25] Improved function declaration destructuring This should vastly improve how destructuring is handled in function declarations. It is still far from perfect, and a major problem right now is how to support multiple lines in lambda functions --- syntax/javascript.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 21c33880..212d452d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -218,15 +218,16 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains= syntax match jsGenerator contained '\*' nextgroup=jsFuncName,jsFuncArgs skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsLineComment,jsStringS,jsStringD,jsNumber,jsFuncArgDestructuring nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ +syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|(\|)\)/ extend " Matches a single keyword argument with no parens -syntax match jsArrowFuncArgs /\(\k\)\+\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +syntax match jsArrowFuncArgs /\(\k\)\+\s*\(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction " Matches a series of arguments surrounded in parens -syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\|\.\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +syntax match jsArrowFuncArgs /(\%(.\)*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained @@ -323,6 +324,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModuleWords Include HiLink jsDecorator Special HiLink jsFuncArgRestDots Noise + HiLink jsFuncArgDestructuring Noise HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From 113abc2678fe27d570990daac0c0c0d68a0efe8b Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 5 Apr 2016 17:23:10 -0700 Subject: [PATCH 25/25] Fix jsBlock vs jsFuncBlock priority Since we had to remove the contained argument for jsFuncBlock, it caused false positives for object definitions at the top level of a file. I've made jsBlock a higher priorty than jsFuncBlock by placing jsBlock AFTER jsFuncBlock. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 212d452d..0fa7130d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -196,9 +196,9 @@ syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTa syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions contained fold syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis