From d2e52d12e1a88dac7718b4ae2c6e1d069ab2fa6a Mon Sep 17 00:00:00 2001 From: Xin Zhao Date: Wed, 24 Jun 2026 23:37:58 +0800 Subject: [PATCH] grammars: Add semantic token rule for Python constants (#59811) # Objective In Python, using variables in all uppercase letters signals that the variable is a constant. In Zed's built-in Python grammar, this convention is respected. Similarly, the `ty` language server has a rule for this: https://github.com/astral-sh/ruff/blob/e39ded7e89f503d892217364f924b38362fb9a66/crates/ty_ide/src/semantic_tokens.rs#L264-L267 https://github.com/astral-sh/ruff/blob/e39ded7e89f503d892217364f924b38362fb9a66/crates/ty_ide/src/semantic_tokens.rs#L356-L358 It returns a `"readonly"` token modifier if an item is determined to be a constant. However, this specific modifier is not currently respected in Zed. Consequently, when using `ty` as the language server (which is expected to be a common setup in the near future, similar to `ruff` and `uv`), and enable semantic token highlighting, these constants are highlighted as normal variables. ## Solution - Added a new semantic token rule in `crates/grammars/src/python/semantic_token_rules.json` to provide highlighting for constants. ## Testing - This change primarily affects the UI and has been tested locally. A before-and-after comparison is provided below in the Showcase section. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable ## Showcase
Click to view showcase | Before | After | | :---: | :---: | | highlight_before | highlight_after | | highlight_tree_before | highlight_tree_after |
--- Release Notes: - Improved semantic highlighting for Python constants when using the `ty` language server. --- crates/grammars/src/python/semantic_token_rules.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/grammars/src/python/semantic_token_rules.json b/crates/grammars/src/python/semantic_token_rules.json index b73bae962f..bd26f536c0 100644 --- a/crates/grammars/src/python/semantic_token_rules.json +++ b/crates/grammars/src/python/semantic_token_rules.json @@ -11,5 +11,10 @@ { "token_type": "builtinConstant", "style": ["constant.builtin"] + }, + { + "token_type": "variable", + "token_modifiers": ["readonly"], + "style": ["constant"] } ]