TextMate scope selectors: scope exclusion is not implemented
See original GitHub issueFrom @monk-time on September 4, 2017 14:51
- VSCode Version: Code 1.15.1 (41abd21afdf7424c89319ee7cb0445cc6f376959, 2017-08-16T18:07:25.676Z)
- OS Version: Windows_NT x64 6.1.7601
- Extensions:
Extension | Author (truncated) | Version |
---|---|---|
intellij-idea-keybindings | k– | 0.2.13 |
selectline-statusbar | tom | 0.0.2 |
Also the same result with today’s VS Code Insiders build.
According to the documentation for TextMate scope selectors, VSCode supports the syntax for excluding matching scopes:
entity.name.method - source.java
matches all scopes that start withentity.name.method
but not if a parent scope matchessource.java
This functionality is used in at least one built-in theme that I could find: https://github.com/Microsoft/vscode/blob/c00bdb74ee665cccfc5c4e41520893bb19ef61e5/extensions/theme-monokai/themes/monokai-color-theme.json#L316
But it seems that this syntax makes the selector with -
in it invalid, and VSCode doesn’t apply the given rule to anything at all.
Steps to Reproduce:
- Put this rule for syntax highlighting in the settings. Confirm that comments turn yellow at least in some files.
{
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "comment",
"settings": {
"foreground": "#FFFF00"
}
}
]
}
}
- Change the line with the scope selector to:
"scope": "comment - source.js",
Expected result: comments that changed their color after step 1 remain yellow in all files except in.js
. Actual result: all comments reset to a color defined by the current theme.
Reproduces without extensions: Yes
Copied from original issue: Microsoft/vscode#33802
Issue Analytics
- State:
- Created 6 years ago
- Reactions:29
- Comments:18 (1 by maintainers)
+1 for exclusions please!
just to make sure it’s captured, the descendant scope selectors such as
"source.ts meta.import-equals.external.ts"
aren’t working either (mentioned from Microsoft/vscode#34909), so it seems like anything beyond a single selector isn’t being applied.