grammars: Distinguish control-flow keyword highlighting in Go (#63769)

# Objective
- Improve Go's syntax highlighting by distinguishing control-flow
keywords from other keywords, in the same way it was done for other
languages.

## Solution

- Split keywords in `highlights.scm` into two groups: `keyword.control`
and `keyword`. This change affects tree-sitter highlighting, enabling
`Semantic Tokens` can override it.

## Testing

- Tested locally on Windows using a development build, with `Semantic
Tokens` disabled. Opened a Go file with a theme that assigns different
colors to `keyword` and `keyword.control`

## 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

- Screenshot showing a build without this change and one with it side by
side
<img width="930" height="154" alt="after"
src="https://github.com/user-attachments/assets/bf3f612f-0ffc-40e4-b4c3-7002fff49fb7"
/>


Release Notes:
- Improved Go syntax highlighting by separating control-flow keywords
from regular keywords

---------

Co-authored-by: Finn Evers <finn.evers@outlook.de>
This commit is contained in:
GamiandFinn Evers authored and GitHub committed 2026-09-06 23:48:10 +00:00
1 parent d2b09224b3
commit a3517499be
1 file changed
+14 -11
+14 -11
View File
@@ -101,32 +101,35 @@
] @operator
[
"break"
"case"
"chan"
"const"
"func"
"import"
"interface"
"map"
"package"
"struct"
"type"
"var"
] @keyword
[
"break"
"case"
"continue"
"default"
"defer"
"else"
"fallthrough"
"for"
"func"
"go"
"goto"
"if"
"import"
"interface"
"map"
"package"
"range"
"return"
"select"
"struct"
"switch"
"type"
"var"
] @keyword
] @keyword.control
[
(interpreted_string_literal)