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.