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.rs | 30 |
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, |