primer / github-vscode-theme

GitHub's VS Code themes
https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme
MIT License
1.89k stars 195 forks source link

Higher priority for certain things inside a comment #332

Open MetRonnie opened 1 year ago

MetRonnie commented 1 year ago

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
simurai commented 1 year ago

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

MetRonnie commented 1 year ago

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).

simurai commented 1 year ago

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