From b795128dde24cd3c4ec45879b354ec8c60fc751b Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 8 Jan 2021 12:28:02 +0100 Subject: Use hir::GenericParam in ide_db::Definition instead of relisting all 3 --- crates/ide/src/display/navigation_target.rs | 14 +++++++++++--- crates/ide/src/doc_links.rs | 4 +--- crates/ide/src/goto_definition.rs | 4 +--- crates/ide/src/hover.rs | 16 +++++++++------- crates/ide/src/references.rs | 5 ++++- crates/ide/src/syntax_highlighting/highlight.rs | 8 +++++--- 6 files changed, 31 insertions(+), 20 deletions(-) (limited to 'crates/ide/src') diff --git a/crates/ide/src/display/navigation_target.rs b/crates/ide/src/display/navigation_target.rs index e24c78301..4eecae697 100644 --- a/crates/ide/src/display/navigation_target.rs +++ b/crates/ide/src/display/navigation_target.rs @@ -215,10 +215,8 @@ impl TryToNav for Definition { Definition::ModuleDef(it) => it.try_to_nav(db), Definition::SelfType(it) => it.try_to_nav(db), Definition::Local(it) => Some(it.to_nav(db)), - Definition::TypeParam(it) => it.try_to_nav(db), - Definition::LifetimeParam(it) => it.try_to_nav(db), + Definition::GenericParam(it) => it.try_to_nav(db), Definition::Label(it) => Some(it.to_nav(db)), - Definition::ConstParam(it) => it.try_to_nav(db), } } } @@ -389,6 +387,16 @@ impl TryToNav for hir::AssocItem { } } +impl TryToNav for hir::GenericParam { + fn try_to_nav(&self, db: &RootDatabase) -> Option { + match self { + hir::GenericParam::TypeParam(it) => it.try_to_nav(db), + hir::GenericParam::ConstParam(it) => it.try_to_nav(db), + hir::GenericParam::LifetimeParam(it) => it.try_to_nav(db), + } + } +} + impl ToNav for hir::Local { fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { let src = self.source(db); diff --git a/crates/ide/src/doc_links.rs b/crates/ide/src/doc_links.rs index 678d22d03..91f4241f9 100644 --- a/crates/ide/src/doc_links.rs +++ b/crates/ide/src/doc_links.rs @@ -216,9 +216,7 @@ fn rewrite_intra_doc_link( Definition::Field(it) => it.resolve_doc_path(db, link, ns), Definition::SelfType(_) | Definition::Local(_) - | Definition::TypeParam(_) - | Definition::ConstParam(_) - | Definition::LifetimeParam(_) + | Definition::GenericParam(_) | Definition::Label(_) => return None, }?; let krate = resolved.module(db)?.krate(); diff --git a/crates/ide/src/goto_definition.rs b/crates/ide/src/goto_definition.rs index 227f20943..c20185b16 100644 --- a/crates/ide/src/goto_definition.rs +++ b/crates/ide/src/goto_definition.rs @@ -111,9 +111,7 @@ fn def_for_doc_comment( Definition::Field(it) => it.resolve_doc_path(db, link, ns), Definition::SelfType(_) | Definition::Local(_) - | Definition::TypeParam(_) - | Definition::LifetimeParam(_) - | Definition::ConstParam(_) + | Definition::GenericParam(_) | Definition::Label(_) => return None, } } diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index 8cb4a51d8..c34708324 100644 --- a/crates/ide/src/hover.rs +++ b/crates/ide/src/hover.rs @@ -1,6 +1,6 @@ use hir::{ - Adt, AsAssocItem, AssocItemContainer, FieldSource, HasAttrs, HasSource, HirDisplay, Module, - ModuleDef, ModuleSource, Semantics, + Adt, AsAssocItem, AssocItemContainer, FieldSource, GenericParam, HasAttrs, HasSource, + HirDisplay, Module, ModuleDef, ModuleSource, Semantics, }; use ide_db::base_db::SourceDatabase; use ide_db::{ @@ -220,12 +220,12 @@ fn goto_type_action(db: &RootDatabase, def: Definition) -> Option { } }; - if let Definition::TypeParam(it) = def { + if let Definition::GenericParam(GenericParam::TypeParam(it)) = def { it.trait_bounds(db).into_iter().for_each(|it| push_new_def(it.into())); } else { let ty = match def { Definition::Local(it) => it.ty(db), - Definition::ConstParam(it) => it.ty(db), + Definition::GenericParam(GenericParam::ConstParam(it)) => it.ty(db), _ => return None, }; @@ -357,9 +357,11 @@ fn hover_for_definition(db: &RootDatabase, def: Definition) -> Option { }) } Definition::Label(it) => Some(Markup::fenced_block(&it.name(db))), - Definition::LifetimeParam(it) => Some(Markup::fenced_block(&it.name(db))), - Definition::TypeParam(type_param) => Some(Markup::fenced_block(&type_param.display(db))), - Definition::ConstParam(it) => from_def_source(db, it, None), + Definition::GenericParam(it) => match it { + GenericParam::TypeParam(it) => Some(Markup::fenced_block(&it.display(db))), + GenericParam::LifetimeParam(it) => Some(Markup::fenced_block(&it.name(db))), + GenericParam::ConstParam(it) => from_def_source(db, it, None), + }, }; fn from_def_source(db: &RootDatabase, def: D, mod_path: Option) -> Option diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs index c95ed669c..0d5cd5f9a 100644 --- a/crates/ide/src/references.rs +++ b/crates/ide/src/references.rs @@ -130,7 +130,10 @@ pub(crate) fn find_all_refs( kind = ReferenceKind::FieldShorthandForLocal; } } - } else if matches!(def, Definition::LifetimeParam(_) | Definition::Label(_)) { + } else if matches!( + def, + Definition::GenericParam(hir::GenericParam::LifetimeParam(_)) | Definition::Label(_) + ) { kind = ReferenceKind::Lifetime; }; diff --git a/crates/ide/src/syntax_highlighting/highlight.rs b/crates/ide/src/syntax_highlighting/highlight.rs index 1a88975d2..20eccf3c6 100644 --- a/crates/ide/src/syntax_highlighting/highlight.rs +++ b/crates/ide/src/syntax_highlighting/highlight.rs @@ -328,8 +328,11 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight { } }, Definition::SelfType(_) => HlTag::Symbol(SymbolKind::Impl), - Definition::TypeParam(_) => HlTag::Symbol(SymbolKind::TypeParam), - Definition::ConstParam(_) => HlTag::Symbol(SymbolKind::ConstParam), + Definition::GenericParam(it) => match it { + hir::GenericParam::TypeParam(_) => HlTag::Symbol(SymbolKind::TypeParam), + hir::GenericParam::ConstParam(_) => HlTag::Symbol(SymbolKind::ConstParam), + hir::GenericParam::LifetimeParam(_) => HlTag::Symbol(SymbolKind::LifetimeParam), + }, Definition::Local(local) => { let tag = if local.is_param(db) { HlTag::Symbol(SymbolKind::ValueParam) @@ -345,7 +348,6 @@ fn highlight_def(db: &RootDatabase, def: Definition) -> Highlight { } return h; } - Definition::LifetimeParam(_) => HlTag::Symbol(SymbolKind::LifetimeParam), Definition::Label(_) => HlTag::Symbol(SymbolKind::Label), } .into() -- cgit v1.2.3