github-vscode-theme icon indicating copy to clipboard operation
github-vscode-theme copied to clipboard

Higher priority for certain things inside a comment

Open MetRonnie opened this issue 3 years ago • 3 comments

Templating languages often get executed prior to whatever language the file is written in, so even if a templating block is inside a comment it will still get executed.

For example, Jinja2:

GitHub theme - displays as comment (incorrect):

image

Default Dark+ - displays as normal (correct):

image

Scopes:

# foo {% foo %}
^^^^^^^^^^^^^^^ comment.line.cylc, source.cylc
      ^^        punctuation.definition.template-expression.begin.jinja, source.jinja, meta.embedded.block.jinja,  comment.line.cylc, source.cylc    
             ^^ punctuation.definition.template-expression.end.jinja, source.jinja, meta.embedded.block.jinja,  comment.line.cylc, source.cylc    
      ^^^^^^^^^ source.jinja, meta.embedded.block.jinja, comment.line.cylc, source.cylc    

foreground for GitHub theme:

# foo {% foo %}
  ^^^^^^^^^^^^^ comment

foreground for Default Dark+:

# foo {% foo %}
  ^^^^          comment
      ^^        punctuation.definition.template-expression.begin 
             ^^ punctuation.definition.template-expression.begin 
        ^^^^^   meta.embedded

MetRonnie avatar Nov 11 '22 13:11 MetRonnie

What's the steps to reproduce the issue inside VS Code? I tried the following with the example code of:

# Jinja2 in a comment should not display as commented out
# foo {% foo %}
foo {% foo %}
  1. Add a new file with .jinja2 extension
  2. Let VS code auto-detect the language

It picked C, but I assume an additional extension needs to be installed?

Screen Shot 2023-01-03 at 16 26 38

simurai avatar Jan 03 '23 07:01 simurai

It needs a VSCode language that supports embedded languages. For example Cylc (cylc.vscode-cylc) supports embedded Jinja2 (no need to have any Jinja2 language installed).

I think the key difference between GitHub theme and Default Dark+ is that the former just gives a comment.line.cylc, meta.embedded.block.jinja-scoped token a foreground colour of comment whereas the latter defers to the usual foreground colours for a non-comment meta.embedded.block.jinja token, if that makes any sense (I've updated the OP slightly to help clarify this).

MetRonnie avatar Jan 03 '23 10:01 MetRonnie

Maybe we could be less strict with this line:

- "meta.embedded.expression"
+ "meta.embedded"

Then the meta.embedded scope overrides the comment scope for lines with meta.embedded.block.jinja:

Before After
Screen Shot 2023-01-17 at 17 06 03 Screen Shot 2023-01-17 at 17 06 59

simurai avatar Jan 17 '23 08:01 simurai