Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/syntax_highlighting/highlight.rs')
-rw-r--r--crates/ide/src/syntax_highlighting/highlight.rs30
1 files changed, 18 insertions, 12 deletions
diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs
index 05d2732251..3b322bd525 100644
--- a/crates/ide/src/syntax_highlighting/highlight.rs
+++ b/crates/ide/src/syntax_highlighting/highlight.rs
@@ -81,7 +81,7 @@ fn token(
T![::] | T![->] | T![=>] | T![..] | T![=] | T![@] | T![.] => {
HlOperator::Other.into()
}
- T![!] if parent_matches::<ast::MacroCall>(&token) => SymbolKind::Macro.into(),
+ T![!] if parent_matches::<ast::MacroCall>(&token) => HlPunct::MacroBang.into(),
T![!] if parent_matches::<ast::NeverType>(&token) => HlTag::BuiltinType.into(),
T![!] if parent_matches::<ast::PrefixExpr>(&token) => HlOperator::Logical.into(),
T![*] if parent_matches::<ast::PtrType>(&token) => HlTag::Keyword.into(),
@@ -665,21 +665,27 @@ fn highlight_name_ref_by_syntax(
}
}
PATH_SEGMENT => {
+ let name_based_fallback = || {
+ if name.text().chars().next().unwrap_or_default().is_uppercase() {
+ SymbolKind::Struct.into()
+ } else {
+ SymbolKind::Module.into()
+ }
+ };
let path = match parent.parent().and_then(ast::Path::cast) {
Some(it) => it,
- _ => return default.into(),
+ _ => return name_based_fallback(),
};
- let expr = match path.syntax().parent().and_then(ast::PathExpr::cast) {
- Some(it) => it,
- _ => {
- // within path, decide whether it is module or adt by checking for uppercase name
- return if name.text().chars().next().unwrap_or_default().is_uppercase() {
- SymbolKind::Struct
- } else {
- SymbolKind::Module
+ let expr = match path.syntax().parent() {
+ Some(parent) => match_ast! {
+ match parent {
+ ast::PathExpr(path) => path,
+ ast::MacroCall(_) => return SymbolKind::Macro.into(),
+ _ => return name_based_fallback(),
}
- .into();
- }
+ },
+ // within path, decide whether it is module or adt by checking for uppercase name
+ None => return name_based_fallback(),
};
let parent = match expr.syntax().parent() {
Some(it) => it,