Skip to content

Commit 24cf957

Browse files
bors[bot]Veykril
andauthored
Merge #11951
11951: minor: Simplify r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2 parents 55d7415 + 7f3572f commit 24cf957

File tree

7 files changed

+54
-35
lines changed

7 files changed

+54
-35
lines changed

crates/base_db/src/input.rs

+27
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,33 @@ pub enum LangCrateOrigin {
135135
Other,
136136
}
137137

138+
impl From<&str> for LangCrateOrigin {
139+
fn from(s: &str) -> Self {
140+
match s {
141+
"alloc" => LangCrateOrigin::Alloc,
142+
"core" => LangCrateOrigin::Core,
143+
"proc-macro" => LangCrateOrigin::ProcMacro,
144+
"std" => LangCrateOrigin::Std,
145+
"test" => LangCrateOrigin::Test,
146+
_ => LangCrateOrigin::Other,
147+
}
148+
}
149+
}
150+
151+
impl fmt::Display for LangCrateOrigin {
152+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
153+
let text = match self {
154+
LangCrateOrigin::Alloc => "alloc",
155+
LangCrateOrigin::Core => "core",
156+
LangCrateOrigin::ProcMacro => "proc_macro",
157+
LangCrateOrigin::Std => "std",
158+
LangCrateOrigin::Test => "test",
159+
LangCrateOrigin::Other => "other",
160+
};
161+
f.write_str(text)
162+
}
163+
}
164+
138165
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
139166
pub struct CrateDisplayName {
140167
// The name we use to display various paths (with `_`).

crates/ide/src/doc_links.rs

+15-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use url::Url;
1212

1313
use hir::{db::HirDatabase, Adt, AsAssocItem, AssocItem, AssocItemContainer, Crate, HasAttrs};
1414
use ide_db::{
15+
base_db::{CrateOrigin, LangCrateOrigin, SourceDatabase},
1516
defs::{Definition, NameClass, NameRefClass},
1617
helpers::pick_best_token,
1718
RootDatabase,
@@ -293,7 +294,7 @@ fn get_doc_link(db: &RootDatabase, def: Definition) -> Option<String> {
293294
let (target, file, frag) = filename_and_frag_for_def(db, def)?;
294295

295296
let krate = crate_of_def(db, target)?;
296-
let mut url = get_doc_base_url(db, &krate)?;
297+
let mut url = get_doc_base_url(db, krate)?;
297298

298299
if let Some(path) = mod_path_of_def(db, target) {
299300
url = url.join(&path).ok()?;
@@ -315,7 +316,7 @@ fn rewrite_intra_doc_link(
315316

316317
let resolved = resolve_doc_path_for_def(db, def, link, ns)?;
317318
let krate = crate_of_def(db, resolved)?;
318-
let mut url = get_doc_base_url(db, &krate)?;
319+
let mut url = get_doc_base_url(db, krate)?;
319320

320321
let (_, file, frag) = filename_and_frag_for_def(db, resolved)?;
321322
if let Some(path) = mod_path_of_def(db, resolved) {
@@ -335,7 +336,7 @@ fn rewrite_url_link(db: &RootDatabase, def: Definition, target: &str) -> Option<
335336
}
336337

337338
let krate = crate_of_def(db, def)?;
338-
let mut url = get_doc_base_url(db, &krate)?;
339+
let mut url = get_doc_base_url(db, krate)?;
339340
let (def, file, frag) = filename_and_frag_for_def(db, def)?;
340341

341342
if let Some(path) = mod_path_of_def(db, def) {
@@ -406,13 +407,20 @@ fn map_links<'e>(
406407
/// https://doc.rust-lang.org/std/iter/trait.Iterator.html#tymethod.next
407408
/// ^^^^^^^^^^^^^^^^^^^^^^^^^^
408409
/// ```
409-
fn get_doc_base_url(db: &RootDatabase, krate: &Crate) -> Option<Url> {
410+
fn get_doc_base_url(db: &RootDatabase, krate: Crate) -> Option<Url> {
410411
let display_name = krate.display_name(db)?;
411-
let base = match &**display_name.crate_name() {
412+
413+
let base = match db.crate_graph()[krate.into()].origin {
412414
// std and co do not specify `html_root_url` any longer so we gotta handwrite this ourself.
413415
// FIXME: Use the toolchains channel instead of nightly
414-
name @ ("core" | "std" | "alloc" | "proc_macro" | "test") => {
415-
format!("https://doc.rust-lang.org/nightly/{}", name)
416+
CrateOrigin::Lang(
417+
origin @ (LangCrateOrigin::Alloc
418+
| LangCrateOrigin::Core
419+
| LangCrateOrigin::ProcMacro
420+
| LangCrateOrigin::Std
421+
| LangCrateOrigin::Test),
422+
) => {
423+
format!("https://doc.rust-lang.org/nightly/{origin}")
416424
}
417425
_ => {
418426
krate.get_html_root_url(db).or_else(|| {

crates/ide/src/hover/tests.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4531,7 +4531,7 @@ foo_macro!(
45314531
45324532
---
45334533
4534-
Doc comment for [`Foo`](https://doc.rust-lang.org/nightly/test/struct.Foo.html)
4534+
Doc comment for [`Foo`](https://docs.rs/test/*/test/struct.Foo.html)
45354535
"#]],
45364536
);
45374537
}
@@ -4556,7 +4556,7 @@ pub struct Foo;
45564556
45574557
---
45584558
4559-
Doc comment for [`Foo`](https://doc.rust-lang.org/nightly/test/struct.Foo.html)
4559+
Doc comment for [`Foo`](https://docs.rs/test/*/test/struct.Foo.html)
45604560
"#]],
45614561
);
45624562
}

crates/ide/src/moniker.rs

+5-10
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,12 @@ pub(crate) fn def_to_moniker(
153153
CrateOrigin::CratesIo { repo } => (repo?, krate.version(db)?),
154154
CrateOrigin::Lang(lang) => (
155155
"https://github.com/rust-lang/rust/".to_string(),
156-
format!(
157-
"https://github.com/rust-lang/rust/library/{}",
158-
match lang {
159-
LangCrateOrigin::Alloc => "alloc",
160-
LangCrateOrigin::Core => "core",
161-
LangCrateOrigin::ProcMacro => "proc_macro",
162-
LangCrateOrigin::Std => "std",
163-
LangCrateOrigin::Test => "test",
164-
LangCrateOrigin::Other => "",
156+
match lang {
157+
LangCrateOrigin::Other => {
158+
"https://github.com/rust-lang/rust/library/".into()
165159
}
166-
),
160+
lang => format!("https://github.com/rust-lang/rust/library/{lang}",),
161+
},
167162
),
168163
};
169164
PackageInformation { name, repo, version }

crates/ide_db/src/famous_defs.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -158,13 +158,9 @@ impl FamousDefs<'_, '_> {
158158
let mut path = path.split(':');
159159
let trait_ = path.next_back()?;
160160
let lang_crate = path.next()?;
161-
let lang_crate = match lang_crate {
162-
"core" => LangCrateOrigin::Core,
163-
"alloc" => LangCrateOrigin::Alloc,
164-
"test" => LangCrateOrigin::Test,
165-
"proc_macro" => LangCrateOrigin::ProcMacro,
166-
"std" => LangCrateOrigin::Std,
167-
_ => return None,
161+
let lang_crate = match LangCrateOrigin::from(lang_crate) {
162+
LangCrateOrigin::Other => return None,
163+
lang_crate => lang_crate,
168164
};
169165
let std_crate = self.find_lang_crate(lang_crate)?;
170166
let mut module = std_crate.root_module(db);

crates/project_model/src/tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ fn rust_project_hello_world_project_model() {
13681368
],
13691369
proc_macro: [],
13701370
origin: Lang(
1371-
ProcMacro,
1371+
Other,
13721372
),
13731373
is_proc_macro: false,
13741374
},

crates/project_model/src/workspace.rs

+1-8
Original file line numberDiff line numberDiff line change
@@ -908,14 +908,7 @@ fn sysroot_to_crate_graph(
908908
env,
909909
proc_macro,
910910
false,
911-
CrateOrigin::Lang(match &*sysroot[krate].name {
912-
"alloc" => LangCrateOrigin::Alloc,
913-
"core" => LangCrateOrigin::Core,
914-
"proc_macro" => LangCrateOrigin::ProcMacro,
915-
"std" => LangCrateOrigin::Std,
916-
"test" => LangCrateOrigin::Test,
917-
_ => LangCrateOrigin::Other,
918-
}),
911+
CrateOrigin::Lang(LangCrateOrigin::from(&*sysroot[krate].name)),
919912
);
920913
Some((krate, crate_id))
921914
})

0 commit comments

Comments
 (0)