Skip to content

Commit add0963

Browse files
authored
Merge pull request #18758 from mgsloan/scip-unique-symbols
Improve SCIP symbols
2 parents 6ccbb2d + 5f7425c commit add0963

File tree

8 files changed

+618
-323
lines changed

8 files changed

+618
-323
lines changed

crates/hir-ty/src/display.rs

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,9 @@ impl HirDisplay for ProjectionTy {
474474

475475
let trait_ref = self.trait_ref(f.db);
476476
write!(f, "<")?;
477-
fmt_trait_ref(f, &trait_ref, true)?;
477+
trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
478+
write!(f, " as ")?;
479+
trait_ref.hir_fmt(f)?;
478480
write!(
479481
f,
480482
">::{}",
@@ -1775,32 +1777,14 @@ fn write_bounds_like_dyn_trait(
17751777
Ok(())
17761778
}
17771779

1778-
fn fmt_trait_ref(
1779-
f: &mut HirFormatter<'_>,
1780-
tr: &TraitRef,
1781-
use_as: bool,
1782-
) -> Result<(), HirDisplayError> {
1783-
if f.should_truncate() {
1784-
return write!(f, "{TYPE_HINT_TRUNCATION}");
1785-
}
1786-
1787-
tr.self_type_parameter(Interner).hir_fmt(f)?;
1788-
if use_as {
1789-
write!(f, " as ")?;
1790-
} else {
1791-
write!(f, ": ")?;
1792-
}
1793-
let trait_ = tr.hir_trait_id();
1794-
f.start_location_link(trait_.into());
1795-
write!(f, "{}", f.db.trait_data(trait_).name.display(f.db.upcast(), f.edition()))?;
1796-
f.end_location_link();
1797-
let substs = tr.substitution.as_slice(Interner);
1798-
hir_fmt_generics(f, &substs[1..], None, substs[0].ty(Interner))
1799-
}
1800-
18011780
impl HirDisplay for TraitRef {
18021781
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
1803-
fmt_trait_ref(f, self, false)
1782+
let trait_ = self.hir_trait_id();
1783+
f.start_location_link(trait_.into());
1784+
write!(f, "{}", f.db.trait_data(trait_).name.display(f.db.upcast(), f.edition()))?;
1785+
f.end_location_link();
1786+
let substs = self.substitution.as_slice(Interner);
1787+
hir_fmt_generics(f, &substs[1..], None, substs[0].ty(Interner))
18041788
}
18051789
}
18061790

@@ -1811,10 +1795,17 @@ impl HirDisplay for WhereClause {
18111795
}
18121796

18131797
match self {
1814-
WhereClause::Implemented(trait_ref) => trait_ref.hir_fmt(f)?,
1798+
WhereClause::Implemented(trait_ref) => {
1799+
trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
1800+
write!(f, ": ")?;
1801+
trait_ref.hir_fmt(f)?;
1802+
}
18151803
WhereClause::AliasEq(AliasEq { alias: AliasTy::Projection(projection_ty), ty }) => {
18161804
write!(f, "<")?;
1817-
fmt_trait_ref(f, &projection_ty.trait_ref(f.db), true)?;
1805+
let trait_ref = &projection_ty.trait_ref(f.db);
1806+
trait_ref.self_type_parameter(Interner).hir_fmt(f)?;
1807+
write!(f, " as ")?;
1808+
trait_ref.hir_fmt(f)?;
18181809
write!(f, ">::",)?;
18191810
let type_alias = from_assoc_type_id(projection_ty.associated_ty_id);
18201811
f.start_location_link(type_alias.into());

crates/hir/src/display.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use itertools::Itertools;
2222
use crate::{
2323
Adt, AsAssocItem, AssocItem, AssocItemContainer, Const, ConstParam, Enum, ExternCrateDecl,
2424
Field, Function, GenericParam, HasCrate, HasVisibility, Impl, LifetimeParam, Macro, Module,
25-
SelfParam, Static, Struct, Trait, TraitAlias, TupleField, TyBuilder, Type, TypeAlias,
25+
SelfParam, Static, Struct, Trait, TraitAlias, TraitRef, TupleField, TyBuilder, Type, TypeAlias,
2626
TypeOrConstParam, TypeParam, Union, Variant,
2727
};
2828

@@ -743,6 +743,12 @@ impl HirDisplay for Static {
743743
}
744744
}
745745

746+
impl HirDisplay for TraitRef {
747+
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
748+
self.trait_ref.hir_fmt(f)
749+
}
750+
}
751+
746752
impl HirDisplay for Trait {
747753
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
748754
write_trait_header(self, f)?;

crates/ide-db/src/defs.rs

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ use either::Either;
1313
use hir::{
1414
Adt, AsAssocItem, AsExternAssocItem, AssocItem, AttributeTemplate, BuiltinAttr, BuiltinType,
1515
Const, Crate, DefWithBody, DeriveHelper, DocLinkDef, ExternAssocItem, ExternCrateDecl, Field,
16-
Function, GenericParam, GenericSubstitution, HasVisibility, HirDisplay, Impl, InlineAsmOperand,
17-
Label, Local, Macro, Module, ModuleDef, Name, PathResolution, Semantics, Static,
18-
StaticLifetime, Struct, ToolModule, Trait, TraitAlias, TupleField, TypeAlias, Variant,
19-
VariantDef, Visibility,
16+
Function, GenericDef, GenericParam, GenericSubstitution, HasContainer, HasVisibility,
17+
HirDisplay, Impl, InlineAsmOperand, ItemContainer, Label, Local, Macro, Module, ModuleDef,
18+
Name, PathResolution, Semantics, Static, StaticLifetime, Struct, ToolModule, Trait, TraitAlias,
19+
TupleField, TypeAlias, Variant, VariantDef, Visibility,
2020
};
2121
use span::Edition;
2222
use stdx::{format_to, impl_from};
@@ -97,9 +97,39 @@ impl Definition {
9797
}
9898

9999
pub fn enclosing_definition(&self, db: &RootDatabase) -> Option<Definition> {
100+
fn container_to_definition(container: ItemContainer) -> Option<Definition> {
101+
match container {
102+
ItemContainer::Trait(it) => Some(it.into()),
103+
ItemContainer::Impl(it) => Some(it.into()),
104+
ItemContainer::Module(it) => Some(it.into()),
105+
ItemContainer::ExternBlock() | ItemContainer::Crate(_) => None,
106+
}
107+
}
100108
match self {
109+
Definition::Macro(it) => Some(it.module(db).into()),
110+
Definition::Module(it) => it.parent(db).map(Definition::Module),
111+
Definition::Field(it) => Some(it.parent_def(db).into()),
112+
Definition::Function(it) => container_to_definition(it.container(db)),
113+
Definition::Adt(it) => Some(it.module(db).into()),
114+
Definition::Const(it) => container_to_definition(it.container(db)),
115+
Definition::Static(it) => container_to_definition(it.container(db)),
116+
Definition::Trait(it) => container_to_definition(it.container(db)),
117+
Definition::TraitAlias(it) => container_to_definition(it.container(db)),
118+
Definition::TypeAlias(it) => container_to_definition(it.container(db)),
119+
Definition::Variant(it) => Some(Adt::Enum(it.parent_enum(db)).into()),
120+
Definition::SelfType(it) => Some(it.module(db).into()),
101121
Definition::Local(it) => it.parent(db).try_into().ok(),
102-
_ => None,
122+
Definition::GenericParam(it) => Some(it.parent().into()),
123+
Definition::Label(it) => it.parent(db).try_into().ok(),
124+
Definition::ExternCrateDecl(it) => container_to_definition(it.container(db)),
125+
Definition::DeriveHelper(it) => Some(it.derive().module(db).into()),
126+
Definition::InlineAsmOperand(it) => it.parent(db).try_into().ok(),
127+
Definition::BuiltinAttr(_)
128+
| Definition::BuiltinType(_)
129+
| Definition::BuiltinLifetime(_)
130+
| Definition::TupleField(_)
131+
| Definition::ToolModule(_)
132+
| Definition::InlineAsmRegOrRegClass(_) => None,
103133
}
104134
}
105135

@@ -932,3 +962,17 @@ impl TryFrom<DefWithBody> for Definition {
932962
}
933963
}
934964
}
965+
966+
impl From<GenericDef> for Definition {
967+
fn from(def: GenericDef) -> Self {
968+
match def {
969+
GenericDef::Function(it) => it.into(),
970+
GenericDef::Adt(it) => it.into(),
971+
GenericDef::Trait(it) => it.into(),
972+
GenericDef::TraitAlias(it) => it.into(),
973+
GenericDef::TypeAlias(it) => it.into(),
974+
GenericDef::Impl(it) => it.into(),
975+
GenericDef::Const(it) => it.into(),
976+
}
977+
}
978+
}

crates/ide/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ pub use crate::{
9696
join_lines::JoinLinesConfig,
9797
markup::Markup,
9898
moniker::{
99-
MonikerDescriptorKind, MonikerKind, MonikerResult, PackageInformation,
100-
SymbolInformationKind,
99+
Moniker, MonikerDescriptorKind, MonikerIdentifier, MonikerKind, MonikerResult,
100+
PackageInformation, SymbolInformationKind,
101101
},
102102
move_item::Direction,
103103
navigation_target::{NavigationTarget, TryToNav, UpmappingResult},

0 commit comments

Comments
 (0)