FileId,
};
+const HIGHLIGHT_TAG_FIELD: &'static str = "field";
+const HIGHLIGHT_TAG_FUNCTION: &'static str = "function";
+const HIGHLIGHT_TAG_MODULE: &'static str = "module";
+const HIGHLIGHT_TAG_TYPE: &'static str = "type";
+const HIGHLIGHT_TAG_CONSTANT: &'static str = "constant";
+const HIGHLIGHT_TAG_MACRO: &'static str = "macro";
+const HIGHLIGHT_TAG_VARIABLE: &'static str = "variable";
+const HIGHLIGHT_TAG_VARIABLE_MUT: &'static str = "variable.mut";
+const HIGHLIGHT_TAG_TEXT: &'static str = "text";
+
+const HIGHLIGHT_TAG_TYPE_BUILTIN: &'static str = "type.builtin";
+const HIGHLIGHT_TAG_TYPE_SELF: &'static str = "type.self";
+const HIGHLIGHT_TAG_TYPE_PARAM: &'static str = "type.param";
+const HIGHLIGHT_TAG_TYPE_LIFETIME: &'static str = "type.lifetime";
+
+const HIGHLIGHT_TAG_LITERAL_BYTE: &'static str = "literal.byte";
+const HIGHLIGHT_TAG_LITERAL_NUMERIC: &'static str = "literal.numeric";
+const HIGHLIGHT_TAG_LITERAL_CHAR: &'static str = "literal.char";
+const HIGHLIGHT_TAG_LITERAL_COMMENT: &'static str = "comment";
+const HIGHLIGHT_TAG_LITERAL_STRING: &'static str = "string";
+const HIGHLIGHT_TAG_LITERAL_ATTRIBUTE: &'static str = "attribute";
+
+const HIGHLIGHT_TAG_KEYWORD_UNSAFE: &'static str = "keyword.unsafe";
+const HIGHLIGHT_TAG_KEYWORD_CONTROL: &'static str = "keyword.control";
+const HIGHLIGHT_TAG_KEYWORD: &'static str = "keyword";
+
#[derive(Debug)]
pub struct HighlightedRange {
pub range: TextRange,
bindings_shadow_count.clear();
continue;
}
- COMMENT => "comment",
- STRING | RAW_STRING | RAW_BYTE_STRING | BYTE_STRING => "string",
- ATTR => "attribute",
+ COMMENT => HIGHLIGHT_TAG_LITERAL_COMMENT,
+ STRING | RAW_STRING | RAW_BYTE_STRING | BYTE_STRING => HIGHLIGHT_TAG_LITERAL_STRING,
+ ATTR => HIGHLIGHT_TAG_LITERAL_ATTRIBUTE,
NAME_REF => {
if node.ancestors().any(|it| it.kind() == ATTR) {
continue;
}
};
- name_kind.map_or("text", |it| highlight_name(db, it))
+ name_kind.map_or(HIGHLIGHT_TAG_TEXT, |it| highlight_name(db, it))
}
NAME => {
let name = node.as_node().cloned().and_then(ast::Name::cast).unwrap();
match name_kind {
Some(name_kind) => highlight_name(db, name_kind),
- None => name.syntax().parent().map_or("function", |x| match x.kind() {
- STRUCT_DEF | ENUM_DEF | TRAIT_DEF | TYPE_ALIAS_DEF => "type",
- TYPE_PARAM => "type.param",
- RECORD_FIELD_DEF => "field",
- _ => "function",
- }),
+ None => {
+ name.syntax().parent().map_or(HIGHLIGHT_TAG_FUNCTION, |x| match x.kind() {
+ STRUCT_DEF | ENUM_DEF | TRAIT_DEF | TYPE_ALIAS_DEF => {
+ HIGHLIGHT_TAG_TYPE
+ }
+ TYPE_PARAM => HIGHLIGHT_TAG_TYPE_PARAM,
+ RECORD_FIELD_DEF => HIGHLIGHT_TAG_FIELD,
+ _ => HIGHLIGHT_TAG_FUNCTION,
+ })
+ }
}
}
- INT_NUMBER | FLOAT_NUMBER => "literal.numeric",
- BYTE => "literal.byte",
- CHAR => "literal.char",
- LIFETIME => "type.lifetime",
- T![unsafe] => "keyword.unsafe",
- k if is_control_keyword(k) => "keyword.control",
- k if k.is_keyword() => "keyword",
+ INT_NUMBER | FLOAT_NUMBER => HIGHLIGHT_TAG_LITERAL_NUMERIC,
+ BYTE => HIGHLIGHT_TAG_LITERAL_BYTE,
+ CHAR => HIGHLIGHT_TAG_LITERAL_CHAR,
+ LIFETIME => HIGHLIGHT_TAG_TYPE_LIFETIME,
+ T![unsafe] => HIGHLIGHT_TAG_KEYWORD_UNSAFE,
+ k if is_control_keyword(k) => HIGHLIGHT_TAG_KEYWORD_CONTROL,
+ k if k.is_keyword() => HIGHLIGHT_TAG_KEYWORD,
_ => {
if let Some(macro_call) = node.as_node().cloned().and_then(ast::MacroCall::cast) {
if let Some(path) = macro_call.path() {
}
res.push(HighlightedRange {
range: TextRange::from_to(range_start, range_end),
- tag: "macro",
+ tag: HIGHLIGHT_TAG_MACRO,
binding_hash: None,
})
}
fn highlight_name(db: &RootDatabase, name_kind: NameKind) -> &'static str {
match name_kind {
- Macro(_) => "macro",
- Field(_) => "field",
- AssocItem(hir::AssocItem::Function(_)) => "function",
- AssocItem(hir::AssocItem::Const(_)) => "constant",
- AssocItem(hir::AssocItem::TypeAlias(_)) => "type",
- Def(hir::ModuleDef::Module(_)) => "module",
- Def(hir::ModuleDef::Function(_)) => "function",
- Def(hir::ModuleDef::Adt(_)) => "type",
- Def(hir::ModuleDef::EnumVariant(_)) => "constant",
- Def(hir::ModuleDef::Const(_)) => "constant",
- Def(hir::ModuleDef::Static(_)) => "constant",
- Def(hir::ModuleDef::Trait(_)) => "type",
- Def(hir::ModuleDef::TypeAlias(_)) => "type",
- Def(hir::ModuleDef::BuiltinType(_)) => "type.builtin",
- SelfType(_) => "type.self",
- TypeParam(_) => "type.param",
+ Macro(_) => HIGHLIGHT_TAG_MACRO,
+ Field(_) => HIGHLIGHT_TAG_FIELD,
+ AssocItem(hir::AssocItem::Function(_)) => HIGHLIGHT_TAG_FUNCTION,
+ AssocItem(hir::AssocItem::Const(_)) => HIGHLIGHT_TAG_CONSTANT,
+ AssocItem(hir::AssocItem::TypeAlias(_)) => HIGHLIGHT_TAG_TYPE,
+ Def(hir::ModuleDef::Module(_)) => HIGHLIGHT_TAG_MODULE,
+ Def(hir::ModuleDef::Function(_)) => HIGHLIGHT_TAG_FUNCTION,
+ Def(hir::ModuleDef::Adt(_)) => HIGHLIGHT_TAG_TYPE,
+ Def(hir::ModuleDef::EnumVariant(_)) => HIGHLIGHT_TAG_CONSTANT,
+ Def(hir::ModuleDef::Const(_)) => HIGHLIGHT_TAG_CONSTANT,
+ Def(hir::ModuleDef::Static(_)) => HIGHLIGHT_TAG_CONSTANT,
+ Def(hir::ModuleDef::Trait(_)) => HIGHLIGHT_TAG_TYPE,
+ Def(hir::ModuleDef::TypeAlias(_)) => HIGHLIGHT_TAG_TYPE,
+ Def(hir::ModuleDef::BuiltinType(_)) => HIGHLIGHT_TAG_TYPE_BUILTIN,
+ SelfType(_) => HIGHLIGHT_TAG_TYPE_SELF,
+ TypeParam(_) => HIGHLIGHT_TAG_TYPE_PARAM,
Local(local) => {
if local.is_mut(db) {
- "variable.mut"
+ HIGHLIGHT_TAG_VARIABLE_MUT
} else if local.ty(db).is_mutable_reference() {
- "variable.mut"
+ HIGHLIGHT_TAG_VARIABLE_MUT
} else {
- "variable"
+ HIGHLIGHT_TAG_VARIABLE
}
}
}