Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/moniker.rs')
-rw-r--r--crates/ide/src/moniker.rs122
1 files changed, 71 insertions, 51 deletions
diff --git a/crates/ide/src/moniker.rs b/crates/ide/src/moniker.rs
index 349e79ecfd..0d57e63d29 100644
--- a/crates/ide/src/moniker.rs
+++ b/crates/ide/src/moniker.rs
@@ -1,7 +1,7 @@
//! This module generates [moniker](https://microsoft.github.io/language-server-protocol/specifications/lsif/0.6.0/specification/#exportsImports)
//! for LSIF and LSP.
-use hir::{AsAssocItem, AssocItemContainer, Crate, Name, Semantics};
+use hir::{AsAssocItem, AssocItemContainer, Crate, Semantics};
use ide_db::{
base_db::{CrateOrigin, FilePosition, LangCrateOrigin},
defs::{Definition, IdentClass},
@@ -27,7 +27,7 @@ pub enum MonikerDescriptorKind {
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct MonikerDescriptor {
- pub name: Name,
+ pub name: String,
pub desc: MonikerDescriptorKind,
}
@@ -41,11 +41,7 @@ impl ToString for MonikerIdentifier {
fn to_string(&self) -> String {
match self {
MonikerIdentifier { description, crate_name } => {
- format!(
- "{}::{}",
- crate_name,
- description.iter().map(|x| x.name.to_string()).join("::")
- )
+ format!("{}::{}", crate_name, description.iter().map(|x| &x.name).join("::"))
}
}
}
@@ -136,7 +132,10 @@ pub(crate) fn def_to_moniker(
let krate = module.krate();
let mut description = vec![];
description.extend(module.path_to_root(db).into_iter().filter_map(|x| {
- Some(MonikerDescriptor { name: x.name(db)?, desc: MonikerDescriptorKind::Namespace })
+ Some(MonikerDescriptor {
+ name: x.name(db)?.display(db).to_string(),
+ desc: MonikerDescriptorKind::Namespace,
+ })
}));
// Handle associated items within a trait
@@ -147,7 +146,7 @@ pub(crate) fn def_to_moniker(
// Because different traits can have functions with the same name,
// we have to include the trait name as part of the moniker for uniqueness.
description.push(MonikerDescriptor {
- name: trait_.name(db),
+ name: trait_.name(db).display(db).to_string(),
desc: MonikerDescriptorKind::Type,
});
}
@@ -156,14 +155,14 @@ pub(crate) fn def_to_moniker(
// we add both the struct name and the trait name to the path
if let Some(adt) = impl_.self_ty(db).as_adt() {
description.push(MonikerDescriptor {
- name: adt.name(db),
+ name: adt.name(db).display(db).to_string(),
desc: MonikerDescriptorKind::Type,
});
}
if let Some(trait_) = impl_.trait_(db) {
description.push(MonikerDescriptor {
- name: trait_.name(db),
+ name: trait_.name(db).display(db).to_string(),
desc: MonikerDescriptorKind::Type,
});
}
@@ -173,7 +172,7 @@ pub(crate) fn def_to_moniker(
if let Definition::Field(it) = def {
description.push(MonikerDescriptor {
- name: it.parent_def(db).name(db),
+ name: it.parent_def(db).name(db).display(db).to_string(),
desc: MonikerDescriptorKind::Type,
});
}
@@ -191,48 +190,63 @@ pub(crate) fn def_to_moniker(
return None;
}
- MonikerDescriptor { name: local.name(db), desc: MonikerDescriptorKind::Parameter }
- }
- Definition::Macro(m) => {
- MonikerDescriptor { name: m.name(db), desc: MonikerDescriptorKind::Macro }
- }
- Definition::Function(f) => {
- MonikerDescriptor { name: f.name(db), desc: MonikerDescriptorKind::Method }
- }
- Definition::Variant(v) => {
- MonikerDescriptor { name: v.name(db), desc: MonikerDescriptorKind::Type }
- }
- Definition::Const(c) => {
- MonikerDescriptor { name: c.name(db)?, desc: MonikerDescriptorKind::Term }
- }
- Definition::Trait(trait_) => {
- MonikerDescriptor { name: trait_.name(db), desc: MonikerDescriptorKind::Type }
- }
- Definition::TraitAlias(ta) => {
- MonikerDescriptor { name: ta.name(db), desc: MonikerDescriptorKind::Type }
- }
- Definition::TypeAlias(ta) => {
- MonikerDescriptor { name: ta.name(db), desc: MonikerDescriptorKind::TypeParameter }
- }
- Definition::Module(m) => {
- MonikerDescriptor { name: m.name(db)?, desc: MonikerDescriptorKind::Namespace }
- }
- Definition::BuiltinType(b) => {
- MonikerDescriptor { name: b.name(), desc: MonikerDescriptorKind::Type }
+ MonikerDescriptor {
+ name: local.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Parameter,
+ }
}
+ Definition::Macro(m) => MonikerDescriptor {
+ name: m.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Macro,
+ },
+ Definition::Function(f) => MonikerDescriptor {
+ name: f.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Method,
+ },
+ Definition::Variant(v) => MonikerDescriptor {
+ name: v.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Type,
+ },
+ Definition::Const(c) => MonikerDescriptor {
+ name: c.name(db)?.display(db).to_string(),
+ desc: MonikerDescriptorKind::Term,
+ },
+ Definition::Trait(trait_) => MonikerDescriptor {
+ name: trait_.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Type,
+ },
+ Definition::TraitAlias(ta) => MonikerDescriptor {
+ name: ta.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Type,
+ },
+ Definition::TypeAlias(ta) => MonikerDescriptor {
+ name: ta.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::TypeParameter,
+ },
+ Definition::Module(m) => MonikerDescriptor {
+ name: m.name(db)?.display(db).to_string(),
+ desc: MonikerDescriptorKind::Namespace,
+ },
+ Definition::BuiltinType(b) => MonikerDescriptor {
+ name: b.name().display(db).to_string(),
+ desc: MonikerDescriptorKind::Type,
+ },
Definition::SelfType(imp) => MonikerDescriptor {
- name: imp.self_ty(db).as_adt()?.name(db),
+ name: imp.self_ty(db).as_adt()?.name(db).display(db).to_string(),
desc: MonikerDescriptorKind::Type,
},
- Definition::Field(it) => {
- MonikerDescriptor { name: it.name(db), desc: MonikerDescriptorKind::Term }
- }
- Definition::Adt(adt) => {
- MonikerDescriptor { name: adt.name(db), desc: MonikerDescriptorKind::Type }
- }
- Definition::Static(s) => {
- MonikerDescriptor { name: s.name(db), desc: MonikerDescriptorKind::Meta }
- }
+ Definition::Field(it) => MonikerDescriptor {
+ name: it.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Term,
+ },
+ Definition::Adt(adt) => MonikerDescriptor {
+ name: adt.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Type,
+ },
+ Definition::Static(s) => MonikerDescriptor {
+ name: s.name(db).display(db).to_string(),
+ desc: MonikerDescriptorKind::Meta,
+ },
};
description.push(name_desc);
@@ -245,11 +259,17 @@ pub(crate) fn def_to_moniker(
kind: if krate == from_crate { MonikerKind::Export } else { MonikerKind::Import },
package_information: {
let (name, repo, version) = match krate.origin(db) {
- CrateOrigin::CratesIo { repo, name } => (
+ CrateOrigin::Library { repo, name } => (name, repo, krate.version(db)),
+ CrateOrigin::Local { repo, name } => (
name.unwrap_or(krate.display_name(db)?.canonical_name().to_string()),
repo,
krate.version(db),
),
+ CrateOrigin::Rustc { name } => (
+ name.clone(),
+ Some("https://github.com/rust-lang/rust/".to_string()),
+ Some(format!("https://github.com/rust-lang/rust/compiler/{name}",)),
+ ),
CrateOrigin::Lang(lang) => (
krate.display_name(db)?.canonical_name().to_string(),
Some("https://github.com/rust-lang/rust/".to_string()),