Fix issues in suggesting importing extern crate paths
This commit is contained in:
parent
2ae1bb6711
commit
3bcef2dc1b
@ -1290,10 +1290,20 @@ fn lookup_import_candidates_from_module<FilterFn>(
|
|||||||
let mut path_segments = path_segments.clone();
|
let mut path_segments = path_segments.clone();
|
||||||
path_segments.push(ast::PathSegment::from_ident(ident));
|
path_segments.push(ast::PathSegment::from_ident(ident));
|
||||||
|
|
||||||
|
let alias_import = if let NameBindingKind::Import { import, .. } =
|
||||||
|
name_binding.kind
|
||||||
|
&& let ImportKind::ExternCrate { source: Some(_), .. } = import.kind
|
||||||
|
&& import.parent_scope.expansion == parent_scope.expansion
|
||||||
|
{
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
let is_extern_crate_that_also_appears_in_prelude =
|
let is_extern_crate_that_also_appears_in_prelude =
|
||||||
name_binding.is_extern_crate() && lookup_ident.span.at_least_rust_2018();
|
name_binding.is_extern_crate() && lookup_ident.span.at_least_rust_2018();
|
||||||
|
|
||||||
if !is_extern_crate_that_also_appears_in_prelude {
|
if !is_extern_crate_that_also_appears_in_prelude || alias_import {
|
||||||
// add the module to the lookup
|
// add the module to the lookup
|
||||||
if seen_modules.insert(module.def_id()) {
|
if seen_modules.insert(module.def_id()) {
|
||||||
if via_import { &mut worklist_via_import } else { &mut worklist }
|
if via_import { &mut worklist_via_import } else { &mut worklist }
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
pub struct Foo<T>(pub core::ptr::NonNull<T>);
|
@ -0,0 +1,14 @@
|
|||||||
|
error[E0412]: cannot find type `Foo` in this scope
|
||||||
|
--> $DIR/import-alias-issue-121168.rs:11:12
|
||||||
|
|
|
||||||
|
LL | let _: Foo<i32> = todo!();
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
|
||||||
|
help: consider importing this struct
|
||||||
|
|
|
||||||
|
LL + use nice_crate_name::Foo;
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0412`.
|
@ -0,0 +1,16 @@
|
|||||||
|
error[E0412]: cannot find type `Foo` in this scope
|
||||||
|
--> $DIR/import-alias-issue-121168.rs:11:12
|
||||||
|
|
|
||||||
|
LL | let _: Foo<i32> = todo!();
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
|
||||||
|
help: consider importing one of these items
|
||||||
|
|
|
||||||
|
LL + use crate::nice_crate_name::Foo;
|
||||||
|
|
|
||||||
|
LL + use import_alias_issue_121168_extern::Foo;
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0412`.
|
@ -0,0 +1,16 @@
|
|||||||
|
error[E0412]: cannot find type `Foo` in this scope
|
||||||
|
--> $DIR/import-alias-issue-121168.rs:11:12
|
||||||
|
|
|
||||||
|
LL | let _: Foo<i32> = todo!();
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
|
||||||
|
help: consider importing one of these items
|
||||||
|
|
|
||||||
|
LL + use crate::nice_crate_name::Foo;
|
||||||
|
|
|
||||||
|
LL + use import_alias_issue_121168_extern::Foo;
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0412`.
|
14
tests/ui/imports/import-alias-issue-121168.rs
Normal file
14
tests/ui/imports/import-alias-issue-121168.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//@ revisions: edition2015 edition2018 edition2021
|
||||||
|
//@ [edition2015] edition:2015
|
||||||
|
//@ [edition2018] edition:2018
|
||||||
|
//@ [edition2021] edition:2021
|
||||||
|
//@ compile-flags: --extern import_alias_issue_121168_extern
|
||||||
|
//@ aux-build: import-alias-issue-121168-extern.rs
|
||||||
|
|
||||||
|
extern crate import_alias_issue_121168_extern as nice_crate_name;
|
||||||
|
|
||||||
|
fn use_foo_from_another_crate_without_importing_it_first() {
|
||||||
|
let _: Foo<i32> = todo!(); //~ ERROR cannot find type `Foo` in this scope
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Reference in New Issue
Block a user