aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhi-rustin <[email protected]>2021-05-14 03:36:12 +0100
committerhi-rustin <[email protected]>2021-05-14 03:47:00 +0100
commitb98c119ba690afdcd21edb3b344834e42422df0a (patch)
tree5e62ad72b3d2fbaa952f42704a7415721b0acff5
parent9803a9a148e1c5850d2f649ffbc1bb3575cfa929 (diff)
Apply async semantic token modifier to async/await keywords
Only async semantic token modifier
-rw-r--r--crates/hir/src/lib.rs4
-rw-r--r--crates/ide/src/syntax_highlighting/highlight.rs7
-rw-r--r--crates/ide/src/syntax_highlighting/tags.rs4
-rw-r--r--crates/rust-analyzer/src/semantic_tokens.rs1
-rw-r--r--crates/rust-analyzer/src/to_proto.rs1
5 files changed, 17 insertions, 0 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index c9ef4b420..6233bca83 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -873,6 +873,10 @@ impl Function {
873 db.function_data(self.id).is_unsafe() 873 db.function_data(self.id).is_unsafe()
874 } 874 }
875 875
876 pub fn is_async(self, db: &dyn HirDatabase) -> bool {
877 db.function_data(self.id).is_async()
878 }
879
876 pub fn diagnostics(self, db: &dyn HirDatabase, sink: &mut DiagnosticSink) { 880 pub fn diagnostics(self, db: &dyn HirDatabase, sink: &mut DiagnosticSink) {
877 let krate = self.module(db).id.krate(); 881 let krate = self.module(db).id.krate();
878 hir_def::diagnostics::validate_body(db.upcast(), self.id.into(), sink); 882 hir_def::diagnostics::validate_body(db.upcast(), self.id.into(), sink);
diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs
index b586dcc17..bea506544 100644
--- a/crates/ide/src/syntax_highlighting/highlight.rs
+++ b/crates/ide/src/syntax_highlighting/highlight.rs
@@ -255,6 +255,7 @@ pub(super) fn element(
255 }) 255 })
256 .map(|modifier| h | modifier) 256 .map(|modifier| h | modifier)
257 .unwrap_or(h), 257 .unwrap_or(h),
258 T![async] | T![await] => h | HlMod::Async,
258 _ => h, 259 _ => h,
259 } 260 }
260 } 261 }
@@ -310,6 +311,9 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
310 if func.is_unsafe(db) { 311 if func.is_unsafe(db) {
311 h |= HlMod::Unsafe; 312 h |= HlMod::Unsafe;
312 } 313 }
314 if func.is_async(db) {
315 h |= HlMod::Async;
316 }
313 return h; 317 return h;
314 } 318 }
315 hir::ModuleDef::Adt(hir::Adt::Struct(_)) => HlTag::Symbol(SymbolKind::Struct), 319 hir::ModuleDef::Adt(hir::Adt::Struct(_)) => HlTag::Symbol(SymbolKind::Struct),
@@ -409,6 +413,9 @@ fn highlight_method_call(
409 if func.is_unsafe(sema.db) || sema.is_unsafe_method_call(&method_call) { 413 if func.is_unsafe(sema.db) || sema.is_unsafe_method_call(&method_call) {
410 h |= HlMod::Unsafe; 414 h |= HlMod::Unsafe;
411 } 415 }
416 if func.is_async(sema.db) {
417 h |= HlMod::Async;
418 }
412 if func.as_assoc_item(sema.db).and_then(|it| it.containing_trait(sema.db)).is_some() { 419 if func.as_assoc_item(sema.db).and_then(|it| it.containing_trait(sema.db)).is_some() {
413 h |= HlMod::Trait 420 h |= HlMod::Trait
414 } 421 }
diff --git a/crates/ide/src/syntax_highlighting/tags.rs b/crates/ide/src/syntax_highlighting/tags.rs
index a304b3250..f4a2e7506 100644
--- a/crates/ide/src/syntax_highlighting/tags.rs
+++ b/crates/ide/src/syntax_highlighting/tags.rs
@@ -65,6 +65,8 @@ pub enum HlMod {
65 Static, 65 Static,
66 /// Used for items in traits and trait impls. 66 /// Used for items in traits and trait impls.
67 Trait, 67 Trait,
68 /// Used with keywords like `async` and `await`.
69 Async,
68 // Keep this last! 70 // Keep this last!
69 /// Used for unsafe functions, mutable statics, union accesses and unsafe operations. 71 /// Used for unsafe functions, mutable statics, union accesses and unsafe operations.
70 Unsafe, 72 Unsafe,
@@ -186,6 +188,7 @@ impl HlMod {
186 HlMod::Mutable, 188 HlMod::Mutable,
187 HlMod::Static, 189 HlMod::Static,
188 HlMod::Trait, 190 HlMod::Trait,
191 HlMod::Async,
189 HlMod::Unsafe, 192 HlMod::Unsafe,
190 ]; 193 ];
191 194
@@ -203,6 +206,7 @@ impl HlMod {
203 HlMod::Mutable => "mutable", 206 HlMod::Mutable => "mutable",
204 HlMod::Static => "static", 207 HlMod::Static => "static",
205 HlMod::Trait => "trait", 208 HlMod::Trait => "trait",
209 HlMod::Async => "async",
206 HlMod::Unsafe => "unsafe", 210 HlMod::Unsafe => "unsafe",
207 } 211 }
208 } 212 }
diff --git a/crates/rust-analyzer/src/semantic_tokens.rs b/crates/rust-analyzer/src/semantic_tokens.rs
index ecab89b2a..c9d38693e 100644
--- a/crates/rust-analyzer/src/semantic_tokens.rs
+++ b/crates/rust-analyzer/src/semantic_tokens.rs
@@ -91,6 +91,7 @@ define_semantic_token_modifiers![
91 (INJECTED, "injected"), 91 (INJECTED, "injected"),
92 (MUTABLE, "mutable"), 92 (MUTABLE, "mutable"),
93 (CONSUMING, "consuming"), 93 (CONSUMING, "consuming"),
94 (ASYNC, "async"),
94 (UNSAFE, "unsafe"), 95 (UNSAFE, "unsafe"),
95 (ATTRIBUTE_MODIFIER, "attribute"), 96 (ATTRIBUTE_MODIFIER, "attribute"),
96 (TRAIT_MODIFIER, "trait"), 97 (TRAIT_MODIFIER, "trait"),
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs
index ecf6fd12f..8ce4aa242 100644
--- a/crates/rust-analyzer/src/to_proto.rs
+++ b/crates/rust-analyzer/src/to_proto.rs
@@ -496,6 +496,7 @@ fn semantic_token_type_and_modifiers(
496 HlMod::ControlFlow => semantic_tokens::CONTROL_FLOW, 496 HlMod::ControlFlow => semantic_tokens::CONTROL_FLOW,
497 HlMod::Mutable => semantic_tokens::MUTABLE, 497 HlMod::Mutable => semantic_tokens::MUTABLE,
498 HlMod::Consuming => semantic_tokens::CONSUMING, 498 HlMod::Consuming => semantic_tokens::CONSUMING,
499 HlMod::Async => semantic_tokens::ASYNC,
499 HlMod::Unsafe => semantic_tokens::UNSAFE, 500 HlMod::Unsafe => semantic_tokens::UNSAFE,
500 HlMod::Callable => semantic_tokens::CALLABLE, 501 HlMod::Callable => semantic_tokens::CALLABLE,
501 HlMod::Static => lsp_types::SemanticTokenModifier::STATIC, 502 HlMod::Static => lsp_types::SemanticTokenModifier::STATIC,