Skip to content

Commit

Permalink
wip: try to honor path expressions correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
nknapp committed Jan 6, 2020
1 parent d4486f1 commit bf2bd4c
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 19 deletions.
10 changes: 6 additions & 4 deletions src/languages/handlebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ function (hljs) {
}

// as defined in https://handlebarsjs.com/guide/expressions.html#literal-segments
var IDENFIFIER_REGEX = /".*?"|'.*?'|\[.*?\]|[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/
// this regex matches literal segments like ' abc ' or [ abc ] as well as helpers and paths
// like a/b, ./abc/cde, and abc.bcd
var IDENFIFIER_REGEX = /(".*?"|'.*?'|\[.*?\]|[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+|\.|\/)+/

var HASH_PARAM_REGEX = /(".*?"|'.*?'|\[.*?\]|[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+)=/

var IDENTIFIER_PLAIN_OR_QUOTED = {
Expand All @@ -24,8 +27,6 @@ function (hljs) {

var EXPRESSION = hljs.inherit(IDENTIFIER_PLAIN_OR_QUOTED, {
className: DEBUG && 'expression',
// TODO: this is necessary, but causes problems:
// end: /(?=[\s)}])/,
});


Expand Down Expand Up @@ -66,7 +67,8 @@ function (hljs) {

var HELPER_PARAMETERS = {
className: DEBUG && 'helper-parameters',
endsWithParent: true, relevance: 0,
endsWithParent: true,
relevance: 0,
contains: [
BLOCK_PARAMS, HASH, EXPRESSION, SUB_EXPRESSION, hljs.NUMBER_MODE
]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<span class="xml">text </span><span class="hljs-template-tag">{{#<span class="hljs-name">abc</span> "lite]'ral}}segment" }}</span><span class="xml">a</span><span class="hljs-template-tag">{{/<span class="hljs-name">abc</span>}}</span><span class="xml">
<span class="xml">Block expression variants with literal segments in helper param:

text </span><span class="hljs-template-tag">{{#<span class="hljs-name">abc</span> 'lite]"ral}}segment' }}</span><span class="xml">a</span><span class="hljs-template-tag">{{/<span class="hljs-name">abc</span>}}</span><span class="xml">

text </span><span class="hljs-template-tag">{{#<span class="hljs-name">abc</span> [lite"'ral}}segment] }}</span><span class="xml">a</span><span class="hljs-template-tag">{{/<span class="hljs-name">abc</span>}}</span><span class="xml">

text
</span><span class="hljs-template-tag">{{#<span class="hljs-name">abc</span> "lite]'ral}}segment" }}</span><span class="xml">a</span><span class="hljs-template-tag">{{/<span class="hljs-name">abc</span>}}</span><span class="xml">
...
</span><span class="hljs-template-tag">{{#<span class="hljs-name">abc</span> 'lite]"ral}}segment' }}</span><span class="xml">a</span><span class="hljs-template-tag">{{/<span class="hljs-name">abc</span>}}</span><span class="xml">
...
</span><span class="hljs-template-tag">{{#<span class="hljs-name">abc</span> [lite"'ral}}segment] }}</span><span class="xml">a</span><span class="hljs-template-tag">{{/<span class="hljs-name">abc</span>}}</span><span class="xml">
...
Done
</span>
5 changes: 2 additions & 3 deletions test/markup/handlebars/block-expression-variants-in-param.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ Block expression variants with literal segments in helper param:

{{#abc "lite]'ral}}segment" }}a{{/abc}}
...
{{{#abc 'lite]"ral}}segment' }}a{{/abc}}
{{#abc 'lite]"ral}}segment' }}a{{/abc}}
...
{{{#abc [lite"'ral}}segment] }}a{{/abc}}
{{#abc [lite"'ral}}segment] }}a{{/abc}}
...
Done

12 changes: 6 additions & 6 deletions test/markup/handlebars/expression-variants.expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abc</span> [lite"'ral}}segment] }}</span><span class="xml">
...

</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd</span>.[lite"'ral}}segment] }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd.[lite"'ral}}segment]</span> }}</span><span class="xml">
...
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd</span>."lite]'ral}}segment" }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd."lite]'ral}}segment"</span> }}</span><span class="xml">
...
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd</span>.'lite]"ral}}segment' }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd.'lite]"ral}}segment'</span> }}</span><span class="xml">
...

</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd</span>.''}}</span><span class="xml">
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd.''</span>}}</span><span class="xml">
...
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd</span>."" }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd.""</span> }}</span><span class="xml">
...
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd</span>.[] }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ <span class="hljs-name">abcd.[]</span> }}</span><span class="xml">
...
Done
</span>
15 changes: 15 additions & 0 deletions test/markup/handlebars/path-expressions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Path expressions (no builtins and should highlight the whole path):

{{with.in.path}}
...
{{#with.in.path}} {{/with.in.path}}
...
{{highlighted.path}}
...
{{highlighted.path param}}
...
{{#highlighted.path}} {{/highlighted.path}}
...
{{#highlighted.path param }} {{/highlighted.path}}
...
Done

0 comments on commit bf2bd4c

Please sign in to comment.