Skip to content

Commit 2a978e1

Browse files
committed
Auto merge of rust-lang#12328 - Veykril:simplify, r=Veykril
minor: Simplify
2 parents c8d9a2d + 88e297e commit 2a978e1

File tree

6 files changed

+20
-25
lines changed

6 files changed

+20
-25
lines changed

crates/base-db/src/fixture.rs

+1
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,7 @@ fn parse_crate(crate_str: String) -> (String, CrateOrigin, Option<String>) {
408408
} else {
409409
let crate_origin = match &*crate_str {
410410
"std" => CrateOrigin::Lang(LangCrateOrigin::Std),
411+
"core" => CrateOrigin::Lang(LangCrateOrigin::Core),
411412
_ => CrateOrigin::CratesIo { repo: None },
412413
};
413414
(crate_str, crate_origin, None)

crates/hir-def/src/macro_expansion_tests/builtin_derive_macro.rs

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ fn test_copy_expand_in_core() {
2525
cov_mark::check!(test_copy_expand_in_core);
2626
check(
2727
r#"
28+
//- /lib.rs crate:core
2829
#[rustc_builtin_macro]
2930
macro derive {}
3031
#[rustc_builtin_macro]

crates/hir-expand/src/builtin_derive_macro.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! Builtin derives.
22
3+
use base_db::{CrateOrigin, LangCrateOrigin};
34
use tracing::debug;
45

56
use syntax::{
@@ -160,14 +161,11 @@ fn find_builtin_crate(db: &dyn AstDatabase, id: MacroCallId) -> tt::TokenTree {
160161
let cg = db.crate_graph();
161162
let krate = db.lookup_intern_macro_call(id).krate;
162163

163-
// XXX
164-
// All crates except core itself should have a dependency on core,
165-
// We detect `core` by seeing whether it doesn't have such a dependency.
166-
let tt = if cg[krate].dependencies.iter().any(|dep| &*dep.name == "core") {
167-
quote! { core }
168-
} else {
164+
let tt = if matches!(cg[krate].origin, CrateOrigin::Lang(LangCrateOrigin::Core)) {
169165
cov_mark::hit!(test_copy_expand_in_core);
170166
quote! { crate }
167+
} else {
168+
quote! { core }
171169
};
172170

173171
tt.token_trees[0].clone()

crates/ide-db/src/defs.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
use arrayvec::ArrayVec;
99
use hir::{
10-
Adt, AsAssocItem, AssocItem, BuiltinAttr, BuiltinType, Const, Field, Function, GenericParam,
11-
HasVisibility, Impl, ItemInNs, Label, Local, Macro, Module, ModuleDef, Name, PathResolution,
12-
Semantics, Static, ToolModule, Trait, TypeAlias, Variant, Visibility,
10+
Adt, AsAssocItem, AssocItem, BuiltinAttr, BuiltinType, Const, Crate, Field, Function,
11+
GenericParam, HasVisibility, Impl, ItemInNs, Label, Local, Macro, Module, ModuleDef, Name,
12+
PathResolution, Semantics, Static, ToolModule, Trait, TypeAlias, Variant, Visibility,
1313
};
1414
use stdx::impl_from;
1515
use syntax::{
@@ -46,6 +46,13 @@ impl Definition {
4646
self.module(db).map(|it| it.path_to_root(db).into_iter().rev())
4747
}
4848

49+
pub fn krate(&self, db: &RootDatabase) -> Option<Crate> {
50+
Some(match self {
51+
Definition::Module(m) => m.krate(),
52+
_ => self.module(db)?.krate(),
53+
})
54+
}
55+
4956
pub fn module(&self, db: &RootDatabase) -> Option<Module> {
5057
let module = match self {
5158
Definition::Macro(it) => it.module(db),

crates/ide/src/doc_links.rs

+3-12
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ fn broken_link_clone_cb<'a>(link: BrokenLink<'a>) -> Option<(CowStr<'a>, CowStr<
293293
fn get_doc_link(db: &RootDatabase, def: Definition) -> Option<String> {
294294
let (target, file, frag) = filename_and_frag_for_def(db, def)?;
295295

296-
let krate = crate_of_def(db, target)?;
296+
let krate = target.krate(db)?;
297297
let mut url = get_doc_base_url(db, krate)?;
298298

299299
if let Some(path) = mod_path_of_def(db, target) {
@@ -315,7 +315,7 @@ fn rewrite_intra_doc_link(
315315
let (link, ns) = parse_intra_doc_link(target);
316316

317317
let resolved = resolve_doc_path_for_def(db, def, link, ns)?;
318-
let krate = crate_of_def(db, resolved)?;
318+
let krate = resolved.krate(db)?;
319319
let mut url = get_doc_base_url(db, krate)?;
320320

321321
let (_, file, frag) = filename_and_frag_for_def(db, resolved)?;
@@ -335,7 +335,7 @@ fn rewrite_url_link(db: &RootDatabase, def: Definition, target: &str) -> Option<
335335
return None;
336336
}
337337

338-
let krate = crate_of_def(db, def)?;
338+
let krate = def.krate(db)?;
339339
let mut url = get_doc_base_url(db, krate)?;
340340
let (def, file, frag) = filename_and_frag_for_def(db, def)?;
341341

@@ -348,15 +348,6 @@ fn rewrite_url_link(db: &RootDatabase, def: Definition, target: &str) -> Option<
348348
url.join(target).ok().map(Into::into)
349349
}
350350

351-
fn crate_of_def(db: &RootDatabase, def: Definition) -> Option<Crate> {
352-
let krate = match def {
353-
// Definition::module gives back the parent module, we don't want that as it fails for root modules
354-
Definition::Module(module) => module.krate(),
355-
def => def.module(db)?.krate(),
356-
};
357-
Some(krate)
358-
}
359-
360351
fn mod_path_of_def(db: &RootDatabase, def: Definition) -> Option<String> {
361352
def.canonical_module_path(db).map(|it| {
362353
let mut path = String::new();

crates/ide/src/syntax_highlighting/highlight.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -466,10 +466,7 @@ fn highlight_def(sema: &Semantics<RootDatabase>, krate: hir::Crate, def: Definit
466466
Definition::ToolModule(_) => Highlight::new(HlTag::Symbol(SymbolKind::ToolModule)),
467467
};
468468

469-
let def_crate = def.module(db).map(hir::Module::krate).or_else(|| match def {
470-
Definition::Module(module) => Some(module.krate()),
471-
_ => None,
472-
});
469+
let def_crate = def.krate(db);
473470
let is_from_other_crate = def_crate != Some(krate);
474471
let is_from_builtin_crate = def_crate.map_or(false, |def_crate| def_crate.is_builtin(db));
475472
let is_builtin_type = matches!(def, Definition::BuiltinType(_));

0 commit comments

Comments
 (0)