@@ -23,7 +23,7 @@ use crate::{
2323 syntax_highlighting:: {
2424 format:: FormatStringHighlighter , macro_rules:: MacroRulesHighlighter , tags:: Highlight ,
2525 } ,
26- FileId , HighlightModifier , HighlightTag ,
26+ FileId , HighlightModifier , HighlightTag , SymbolKind ,
2727} ;
2828
2929pub ( crate ) use html:: highlight_as_html;
@@ -103,7 +103,7 @@ pub(crate) fn highlight(
103103 if let Some ( range) = macro_call_range ( & mc) {
104104 stack. add ( HighlightedRange {
105105 range,
106- highlight : HighlightTag :: Macro . into ( ) ,
106+ highlight : HighlightTag :: Symbol ( SymbolKind :: Macro ) . into ( ) ,
107107 binding_hash : None ,
108108 } ) ;
109109 }
@@ -470,13 +470,13 @@ fn highlight_element(
470470 } ;
471471
472472 match name_kind {
473- Some ( NameClass :: ExternCrate ( _) ) => HighlightTag :: Module . into ( ) ,
473+ Some ( NameClass :: ExternCrate ( _) ) => HighlightTag :: Symbol ( SymbolKind :: Module ) . into ( ) ,
474474 Some ( NameClass :: Definition ( def) ) => {
475475 highlight_def ( db, def) | HighlightModifier :: Definition
476476 }
477477 Some ( NameClass :: ConstReference ( def) ) => highlight_def ( db, def) ,
478478 Some ( NameClass :: PatFieldShorthand { field_ref, .. } ) => {
479- let mut h = HighlightTag :: Field . into ( ) ;
479+ let mut h = HighlightTag :: Symbol ( SymbolKind :: Field ) . into ( ) ;
480480 if let Definition :: Field ( field) = field_ref {
481481 if let VariantDef :: Union ( _) = field. parent_def ( db) {
482482 h |= HighlightModifier :: Unsafe ;
@@ -493,14 +493,16 @@ fn highlight_element(
493493 NAME_REF if element. ancestors ( ) . any ( |it| it. kind ( ) == ATTR ) => {
494494 // even though we track whether we are in an attribute or not we still need this special case
495495 // as otherwise we would emit unresolved references for name refs inside attributes
496- Highlight :: from ( HighlightTag :: Function )
496+ Highlight :: from ( HighlightTag :: Symbol ( SymbolKind :: Function ) )
497497 }
498498 NAME_REF => {
499499 let name_ref = element. into_node ( ) . and_then ( ast:: NameRef :: cast) . unwrap ( ) ;
500500 highlight_func_by_name_ref ( sema, & name_ref) . unwrap_or_else ( || {
501501 match NameRefClass :: classify ( sema, & name_ref) {
502502 Some ( name_kind) => match name_kind {
503- NameRefClass :: ExternCrate ( _) => HighlightTag :: Module . into ( ) ,
503+ NameRefClass :: ExternCrate ( _) => {
504+ HighlightTag :: Symbol ( SymbolKind :: Module ) . into ( )
505+ }
504506 NameRefClass :: Definition ( def) => {
505507 if let Definition :: Local ( local) = & def {
506508 if let Some ( name) = local. name ( db) {
@@ -530,7 +532,9 @@ fn highlight_element(
530532
531533 h
532534 }
533- NameRefClass :: FieldShorthand { .. } => HighlightTag :: Field . into ( ) ,
535+ NameRefClass :: FieldShorthand { .. } => {
536+ HighlightTag :: Symbol ( SymbolKind :: Field ) . into ( )
537+ }
534538 } ,
535539 None if syntactic_name_ref_highlighting => {
536540 highlight_name_ref_by_syntax ( name_ref, sema)
@@ -556,7 +560,7 @@ fn highlight_element(
556560 CHAR => HighlightTag :: CharLiteral . into ( ) ,
557561 QUESTION => Highlight :: new ( HighlightTag :: Operator ) | HighlightModifier :: ControlFlow ,
558562 LIFETIME => {
559- let h = Highlight :: new ( HighlightTag :: Lifetime ) ;
563+ let h = Highlight :: new ( HighlightTag :: Symbol ( SymbolKind :: LifetimeParam ) ) ;
560564 match element. parent ( ) . map ( |it| it. kind ( ) ) {
561565 Some ( LIFETIME_PARAM ) | Some ( LABEL ) => h | HighlightModifier :: Definition ,
562566 _ => h,
@@ -580,7 +584,7 @@ fn highlight_element(
580584 HighlightTag :: Operator . into ( )
581585 }
582586 T ! [ !] if element. parent ( ) . and_then ( ast:: MacroCall :: cast) . is_some ( ) => {
583- HighlightTag :: Macro . into ( )
587+ HighlightTag :: Symbol ( SymbolKind :: Macro ) . into ( )
584588 }
585589 T ! [ !] if element. parent ( ) . and_then ( ast:: NeverType :: cast) . is_some ( ) => {
586590 HighlightTag :: BuiltinType . into ( )
@@ -659,7 +663,7 @@ fn highlight_element(
659663 . and_then ( SyntaxNode :: parent)
660664 . and_then ( ast:: Path :: cast)
661665 . and_then ( |p| sema. resolve_path ( & p) ) ;
662- let mut h = HighlightTag :: SelfKeyword . into ( ) ;
666+ let mut h = HighlightTag :: Symbol ( SymbolKind :: SelfParam ) . into ( ) ;
663667 if self_param_is_mut
664668 || matches ! ( self_path,
665669 Some ( hir:: PathResolution :: Local ( local) )
@@ -756,10 +760,10 @@ fn highlight_method_call(
756760
757761fn highlight_def ( db : & RootDatabase , def : Definition ) -> Highlight {
758762 match def {
759- Definition :: Macro ( _) => HighlightTag :: Macro ,
760- Definition :: Field ( _) => HighlightTag :: Field ,
763+ Definition :: Macro ( _) => HighlightTag :: Symbol ( SymbolKind :: Macro ) ,
764+ Definition :: Field ( _) => HighlightTag :: Symbol ( SymbolKind :: Field ) ,
761765 Definition :: ModuleDef ( def) => match def {
762- hir:: ModuleDef :: Module ( _) => HighlightTag :: Module ,
766+ hir:: ModuleDef :: Module ( _) => HighlightTag :: Symbol ( SymbolKind :: Module ) ,
763767 hir:: ModuleDef :: Function ( func) => {
764768 let mut h = if func. as_assoc_item ( db) . is_some ( ) {
765769 if func. self_param ( db) . is_none ( ) {
@@ -768,35 +772,38 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
768772 HighlightTag :: Method . into ( )
769773 }
770774 } else {
771- HighlightTag :: Function . into ( )
775+ HighlightTag :: Symbol ( SymbolKind :: Function ) . into ( )
772776 } ;
773777 if func. is_unsafe ( db) {
774778 h |= HighlightModifier :: Unsafe ;
775779 }
776780 return h;
777781 }
778- hir:: ModuleDef :: Adt ( hir:: Adt :: Struct ( _) ) => HighlightTag :: Struct ,
779- hir:: ModuleDef :: Adt ( hir:: Adt :: Enum ( _) ) => HighlightTag :: Enum ,
780- hir:: ModuleDef :: Adt ( hir:: Adt :: Union ( _) ) => HighlightTag :: Union ,
781- hir:: ModuleDef :: EnumVariant ( _) => HighlightTag :: EnumVariant ,
782- hir:: ModuleDef :: Const ( _) => HighlightTag :: Constant ,
783- hir:: ModuleDef :: Trait ( _) => HighlightTag :: Trait ,
784- hir:: ModuleDef :: TypeAlias ( _) => HighlightTag :: TypeAlias ,
782+ hir:: ModuleDef :: Adt ( hir:: Adt :: Struct ( _) ) => HighlightTag :: Symbol ( SymbolKind :: Struct ) ,
783+ hir:: ModuleDef :: Adt ( hir:: Adt :: Enum ( _) ) => HighlightTag :: Symbol ( SymbolKind :: Enum ) ,
784+ hir:: ModuleDef :: Adt ( hir:: Adt :: Union ( _) ) => HighlightTag :: Symbol ( SymbolKind :: Union ) ,
785+ hir:: ModuleDef :: EnumVariant ( _) => HighlightTag :: Symbol ( SymbolKind :: Variant ) ,
786+ hir:: ModuleDef :: Const ( _) => HighlightTag :: Symbol ( SymbolKind :: Const ) ,
787+ hir:: ModuleDef :: Trait ( _) => HighlightTag :: Symbol ( SymbolKind :: Trait ) ,
788+ hir:: ModuleDef :: TypeAlias ( _) => HighlightTag :: Symbol ( SymbolKind :: TypeAlias ) ,
785789 hir:: ModuleDef :: BuiltinType ( _) => HighlightTag :: BuiltinType ,
786790 hir:: ModuleDef :: Static ( s) => {
787- let mut h = Highlight :: new ( HighlightTag :: Static ) ;
791+ let mut h = Highlight :: new ( HighlightTag :: Symbol ( SymbolKind :: Static ) ) ;
788792 if s. is_mut ( db) {
789793 h |= HighlightModifier :: Mutable ;
790794 h |= HighlightModifier :: Unsafe ;
791795 }
792796 return h;
793797 }
794798 } ,
795- Definition :: SelfType ( _) => HighlightTag :: SelfType ,
796- Definition :: TypeParam ( _) => HighlightTag :: TypeParam ,
799+ Definition :: SelfType ( _) => HighlightTag :: Symbol ( SymbolKind :: Impl ) ,
800+ Definition :: TypeParam ( _) => HighlightTag :: Symbol ( SymbolKind :: TypeParam ) ,
797801 Definition :: Local ( local) => {
798- let tag =
799- if local. is_param ( db) { HighlightTag :: ValueParam } else { HighlightTag :: Local } ;
802+ let tag = if local. is_param ( db) {
803+ HighlightTag :: Symbol ( SymbolKind :: ValueParam )
804+ } else {
805+ HighlightTag :: Symbol ( SymbolKind :: Local )
806+ } ;
800807 let mut h = Highlight :: new ( tag) ;
801808 if local. is_mut ( db) || local. ty ( db) . is_mutable_reference ( ) {
802809 h |= HighlightModifier :: Mutable ;
@@ -806,7 +813,7 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight {
806813 }
807814 return h;
808815 }
809- Definition :: LifetimeParam ( _) => HighlightTag :: Lifetime ,
816+ Definition :: LifetimeParam ( _) => HighlightTag :: Symbol ( SymbolKind :: LifetimeParam ) ,
810817 }
811818 . into ( )
812819}
@@ -820,19 +827,19 @@ fn highlight_name_by_syntax(name: ast::Name) -> Highlight {
820827 } ;
821828
822829 let tag = match parent. kind ( ) {
823- STRUCT => HighlightTag :: Struct ,
824- ENUM => HighlightTag :: Enum ,
825- UNION => HighlightTag :: Union ,
826- TRAIT => HighlightTag :: Trait ,
827- TYPE_ALIAS => HighlightTag :: TypeAlias ,
828- TYPE_PARAM => HighlightTag :: TypeParam ,
829- RECORD_FIELD => HighlightTag :: Field ,
830- MODULE => HighlightTag :: Module ,
831- FN => HighlightTag :: Function ,
832- CONST => HighlightTag :: Constant ,
833- STATIC => HighlightTag :: Static ,
834- VARIANT => HighlightTag :: EnumVariant ,
835- IDENT_PAT => HighlightTag :: Local ,
830+ STRUCT => HighlightTag :: Symbol ( SymbolKind :: Struct ) ,
831+ ENUM => HighlightTag :: Symbol ( SymbolKind :: Enum ) ,
832+ VARIANT => HighlightTag :: Symbol ( SymbolKind :: Variant ) ,
833+ UNION => HighlightTag :: Symbol ( SymbolKind :: Union ) ,
834+ TRAIT => HighlightTag :: Symbol ( SymbolKind :: Trait ) ,
835+ TYPE_ALIAS => HighlightTag :: Symbol ( SymbolKind :: TypeAlias ) ,
836+ TYPE_PARAM => HighlightTag :: Symbol ( SymbolKind :: TypeParam ) ,
837+ RECORD_FIELD => HighlightTag :: Symbol ( SymbolKind :: Field ) ,
838+ MODULE => HighlightTag :: Symbol ( SymbolKind :: Module ) ,
839+ FN => HighlightTag :: Symbol ( SymbolKind :: Function ) ,
840+ CONST => HighlightTag :: Symbol ( SymbolKind :: Const ) ,
841+ STATIC => HighlightTag :: Symbol ( SymbolKind :: Static ) ,
842+ IDENT_PAT => HighlightTag :: Symbol ( SymbolKind :: Local ) ,
836843 _ => default,
837844 } ;
838845
@@ -851,10 +858,10 @@ fn highlight_name_ref_by_syntax(name: ast::NameRef, sema: &Semantics<RootDatabas
851858 METHOD_CALL_EXPR => {
852859 return ast:: MethodCallExpr :: cast ( parent)
853860 . and_then ( |method_call| highlight_method_call ( sema, & method_call) )
854- . unwrap_or_else ( || HighlightTag :: Function . into ( ) ) ;
861+ . unwrap_or_else ( || HighlightTag :: Symbol ( SymbolKind :: Function ) . into ( ) ) ;
855862 }
856863 FIELD_EXPR => {
857- let h = HighlightTag :: Field ;
864+ let h = HighlightTag :: Symbol ( SymbolKind :: Field ) ;
858865 let is_union = ast:: FieldExpr :: cast ( parent)
859866 . and_then ( |field_expr| {
860867 let field = sema. resolve_field ( & field_expr) ?;
@@ -881,9 +888,9 @@ fn highlight_name_ref_by_syntax(name: ast::NameRef, sema: &Semantics<RootDatabas
881888 _ => {
882889 // within path, decide whether it is module or adt by checking for uppercase name
883890 return if name. text ( ) . chars ( ) . next ( ) . unwrap_or_default ( ) . is_uppercase ( ) {
884- HighlightTag :: Struct
891+ HighlightTag :: Symbol ( SymbolKind :: Struct )
885892 } else {
886- HighlightTag :: Module
893+ HighlightTag :: Symbol ( SymbolKind :: Module )
887894 }
888895 . into ( ) ;
889896 }
@@ -894,11 +901,11 @@ fn highlight_name_ref_by_syntax(name: ast::NameRef, sema: &Semantics<RootDatabas
894901 } ;
895902
896903 match parent. kind ( ) {
897- CALL_EXPR => HighlightTag :: Function . into ( ) ,
904+ CALL_EXPR => HighlightTag :: Symbol ( SymbolKind :: Function ) . into ( ) ,
898905 _ => if name. text ( ) . chars ( ) . next ( ) . unwrap_or_default ( ) . is_uppercase ( ) {
899- HighlightTag :: Struct . into ( )
906+ HighlightTag :: Symbol ( SymbolKind :: Struct )
900907 } else {
901- HighlightTag :: Constant
908+ HighlightTag :: Symbol ( SymbolKind :: Const )
902909 }
903910 . into ( ) ,
904911 }
0 commit comments