From ca627b9d263147bdcd78fe3fd86a501d28287867 Mon Sep 17 00:00:00 2001 From: Nick Peeples Date: Wed, 27 Sep 2017 15:31:20 -0500 Subject: [PATCH 1/4] adding optional chaining operator https://github.com/tc39/proposal-optional-chaining The only thing that could be bad about this is that 'x?.3:0' is apparently allowed as a ternary operator. I'm not really sure if that applies to the syntax highlighter, and is really not a great statement anyway. --- syntax/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index fabfce28..16484b60 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -36,6 +36,7 @@ syntax match jsVariableDef contained /\k\+/ skipwhite skipempty nextgroup=j syntax keyword jsOperator delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression syntax match jsOperator /::/ skipwhite skipempty nextgroup=@jsExpression +syntax match jsOperator /?./ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false @@ -162,7 +163,7 @@ syntax region jsBlock matchgroup=jsBraces s syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment,jsFlowTypeKeyword skipwhite skipempty nextgroup=jsFrom fold syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?[^\.]/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs,jsFlowFunctionGroup syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup From 41d942cde09d92e86e7ba526790285b8c045fe28 Mon Sep 17 00:00:00 2001 From: Nick Peeples Date: Thu, 28 Sep 2017 09:16:30 -0500 Subject: [PATCH 2/4] tweaked ternary start regex to have proper negative lookaheads --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 16484b60..40ef380c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -163,7 +163,7 @@ syntax region jsBlock matchgroup=jsBraces s syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment,jsFlowTypeKeyword skipwhite skipempty nextgroup=jsFrom fold syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?[^\.]/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?\%(\.\d\@!\)\@!/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs,jsFlowFunctionGroup syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup From f2ef00e85299a46e5d2372f886c00f4648923f0e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 28 Sep 2017 14:59:23 -0700 Subject: [PATCH 3/4] ?works? --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 40ef380c..7efc20e0 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -36,7 +36,7 @@ syntax match jsVariableDef contained /\k\+/ skipwhite skipempty nextgroup=j syntax keyword jsOperator delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression syntax match jsOperator /::/ skipwhite skipempty nextgroup=@jsExpression -syntax match jsOperator /?./ +syntax match jsOperator /?\.\ze\_D/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false @@ -163,7 +163,7 @@ syntax region jsBlock matchgroup=jsBraces s syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment,jsFlowTypeKeyword skipwhite skipempty nextgroup=jsFrom fold syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?\%(\.\d\@!\)\@!/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs,jsFlowFunctionGroup syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup From c6c90a315e440b96b356bcc0024610dd14621022 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 28 Sep 2017 15:05:52 -0700 Subject: [PATCH 4/4] fix --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 7efc20e0..0a4802a9 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -36,7 +36,6 @@ syntax match jsVariableDef contained /\k\+/ skipwhite skipempty nextgroup=j syntax keyword jsOperator delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression syntax match jsOperator /::/ skipwhite skipempty nextgroup=@jsExpression -syntax match jsOperator /?\.\ze\_D/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false @@ -164,6 +163,7 @@ syntax region jsModuleGroup contained matchgroup=jsModuleBraces s syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression +syntax match jsOperator /?\.\ze\_D/ syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs,jsFlowFunctionGroup syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup