Summary
When a .qmd file contains one or more R code chunks, the R Language Server (or Quarto VS Code extension) emits a comment semantic token covering the first character of every line in the document — including YAML front matter keys, markdown prose, headings, and LaTeX math delimiters. This colors all those first characters green (#008000), overriding the correct TextMate grammar colors.
Environment
- Editor: Cursor (VS Code-based)
- Quarto extension: quarto.quarto (version: 1.133.0)
- R languageserver: 0.3.18
- OS: Windows 11
Steps to Reproduce
- Create a
.qmd file with a standard YAML front matter and at least one R code chunk, e.g.:
---
title: "Test"
bibliography: refs.bib
format:
html:
toc: true
---
# Section heading
This is a paragraph of text.
$$
x = y + z
$$ {#eq-test}
```{r}
#| echo: false
print("hello")
```
- Open the file in VS Code / Cursor with the Quarto extension installed and an R Language Server active.
- Observe that the first character of every line (the
t in title, the # in # Section heading, the T in This is a paragraph, the $ of $$, etc.) is colored green.
- Use Developer: Inspect Editor Tokens and Scopes (Ctrl+Shift+P) with the cursor on any affected first character.
Observed Token Info (from Inspect Editor Tokens and Scopes)
Example: first character t of YAML key title:
language yaml
standard token String
foreground #008000
semantic token comment
foreground comment → { "foreground": "#008000" }
textmate scopes entity.name.tag.yaml
string.unquoted.plain.out.yaml
meta.embedded.block.frontmatter
text.html.quarto
foreground meta.embedded.block.frontmatter entity.name.tag.yaml → { "foreground": "#800000" }
Example: first $ of a display math block $$:
language quarto
standard token Other
foreground #008000
semantic token comment
foreground comment → { "foreground": "#008000" }
textmate scopes keyword.control.import.math.begin.quarto
markup.math.block.quarto
text.html.quarto
foreground keyword.control → { "foreground": "#0000FF" }
The semantic comment token (green, #008000) overrides the correct TextMate colors for every affected character.
Expected Behaviour
The comment semantic token should only be emitted for actual R comments (lines beginning with # inside R code chunks). It should not be applied to:
- YAML front matter keys
- Markdown prose
- Heading markers
- LaTeX math delimiters (
$, $$)
- Any other non-R content
Actual Behaviour
The comment semantic token is applied to the first character of every line in the document whenever at least one R code chunk is present.
Key Observations
- The issue is absent when the
.qmd file contains no R code chunks.
- Removing all R code chunks from an affected file immediately resolves the green coloring.
- A
.qmd file with identical front matter and body but no R chunks shows no issue.
- The issue is therefore triggered by R Language Server activation, not by the YAML or Quarto language servers alone.
- This behaviour was not present in earlier versions; it appears to be a recent regression.
Workaround
Add the following to .vscode/settings.json in the workspace to suppress the spurious color while preserving correct R comment coloring:
{
"editor.semanticTokenColorCustomizations": {
"rules": {
"comment:yaml": "#800000",
"comment:quarto": "#000000",
"comment:r": "#008000"
}
}
}
Suggested Fix
The R Language Server (or the Quarto extension's LSP bridge) should scope semantic token emission to the language region of each token — i.e., comment tokens should only be emitted within R code block ranges, not propagated to the surrounding markdown/YAML document.
Summary
When a
.qmdfile contains one or more R code chunks, the R Language Server (or Quarto VS Code extension) emits acommentsemantic token covering the first character of every line in the document — including YAML front matter keys, markdown prose, headings, and LaTeX math delimiters. This colors all those first characters green (#008000), overriding the correct TextMate grammar colors.Environment
Steps to Reproduce
.qmdfile with a standard YAML front matter and at least one R code chunk, e.g.:tintitle, the#in# Section heading, theTinThis is a paragraph, the$of$$, etc.) is colored green.Observed Token Info (from Inspect Editor Tokens and Scopes)
Example: first character
tof YAML keytitle:Example: first
$of a display math block$$:The semantic
commenttoken (green,#008000) overrides the correct TextMate colors for every affected character.Expected Behaviour
The
commentsemantic token should only be emitted for actual R comments (lines beginning with#inside R code chunks). It should not be applied to:$,$$)Actual Behaviour
The
commentsemantic token is applied to the first character of every line in the document whenever at least one R code chunk is present.Key Observations
.qmdfile contains no R code chunks..qmdfile with identical front matter and body but no R chunks shows no issue.Workaround
Add the following to
.vscode/settings.jsonin the workspace to suppress the spurious color while preserving correct R comment coloring:{ "editor.semanticTokenColorCustomizations": { "rules": { "comment:yaml": "#800000", "comment:quarto": "#000000", "comment:r": "#008000" } } }Suggested Fix
The R Language Server (or the Quarto extension's LSP bridge) should scope semantic token emission to the language region of each token — i.e.,
commenttokens should only be emitted within R code block ranges, not propagated to the surrounding markdown/YAML document.