Higher priority for certain things inside a comment
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):

Default Dark+ - displays as normal (correct):

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
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 %}
- Add a new file with
.jinja2extension - Let VS code auto-detect the language
It picked C, but I assume an additional extension needs to be installed?

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).
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 |
|---|---|
![]() |
![]() |

