From 00cf25348311b2f14c7ff5c18fb903662f496b3c Mon Sep 17 00:00:00 2001 From: Stanislav Seletskiy Date: Mon, 2 Mar 2020 18:08:41 +0300 Subject: [PATCH 1/2] for/each: use word delimiter in pattern Without word delimiter in pattern regexp `form` will be incorrectly attributed to the `pugScriptLoopRegion`. --- syntax/pug.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/pug.vim b/syntax/pug.vim index a9ae422..1dc50d2 100644 --- a/syntax/pug.vim +++ b/syntax/pug.vim @@ -70,7 +70,7 @@ syn region pugPlainFilter matchgroup=pugFilter start="^\z(\s*\):\%(sass\|less\| syn match pugScriptConditional "^\s*\<\%(if\|else\|else if\|elif\|unless\|while\|until\|case\|when\|default\)\>[?!]\@!" syn match pugScriptStatement "^\s*\<\%(each\|for\|block\|prepend\|append\|mixin\|extends\|include\)\>[?!]\@!" -syn region pugScriptLoopRegion start="^\s*\(for\|each\)" end="$" contains=pugScriptLoopKeywords +syn region pugScriptLoopRegion start="^\s*\<\(for\|each\)\>" end="$" contains=pugScriptLoopKeywords syn keyword pugScriptLoopKeywords contained for each in syn region pugJavascript start="^\z(\s*\)script\%(:\w\+\)\=" end="^\%(\z1\s\|\s*$\)\@!" contains=@htmlJavascript,pugJavascriptTag,pugCoffeescriptFilter keepend From 286fab0b7b5e555107637897a13219518f6c5bbe Mon Sep 17 00:00:00 2001 From: Stanislav Seletskiy Date: Fri, 29 May 2020 22:33:13 +0300 Subject: [PATCH 2/2] fix multiline strings highlighting ```pug span.aui-lozenge.aui-lozenge-subtle( :class=`{ "aui-lozenge-inprogress": pipeline.status == PipelineStatus.Running, "aui-lozenge-error": pipeline.status == PipelineStatus.Failed }` ) ``` Entire string inside of `:class` should be highlighted as a JavaScript string. Also, add special group to not highlight multiline string indentation, which is useful when string highlighting is using non-default background color. --- syntax/pug.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/pug.vim b/syntax/pug.vim index 1dc50d2..e5a5b01 100644 --- a/syntax/pug.vim +++ b/syntax/pug.vim @@ -40,7 +40,7 @@ syn region pugHtmlConditionalComment start="" co syn region pugAngular2 start="(" end=")" contains=htmlEvent syn region pugJavascriptString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contained syn region pugJavascriptString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contained -syn region pugJavascriptString start=+`+ skip=+\\\(`\|$\)+ end=+`\|$+ contains=javascriptInterpolation contained +syn region pugJavascriptString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=javascriptInterpolation,pugJavascriptMultilineStringIndent contained syn region pugAttributes matchgroup=pugAttributesDelimiter start="(" end="\(.\zs)\)\|)" contained contains=pugJavascriptString,pugHtmlArg,pugAngular2,htmlArg,htmlEvent,htmlCssDefinition nextgroup=@pugComponent syn match pugClassChar "\." containedin=htmlTagName nextgroup=pugClass syn match pugBlockExpansionChar ":\s\+" contained nextgroup=pugTag,pugClassChar,pugIdChar @@ -75,6 +75,7 @@ syn keyword pugScriptLoopKeywords contained for each in syn region pugJavascript start="^\z(\s*\)script\%(:\w\+\)\=" end="^\%(\z1\s\|\s*$\)\@!" contains=@htmlJavascript,pugJavascriptTag,pugCoffeescriptFilter keepend syn region javascriptInterpolation start=/${/ end=/}/ contained +syn region pugJavascriptMultilineStringIndent start=/^/ end=/\ze\S/ contained syn region pugCoffeescriptFilter matchgroup=pugFilter start="^\z(\s*\):coffee-\?script\s*$" end="^\%(\z1\s\|\s*$\)\@!" contains=@htmlCoffeescript contained syn region pugJavascriptTag contained start="^\z(\s*\)script\%(:\w\+\)\=" end="$" contains=pugBegin,pugTag @@ -106,6 +107,7 @@ hi def link pugCommentBlock Comment hi def link pugHtmlConditionalComment pugComment hi def link pugJavascriptString String hi def link javascriptInterpolation Delimiter +hi def link pugJavascriptMultilineStringIndent Normal let b:current_syntax = "pug"