Skip to content

Commit 6eea064

Browse files
author
Jonas Schievink
committed
Give ExternCrate a Name, not a ModPath
1 parent d84c18d commit 6eea064

File tree

5 files changed

+11
-18
lines changed

5 files changed

+11
-18
lines changed

crates/hir_def/src/item_tree.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ pub struct Import {
491491

492492
#[derive(Debug, Clone, Eq, PartialEq)]
493493
pub struct ExternCrate {
494-
pub path: ModPath,
494+
pub name: Name,
495495
pub alias: Option<ImportAlias>,
496496
pub visibility: RawVisibilityId,
497497
/// Whether this is a `#[macro_use] extern crate ...`.

crates/hir_def/src/item_tree/lower.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ impl Ctx {
503503
&mut self,
504504
extern_crate: &ast::ExternCrate,
505505
) -> Option<FileItemTreeId<ExternCrate>> {
506-
let path = ModPath::from_name_ref(&extern_crate.name_ref()?);
506+
let name = extern_crate.name_ref()?.as_name();
507507
let alias = extern_crate.rename().map(|a| {
508508
a.name().map(|it| it.as_name()).map_or(ImportAlias::Underscore, ImportAlias::Alias)
509509
});
@@ -512,7 +512,7 @@ impl Ctx {
512512
// FIXME: cfg_attr
513513
let is_macro_use = extern_crate.has_atom_attr("macro_use");
514514

515-
let res = ExternCrate { path, alias, visibility, is_macro_use, ast_id };
515+
let res = ExternCrate { name, alias, visibility, is_macro_use, ast_id };
516516
Some(id(self.data().extern_crates.alloc(res)))
517517
}
518518

crates/hir_def/src/item_tree/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ fn smoke() {
232232
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("attr_on_use"))] }, input: None }]) }]
233233
Import { path: ModPath { kind: Plain, segments: [Name(Text("b"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_glob: true, is_prelude: false, ast_id: FileAstId::<syntax::ast::generated::nodes::Use>(0), index: 1 }
234234
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("ext_crate"))] }, input: None }]) }]
235-
ExternCrate { path: ModPath { kind: Plain, segments: [Name(Text("krate"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_macro_use: false, ast_id: FileAstId::<syntax::ast::generated::nodes::ExternCrate>(1) }
235+
ExternCrate { name: Name(Text("krate")), alias: None, visibility: RawVisibilityId("pub(self)"), is_macro_use: false, ast_id: FileAstId::<syntax::ast::generated::nodes::ExternCrate>(1) }
236236
#[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("on_trait"))] }, input: None }]) }]
237237
Trait { name: Name(Text("Tr")), visibility: RawVisibilityId("pub(self)"), generic_params: GenericParamsId(0), auto: false, items: [TypeAlias(Idx::<TypeAlias>(0)), Const(Idx::<Const>(0)), Function(Idx::<Function>(0)), Function(Idx::<Function>(1))], ast_id: FileAstId::<syntax::ast::generated::nodes::Trait>(2) }
238238
> #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("assoc_ty"))] }, input: None }]) }]

crates/hir_def/src/nameres/collector.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
//! `DefCollector::collect` contains the fixed-point iteration loop which
44
//! resolves imports and expands macros.
55
6+
use std::iter;
7+
68
use base_db::{CrateId, FileId, ProcMacroId};
79
use cfg::CfgOptions;
810
use hir_expand::InFile;
@@ -149,7 +151,7 @@ impl Import {
149151
let it = &tree[id.value];
150152
let visibility = &tree[it.visibility];
151153
Self {
152-
path: it.path.clone(),
154+
path: ModPath::from_segments(PathKind::Plain, iter::once(it.name.clone())),
153155
alias: it.alias.clone(),
154156
visibility: visibility.clone(),
155157
is_glob: false,
@@ -356,20 +358,15 @@ impl DefCollector<'_> {
356358
fn import_macros_from_extern_crate(
357359
&mut self,
358360
current_module_id: LocalModuleId,
359-
import: &item_tree::ExternCrate,
361+
extern_crate: &item_tree::ExternCrate,
360362
) {
361363
log::debug!(
362364
"importing macros from extern crate: {:?} ({:?})",
363-
import,
365+
extern_crate,
364366
self.def_map.edition,
365367
);
366368

367-
let res = self.def_map.resolve_name_in_extern_prelude(
368-
&import
369-
.path
370-
.as_ident()
371-
.expect("extern crate should have been desugared to one-element path"),
372-
);
369+
let res = self.def_map.resolve_name_in_extern_prelude(&extern_crate.name);
373370

374371
if let Some(ModuleDefId::ModuleId(m)) = res.take_types() {
375372
mark::hit!(macro_rules_from_other_crates_are_visible_with_macro_use);
@@ -802,7 +799,7 @@ impl DefCollector<'_> {
802799
let item_tree = self.db.item_tree(krate.file_id);
803800
let extern_crate = &item_tree[krate.value];
804801

805-
diagnosed_extern_crates.insert(extern_crate.path.segments[0].clone());
802+
diagnosed_extern_crates.insert(extern_crate.name.clone());
806803

807804
self.def_map.diagnostics.push(DefDiagnostic::unresolved_extern_crate(
808805
directive.module_id,

crates/hir_def/src/path.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@ impl ModPath {
5656
ModPath { kind, segments }
5757
}
5858

59-
pub(crate) fn from_name_ref(name_ref: &ast::NameRef) -> ModPath {
60-
name_ref.as_name().into()
61-
}
62-
6359
/// Converts an `tt::Ident` into a single-identifier `Path`.
6460
pub(crate) fn from_tt_ident(ident: &tt::Ident) -> ModPath {
6561
ident.as_name().into()

0 commit comments

Comments
 (0)