Skip to content

Commit 50ecb1e

Browse files
committed
introduce named constants for highlighting tag names.
1 parent 3e8f9eb commit 50ecb1e

File tree

1 file changed

+67
-37
lines changed

1 file changed

+67
-37
lines changed

crates/ra_ide/src/syntax_highlighting.rs

Lines changed: 67 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,32 @@ use crate::{
1616
FileId,
1717
};
1818

19+
const HIGHLIGHT_TAG_FIELD: &'static str = "field";
20+
const HIGHLIGHT_TAG_FUNCTION: &'static str = "function";
21+
const HIGHLIGHT_TAG_MODULE: &'static str = "module";
22+
const HIGHLIGHT_TAG_TYPE: &'static str = "type";
23+
const HIGHLIGHT_TAG_CONSTANT: &'static str = "constant";
24+
const HIGHLIGHT_TAG_MACRO: &'static str = "macro";
25+
const HIGHLIGHT_TAG_VARIABLE: &'static str = "variable";
26+
const HIGHLIGHT_TAG_VARIABLE_MUT: &'static str = "variable.mut";
27+
const HIGHLIGHT_TAG_TEXT: &'static str = "text";
28+
29+
const HIGHLIGHT_TAG_TYPE_BUILTIN: &'static str = "type.builtin";
30+
const HIGHLIGHT_TAG_TYPE_SELF: &'static str = "type.self";
31+
const HIGHLIGHT_TAG_TYPE_PARAM: &'static str = "type.param";
32+
const HIGHLIGHT_TAG_TYPE_LIFETIME: &'static str = "type.lifetime";
33+
34+
const HIGHLIGHT_TAG_LITERAL_BYTE: &'static str = "literal.byte";
35+
const HIGHLIGHT_TAG_LITERAL_NUMERIC: &'static str = "literal.numeric";
36+
const HIGHLIGHT_TAG_LITERAL_CHAR: &'static str = "literal.char";
37+
const HIGHLIGHT_TAG_LITERAL_COMMENT: &'static str = "comment";
38+
const HIGHLIGHT_TAG_LITERAL_STRING: &'static str = "string";
39+
const HIGHLIGHT_TAG_LITERAL_ATTRIBUTE: &'static str = "attribute";
40+
41+
const HIGHLIGHT_TAG_KEYWORD_UNSAFE: &'static str = "keyword.unsafe";
42+
const HIGHLIGHT_TAG_KEYWORD_CONTROL: &'static str = "keyword.control";
43+
const HIGHLIGHT_TAG_KEYWORD: &'static str = "keyword";
44+
1945
#[derive(Debug)]
2046
pub struct HighlightedRange {
2147
pub range: TextRange,
@@ -71,9 +97,9 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa
7197
bindings_shadow_count.clear();
7298
continue;
7399
}
74-
COMMENT => "comment",
75-
STRING | RAW_STRING | RAW_BYTE_STRING | BYTE_STRING => "string",
76-
ATTR => "attribute",
100+
COMMENT => HIGHLIGHT_TAG_LITERAL_COMMENT,
101+
STRING | RAW_STRING | RAW_BYTE_STRING | BYTE_STRING => HIGHLIGHT_TAG_LITERAL_STRING,
102+
ATTR => HIGHLIGHT_TAG_LITERAL_ATTRIBUTE,
77103
NAME_REF => {
78104
if node.ancestors().any(|it| it.kind() == ATTR) {
79105
continue;
@@ -90,7 +116,7 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa
90116
}
91117
};
92118

