diff --git a/RustEnhanced.sublime-syntax b/RustEnhanced.sublime-syntax
index 4ded3af5..66f5d971 100644
--- a/RustEnhanced.sublime-syntax
+++ b/RustEnhanced.sublime-syntax
@@ -101,6 +101,19 @@ contexts:
scope: storage.type.enum.rust
push: enum-identifier
+ - include: raw-pointer
+
+ - match: '\b(const)\s+({{identifier}})'
+ captures:
+ 1: storage.type.rust
+ 2: entity.name.constant.rust
+
+ - match: '\b(static)\s+(?:(mut)\s+)?({{identifier}})'
+ captures:
+ 1: storage.type.rust
+ 2: storage.modifier.rust
+ 3: entity.name.constant.rust
+
- match: '\b(break|continue)(?:\s+(''{{identifier}}))?'
captures:
1: keyword.control.rust
@@ -412,6 +425,7 @@ contexts:
- include: return-type
- match: '&'
scope: keyword.operator.rust
+ - include: raw-pointer
- match: \b(mut|ref|const|unsafe)\b
scope: storage.modifier.rust
- match: \b(fn)\b(\()
@@ -459,6 +473,10 @@ contexts:
- match: '!'
scope: keyword.operator.rust
+ raw-pointer:
+ - match: '\*\s*(?:const|mut)\b'
+ scope: storage.modifier.rust
+
hrtb:
- match: \bfor\b
scope: keyword.other.rust
diff --git a/RustSymbols.JSON-tmPreferences b/RustSymbols.JSON-tmPreferences
index eadc75f9..67672210 100644
--- a/RustSymbols.JSON-tmPreferences
+++ b/RustSymbols.JSON-tmPreferences
@@ -1,6 +1,6 @@
{
"name": "Rust Symbols",
- "scope": "entity.name.function.rust, entity.name.macro.rust, entity.name.struct.rust, entity.name.enum.rust, entity.name.module.rust, entity.name.type.rust, entity.name.trait.rust",
+ "scope": "entity.name.function.rust, entity.name.macro.rust, entity.name.struct.rust, entity.name.enum.rust, entity.name.module.rust, entity.name.type.rust, entity.name.trait.rust, entity.name.constant.rust",
"settings": {
"showInSymbolList": 1,
"showInIndexedSymbolList": 1
diff --git a/RustSymbols.tmPreferences b/RustSymbols.tmPreferences
index cea7f939..9b6d6464 100644
--- a/RustSymbols.tmPreferences
+++ b/RustSymbols.tmPreferences
@@ -5,7 +5,7 @@
name
Rust Symbols
scope
- entity.name.function.rust, entity.name.macro.rust, entity.name.struct.rust, entity.name.enum.rust, entity.name.module.rust, entity.name.type.rust, entity.name.trait.rust
+ entity.name.function.rust, entity.name.macro.rust, entity.name.struct.rust, entity.name.enum.rust, entity.name.module.rust, entity.name.type.rust, entity.name.trait.rust, entity.name.constant.rust
settings
showInIndexedSymbolList
diff --git a/tests/syntax-rust/syntax_test_types.rs b/tests/syntax-rust/syntax_test_types.rs
index ba422997..26b8d462 100644
--- a/tests/syntax-rust/syntax_test_types.rs
+++ b/tests/syntax-rust/syntax_test_types.rs
@@ -33,19 +33,23 @@ type GenFnPointer2 = Bar;
const ZERO: u64 = 0;
// <- storage.type
-// ^^^^ constant.other
+// ^^^^ entity.name.constant
// ^ punctuation.separator
// ^^^ storage.type
// ^ keyword.operator
// ^ constant.numeric.integer.decimal
static NAME: &'static str = "John";
// <- storage.type
+// ^^^^ entity.name.constant
// ^ keyword.operator
// ^^^^^^^ storage.modifier.lifetime
// ^^^ storage.type
// ^ keyword.operator
// ^^^^^^ string.quoted.double
-
+static mut BRAVO: u32 = 0;
+// <- storage.type
+// ^^^ storage.modifier
+// ^^^^^ entity.name.constant
// Function type in a box return type.
// fixes https://github.com/rust-lang/sublime-rust/issues/144
@@ -121,13 +125,25 @@ let slice: &[i32];
// Pointer types.
-let p: *const T;
-// ^ keyword.operator
-// ^^^^^ storage.type
+let p: *const Foo;
+// ^^^^^^ storage.modifier
+// ^^^ storage.type.source
let p: *mut u8;
-// ^ keyword.operator
-// ^^^ storage.modifier
+// ^^^^ storage.modifier
// ^^ storage.type
+let raw = &x as *const i32;
+// ^^^^^^ storage.modifier
+// ^^^ storage.type
+let raw_mut = &mut y as *mut i32;
+// ^^^^ storage.modifier
+// ^^^ storage.type
+let p_imm: *const u32 = &i as *const u32;
+// ^^^^^^ storage.modifier
+// ^^^^^^ storage.modifier
+// ^^^ storage.type
+type ExampleRawPointer = HashMap<*const i32, Option, BuildHasherDefault>;
+// ^^^^^^ meta.generic storage.modifier
+// ^^^ meta.generic storage.type
// Anonymous lifetimes.