From d8c18d9d3a6b40496791d41efb49a2b26856c21e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 4 Apr 2016 01:56:52 -0700 Subject: [PATCH 1/3] 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 2/3] 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 3/3] 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