93-
name_kind.map_or("text", |it| highlight_name(db, it))
119+
name_kind.map_or(HIGHLIGHT_TAG_TEXT, |it| highlight_name(db, it))
94120
}
95121
NAME => {
96122
let name = node.as_node().cloned().and_then(ast::Name::cast).unwrap();
@@ -107,21 +133,25 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa
107133

108134
match name_kind {
109135
Some(name_kind) => highlight_name(db, name_kind),
110-
None => name.syntax().parent().map_or("function", |x| match x.kind() {
111-
STRUCT_DEF | ENUM_DEF | TRAIT_DEF | TYPE_ALIAS_DEF => "type",
112-
TYPE_PARAM => "type.param",
113-
RECORD_FIELD_DEF => "field",
114-
_ => "function",
115-
}),
136+
None => {
137+
name.syntax().parent().map_or(HIGHLIGHT_TAG_FUNCTION, |x| match x.kind() {
138+
STRUCT_DEF | ENUM_DEF | TRAIT_DEF | TYPE_ALIAS_DEF => {
139+
HIGHLIGHT_TAG_TYPE
140+
}
141+
TYPE_PARAM => HIGHLIGHT_TAG_TYPE_PARAM,
142+
RECORD_FIELD_DEF => HIGHLIGHT_TAG_FIELD,
143+
_ => HIGHLIGHT_TAG_FUNCTION,
144+
})
145+
}
116146
}
117147
}
118-
INT_NUMBER | FLOAT_NUMBER => "literal.numeric",
119-
BYTE => "literal.byte",
120-
CHAR => "literal.char",
121-
LIFETIME => "type.lifetime",
122-
T![unsafe] => "keyword.unsafe",
123-
k if is_control_keyword(k) => "keyword.control",
124-
k if k.is_keyword() => "keyword",
148+
INT_NUMBER | FLOAT_NUMBER => HIGHLIGHT_TAG_LITERAL_NUMERIC,
149+
BYTE => HIGHLIGHT_TAG_LITERAL_BYTE,
150+
CHAR => HIGHLIGHT_TAG_LITERAL_CHAR,
151+
LIFETIME => HIGHLIGHT_TAG_TYPE_LIFETIME,
152+
T![unsafe] => HIGHLIGHT_TAG_KEYWORD_UNSAFE,
153+
k if is_control_keyword(k) => HIGHLIGHT_TAG_KEYWORD_CONTROL,
154+
k if k.is_keyword() => HIGHLIGHT_TAG_KEYWORD,
125155
_ => {
126156
if let Some(macro_call) = node.as_node().cloned().and_then(ast::MacroCall::cast) {
127157
if let Some(path) = macro_call.path() {
@@ -138,7 +168,7 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa
138168
}
139169
res.push(HighlightedRange {
140170
range: TextRange::from_to(range_start, range_end),
141-
tag: "macro",
171+
tag: HIGHLIGHT_TAG_MACRO,
142172
binding_hash: None,
143173
})
144174
}
@@ -214,29 +244,29 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
214244

215245
fn highlight_name(db: &RootDatabase, name_kind: NameKind) -> &'static str {
216246
match name_kind {
217-
Macro(_) => "macro",
218-
Field(_) => "field",
219-
AssocItem(hir::AssocItem::Function(_)) => "function",
220-
AssocItem(hir::AssocItem::Const(_)) => "constant",
221-
AssocItem(hir::AssocItem::TypeAlias(_)) => "type",
222-
Def(hir::ModuleDef::Module(_)) => "module",
223-
Def(hir::ModuleDef::Function(_)) => "function",
224-
Def(hir::ModuleDef::Adt(_)) => "type",
225-
Def(hir::ModuleDef::EnumVariant(_)) => "constant",
226-
Def(hir::ModuleDef::Const(_)) => "constant",
227-
Def(hir::ModuleDef::Static(_)) => "constant",
228-
Def(hir::ModuleDef::Trait(_)) => "type",
229-
Def(hir::ModuleDef::TypeAlias(_)) => "type",
230-
Def(hir::ModuleDef::BuiltinType(_)) => "type.builtin",
231-
SelfType(_) => "type.self",
232-
TypeParam(_) => "type.param",
247+
Macro(_) => HIGHLIGHT_TAG_MACRO,
248+
Field(_) => HIGHLIGHT_TAG_FIELD,
249+
AssocItem(hir::AssocItem::Function(_)) => HIGHLIGHT_TAG_FUNCTION,
250+
AssocItem(hir::AssocItem::Const(_)) => HIGHLIGHT_TAG_CONSTANT,
251+
AssocItem(hir::AssocItem::TypeAlias(_)) => HIGHLIGHT_TAG_TYPE,
252+
Def(hir::ModuleDef::Module(_)) => HIGHLIGHT_TAG_MODULE,
253+
Def(hir::ModuleDef::Function(_)) => HIGHLIGHT_TAG_FUNCTION,
254+
Def(hir::ModuleDef::Adt(_)) => HIGHLIGHT_TAG_TYPE,
255+
Def(hir::ModuleDef::EnumVariant(_)) => HIGHLIGHT_TAG_CONSTANT,
256+
Def(hir::ModuleDef::Const(_)) => HIGHLIGHT_TAG_CONSTANT,
257+
Def(hir::ModuleDef::Static(_)) => HIGHLIGHT_TAG_CONSTANT,
258+
Def(hir::ModuleDef::Trait(_)) => HIGHLIGHT_TAG_TYPE,
259+
Def(hir::ModuleDef::TypeAlias(_)) => HIGHLIGHT_TAG_TYPE,
260+
Def(hir::ModuleDef::BuiltinType(_)) => HIGHLIGHT_TAG_TYPE_BUILTIN,
261+
SelfType(_) => HIGHLIGHT_TAG_TYPE_SELF,
262+
TypeParam(_) => HIGHLIGHT_TAG_TYPE_PARAM,
233263
Local(local) => {
234264
if local.is_mut(db) {
235-
"variable.mut"
265+
HIGHLIGHT_TAG_VARIABLE_MUT
236266
} else if local.ty(db).is_mutable_reference() {
237-
"variable.mut"
267+
HIGHLIGHT_TAG_VARIABLE_MUT
238268
} else {
239-
"variable"
269+
HIGHLIGHT_TAG_VARIABLE
240270
}
241271
}
242272
}

0 commit comments

Comments
 (0)