Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--book/src/themes.md3
-rw-r--r--runtime/queries/rust/highlights.scm19
-rw-r--r--runtime/queries/rust/locals.scm18
3 files changed, 38 insertions, 2 deletions
diff --git a/book/src/themes.md b/book/src/themes.md
index dea1018c..dbc49df3 100644
--- a/book/src/themes.md
+++ b/book/src/themes.md
@@ -205,8 +205,11 @@ We use a similar set of scopes as
- `unused` - Unused variables and patterns, e.g. `_` and `_foo`
- `variable` - Variables
+ - `mutable` - Mutable variables (e.g. marked with `mut` in Rust)
- `builtin` - Reserved language variables (`self`, `this`, `super`, etc.)
+ - `mutable` - Mutable language varaibles (e.g. `mut self` in Rust)
- `parameter` - Function parameters
+ - `mutable` - Mutable function parameters (e.g. marked with `mut` in Rust)
- `other`
- `member` - Fields of composite data types (e.g. structs, unions)
- `private` - Private fields that use a unique syntax (currently just ECMAScript-based languages)
diff --git a/runtime/queries/rust/highlights.scm b/runtime/queries/rust/highlights.scm
index cc8380cb..147c80ba 100644
--- a/runtime/queries/rust/highlights.scm
+++ b/runtime/queries/rust/highlights.scm
@@ -208,6 +208,23 @@
(closure_parameters
(identifier) @variable.parameter)
+; Mutable variables
+
+(let_declaration
+ (mutable_specifier)
+ pattern: (identifier) @variable.mutable)
+(mut_pattern
+ (mutable_specifier)
+ (identifier) @variable.mutable)
+
+(parameter
+ (mutable_specifier)
+ pattern: (identifier) @variable.parameter.mutable)
+
+(self_parameter
+ (mutable_specifier)
+ (self) @variable.builtin.mutable)
+
; -------
; Keywords
; -------
@@ -287,8 +304,6 @@
"dyn"
] @keyword.storage.modifier
-; TODO: variable.mut to highlight mutable identifiers via locals.scm
-
; ---
; Remaining Paths
; ---
diff --git a/runtime/queries/rust/locals.scm b/runtime/queries/rust/locals.scm
index b8b918de..d745c2b4 100644
--- a/runtime/queries/rust/locals.scm
+++ b/runtime/queries/rust/locals.scm
@@ -21,7 +21,25 @@
(closure_parameters (identifier) @local.definition.variable.parameter)
+; Mutable variables
+
+(let_declaration
+ (mutable_specifier)
+ pattern: (identifier) @local.definition.variable.mutable)
+(mut_pattern
+ (mutable_specifier)
+ (identifier) @local.definition.variable.mutable)
+
+(parameter
+ (mutable_specifier)
+ pattern: (identifier) @local.definition.variable.parameter.mutable)
+
+(self_parameter
+ (mutable_specifier)
+ (self) @local.definition.variable.builtin.mutable)
+
; References
+(self) @local.reference
(identifier) @local.reference
; lifetimes / labels
(lifetime (identifier) @label)