rust/tests/ui/imports/import-from-missing-star-3.rs
Esteban Küber 37c54db477 Silence some resolve errors when there have been glob import errors
When encountering `use foo::*;` where `foo` fails to be found, and we later
encounter resolution errors, we silence those later errors.

A single case of the above, for an *existing* import on a big codebase would
otherwise have a huge number of knock-down spurious errors.

Ideally, instead of a global flag to silence all subsequent resolve errors,
we'd want to introduce an unameable binding in the appropriate rib as a
sentinel when there's a failed glob import, so when we encounter a resolve
error we can search for that sentinel and if found, and only then, silence
that error. The current approach is just a quick proof of concept to
iterate over.

Partially address #96799.
2024-05-28 14:45:21 +00:00

44 lines
1.2 KiB
Rust

mod foo {
use spam::*; //~ ERROR unresolved import `spam` [E0432]
fn x() {
// Expect these to pass because the compiler knows there's a failed `*` import that might
// fix it.
eggs();
foo::bar();
}
}
mod bar {
fn z() {}
fn x() {
// Expect these to pass because the compiler knows there's a failed `*` import that might
// fix it.
foo::bar();
z();
// FIXME: should error but doesn't because as soon as there's a single glob import error, we
// silence all resolve errors.
eggs();
}
}
mod baz {
fn x() {
use spam::*; //~ ERROR unresolved import `spam` [E0432]
fn qux() {}
qux();
// Expect this to pass because the compiler knows there's a local failed `*` import that
// might have caused it.
eggs();
// Expect this to pass because the compiler knows there's a failed `*` import in `foo` that
// might have caused it.
foo::bar();
}
}
fn main() {
// FIXME: should error but doesn't because as soon as there's a single glob import error, we
// silence all resolve errors.
ham();
}