@@ -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 ) ]
2046pub 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
215245fn 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