mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 14:21:44 +00:00
ide: Generate monikers for local crates.
This commit is contained in:
parent
19efa0b110
commit
8039a07a5e
3 changed files with 56 additions and 18 deletions
|
@ -73,8 +73,8 @@ impl MonikerResult {
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct PackageInformation {
|
pub struct PackageInformation {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub repo: String,
|
pub repo: Option<String>,
|
||||||
pub version: String,
|
pub version: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn crate_for_file(db: &RootDatabase, file_id: FileId) -> Option<Crate> {
|
pub(crate) fn crate_for_file(db: &RootDatabase, file_id: FileId) -> Option<Crate> {
|
||||||
|
@ -256,18 +256,18 @@ pub(crate) fn def_to_moniker(
|
||||||
let (name, repo, version) = match krate.origin(db) {
|
let (name, repo, version) = match krate.origin(db) {
|
||||||
CrateOrigin::CratesIo { repo, name } => (
|
CrateOrigin::CratesIo { repo, name } => (
|
||||||
name.unwrap_or(krate.display_name(db)?.canonical_name().to_string()),
|
name.unwrap_or(krate.display_name(db)?.canonical_name().to_string()),
|
||||||
repo?,
|
repo,
|
||||||
krate.version(db)?,
|
krate.version(db),
|
||||||
),
|
),
|
||||||
CrateOrigin::Lang(lang) => (
|
CrateOrigin::Lang(lang) => (
|
||||||
krate.display_name(db)?.canonical_name().to_string(),
|
krate.display_name(db)?.canonical_name().to_string(),
|
||||||
"https://github.com/rust-lang/rust/".to_string(),
|
Some("https://github.com/rust-lang/rust/".to_string()),
|
||||||
match lang {
|
Some(match lang {
|
||||||
LangCrateOrigin::Other => {
|
LangCrateOrigin::Other => {
|
||||||
"https://github.com/rust-lang/rust/library/".into()
|
"https://github.com/rust-lang/rust/library/".into()
|
||||||
}
|
}
|
||||||
lang => format!("https://github.com/rust-lang/rust/library/{lang}",),
|
lang => format!("https://github.com/rust-lang/rust/library/{lang}",),
|
||||||
},
|
}),
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
PackageInformation { name, repo, version }
|
PackageInformation { name, repo, version }
|
||||||
|
@ -315,7 +315,7 @@ pub mod module {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
"foo::module::func",
|
"foo::module::func",
|
||||||
r#"PackageInformation { name: "foo", repo: "https://a.b/foo.git", version: "0.1.0" }"#,
|
r#"PackageInformation { name: "foo", repo: Some("https://a.b/foo.git"), version: Some("0.1.0") }"#,
|
||||||
MonikerKind::Import,
|
MonikerKind::Import,
|
||||||
);
|
);
|
||||||
check_moniker(
|
check_moniker(
|
||||||
|
@ -331,7 +331,7 @@ pub mod module {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
"foo::module::func",
|
"foo::module::func",
|
||||||
r#"PackageInformation { name: "foo", repo: "https://a.b/foo.git", version: "0.1.0" }"#,
|
r#"PackageInformation { name: "foo", repo: Some("https://a.b/foo.git"), version: Some("0.1.0") }"#,
|
||||||
MonikerKind::Export,
|
MonikerKind::Export,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -348,7 +348,7 @@ pub mod module {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
"foo::module::MyTrait::func",
|
"foo::module::MyTrait::func",
|
||||||
r#"PackageInformation { name: "foo", repo: "https://a.b/foo.git", version: "0.1.0" }"#,
|
r#"PackageInformation { name: "foo", repo: Some("https://a.b/foo.git"), version: Some("0.1.0") }"#,
|
||||||
MonikerKind::Export,
|
MonikerKind::Export,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -365,7 +365,7 @@ pub mod module {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
"foo::module::MyTrait::MY_CONST",
|
"foo::module::MyTrait::MY_CONST",
|
||||||
r#"PackageInformation { name: "foo", repo: "https://a.b/foo.git", version: "0.1.0" }"#,
|
r#"PackageInformation { name: "foo", repo: Some("https://a.b/foo.git"), version: Some("0.1.0") }"#,
|
||||||
MonikerKind::Export,
|
MonikerKind::Export,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,7 @@ pub mod module {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
"foo::module::MyTrait::MyType",
|
"foo::module::MyTrait::MyType",
|
||||||
r#"PackageInformation { name: "foo", repo: "https://a.b/foo.git", version: "0.1.0" }"#,
|
r#"PackageInformation { name: "foo", repo: Some("https://a.b/foo.git"), version: Some("0.1.0") }"#,
|
||||||
MonikerKind::Export,
|
MonikerKind::Export,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -405,7 +405,7 @@ pub mod module {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
"foo::module::MyStruct::MyTrait::func",
|
"foo::module::MyStruct::MyTrait::func",
|
||||||
r#"PackageInformation { name: "foo", repo: "https://a.b/foo.git", version: "0.1.0" }"#,
|
r#"PackageInformation { name: "foo", repo: Some("https://a.b/foo.git"), version: Some("0.1.0") }"#,
|
||||||
MonikerKind::Export,
|
MonikerKind::Export,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -425,7 +425,7 @@ pub struct St {
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
"foo::St::a",
|
"foo::St::a",
|
||||||
r#"PackageInformation { name: "foo", repo: "https://a.b/foo.git", version: "0.1.0" }"#,
|
r#"PackageInformation { name: "foo", repo: Some("https://a.b/foo.git"), version: Some("0.1.0") }"#,
|
||||||
MonikerKind::Import,
|
MonikerKind::Import,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,12 +106,12 @@ impl LsifManager<'_> {
|
||||||
manager: "cargo".to_string(),
|
manager: "cargo".to_string(),
|
||||||
uri: None,
|
uri: None,
|
||||||
content: None,
|
content: None,
|
||||||
repository: Some(lsif::Repository {
|
repository: pi.repo.map(|url| lsif::Repository {
|
||||||
url: pi.repo,
|
url,
|
||||||
r#type: "git".to_string(),
|
r#type: "git".to_string(),
|
||||||
commit_id: None,
|
commit_id: None,
|
||||||
}),
|
}),
|
||||||
version: Some(pi.version),
|
version: pi.version,
|
||||||
}));
|
}));
|
||||||
self.package_map.insert(package_information, result_set_id);
|
self.package_map.insert(package_information, result_set_id);
|
||||||
result_set_id
|
result_set_id
|
||||||
|
|
|
@ -231,7 +231,7 @@ fn token_to_symbol(token: &TokenStaticData) -> Option<scip_types::Symbol> {
|
||||||
package: Some(scip_types::Package {
|
package: Some(scip_types::Package {
|
||||||
manager: "cargo".to_string(),
|
manager: "cargo".to_string(),
|
||||||
name: package_name,
|
name: package_name,
|
||||||
version,
|
version: version.unwrap_or_else(|| ".".to_string()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.into(),
|
.into(),
|
||||||
|
@ -415,4 +415,42 @@ pub mod module {
|
||||||
"",
|
"",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn global_symbol_for_pub_struct() {
|
||||||
|
check_symbol(
|
||||||
|
r#"
|
||||||
|
//- /lib.rs crate:main
|
||||||
|
mod foo;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _bar = foo::Bar { i: 0 };
|
||||||
|
}
|
||||||
|
//- /foo.rs
|
||||||
|
pub struct Bar$0 {
|
||||||
|
pub i: i32,
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
"rust-analyzer cargo main . foo/Bar#",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn global_symbol_for_pub_struct_reference() {
|
||||||
|
check_symbol(
|
||||||
|
r#"
|
||||||
|
//- /lib.rs crate:main
|
||||||
|
mod foo;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _bar = foo::Bar$0 { i: 0 };
|
||||||
|
}
|
||||||
|
//- /foo.rs
|
||||||
|
pub struct Bar {
|
||||||
|
pub i: i32,
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
"rust-analyzer cargo main . foo/Bar#",
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue