-
Notifications
You must be signed in to change notification settings - Fork 597
Description
Is it possible to support HTML/CSS syntax highlighting inside a tagged template string? I am looking to do the equivalent of this atom editor change.
My first attempt at this did not work out so well. I just tried modifying the existing literal-quasi (but locally renamed it to literal-template-string everywhere in the file), just to see if I could get the HTML referencing correctly, before creating a new kind of match just for the "ending in html" tagged template function case:
literal-template-string:
- match: '([a-zA-Z$_][\w$_]*)?(`)'
captures:
1: entity.template-string.tag.name.js
2: punctuation.definition.template-string.begin.js
push:
- meta_content_scope: source.html.embedded.js
- include: 'scope:text.html.basic'
with_prototype:
- match: "`"
captures:
0: punctuation.definition.template-string.end.js
pop: true
- match: '\${'
captures:
0: punctuation.template-string.element.begin.js
push:
- meta_scope: entity.template-string.element.js
- match: "}"
captures:
0: punctuation.template-string.element.end.js
pop: true
- include: expressionBut I get an Apparent recursion within a with_prototype action: 25000 context sanity limit hit error. I am very new to these kinds of syntax files, so I expect I am making some very simple mistakes. I appreciate receiving any pointers on how to fix the issue.
My guess is that since JavaScript.sublime-syntax's expression has include: literal-template-string and literal-template-string is referencing source:text.html.basic, which inside of it references scope:source.js, maybe some pathway with all of that is causing the recursion.
Related context:
- This does not take into account the changes in [JavaScript] Renames Quasi literal to Template literal #165, I expect to redo some of it once that changeset lands.
- Previous discussion in Benvie/JavaScriptNext.tmLanguage#134, but I would want to scope the use of HTML to tagged template functions ending in
(?i)html, to allow alternate highlighting for other content, like CSS for functions ending in(?i)css, as the Atom changeset does. - GitHub's source display now does this kind of higlighting: example test.js.
- That test file is part of a tts-syntax-highlight repo to track this sort of enhancement in editors now that ES2015 template strings are used more.