godotengine / godotengine/godot-vscode-plugin

Support for '##' comments grammar scope (for themes)

Open
#659 0 comments 2 reactions 0 assignees View on GitHub
enhancement
Dominant language
TypeScript
Stars
2.1k
Forks
257
PR merge metrics
No merged PRs in 30d

Description

### Godot version

4.2.2.stable

### VS Code version

1.87.0

### Godot Tools VS Code extension version

v2.0.0

### System information

Windows 10

### Problem statement

Could it be possible to add a different scope for the double sharp comments?
I'm trying to replicate 1-to-1 the theme from Godot into VSCode. (based on godot-vscode-theme)

But it seems the scope for `# comments`and `## comments` are the same.
In Godot, the double symbol comments have a slight different color. I'd like to achieve that with a theme.

Here's the comment grammar location
https://github.com/godotengine/godot-vscode-plugin/blob/df445b8390b5575c6e2b63ca7d6bdc1763154604/syntaxes/GDScript.tmLanguage.json#L85-L89

### Proposed solution
I've never worked with this, but possibly adding a new grammar entry like:
**Edit:**
This works, it can differentiate single and double comments

Adding base_pattern
```
{ "include": "#comment_double" },
```
And
```
"comment": {
"match": "(#(?!#)).*$\\n?",
"name": "comment.line.number-sign.gdscript",
"captures": { "1": { "name": "punctuation.definition.comment.number-sign.gdscript" } }
},
"comment_double": {
"match": "(##).*$\\n?",
"name": "comment.line.number-sign-double.gdscript",
"captures": { "1": { "name": "punctuation.definition.comment.number-sign.gdscript" } }
},
```
**Edit2:**
I've been able to colorize the double comments, and add TODO/FIXME colored keywords inside comments with grammar injections with the theme plugin.

Here are some of the keypoints.
I replaced the 'comment' from using match regex to begin/end
```
"repository": {
"comment": {
"begin": "#(?!#)",
"end": "$",
"name": "comment.line.number-sign.gdscript",
"beginCaptures": { "1": { "name": "punctuation.definition.comment.number-sign.gdscript" } }
},
"comment_double": {
"name": "comment.line.double-number-sign.gdscript",
"begin": "##",
"end": "$"
}
}
```

Changed the "comment" to use the "Begin/End" regex instead of "Match"
so it could inject TODO/FIXME scopes inside comments. It wouldn't work when comments were using match.
```
{
"injectionSelector": "L:comment.line",
"scopeName": "comment-keywords.injection",
"patterns": [
{"include": "#todo_keywords" }
],
"repository": {
"todo_keywords": {
"name": "comment.keywords.todo.gdscript",
"match": "TODO|FIXME"
}
}
}
```

---

The other missing color I found is the global vs local function color.
But that is a way more complicated problem that I'm not sure how to solve.
I think it needs a custom semantic token for that.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.