theme_importer: Handle comma-separated token scopes (#27740)

This PR allows the `theme-importer` utility to handle comma-separated
token scopes.

Normally, a token in a VS Code theme is defined as either a string or a
string array:
```json
    {
      "scope": "token.debug-token",
      "settings": {
        "foreground": "#d55fde"
      }
    },
    {
      "name": "String interpolation",
      "scope": [
        "punctuation.definition.template-expression.begin",
        "punctuation.definition.template-expression.end",
        "punctuation.section.embedded"
      ],
      "settings": {
        "foreground": "#d55fde"
      }
    },
```

However, [some
themes](ac85540d64/src/variants/TokenColors.ts (L1771-L1777))
seem to use comma-separated values in a single scope string which VS
Code seems to accept as well:
```json
    {
      "name": "Comments",
      "scope": "comment, punctuation.definition.comment",
      "settings": {
        "foreground": "#7f848e"
      }
    },
```

This PR handles these definitions by splitting scopes by commas before
trying to match them with the scopes that match Zed syntax tokens.

Release Notes:

- N/A
This commit is contained in:
Variant9 2025-04-23 16:06:58 +02:00 committed by GitHub
parent 990ca48744
commit 4f4bbf264f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -150,7 +150,7 @@ impl ZedSyntaxToken {
VsCodeTokenScope::Many(scopes) => scopes.iter().collect(),
}
.iter()
.map(|scope| scope.as_str())
.flat_map(|scope| scope.split(',').map(|s| s.trim()))
.collect::<Vec<_>>();
let scopes_to_match = self.to_vscode();