37c54db477
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.
44 lines
1.2 KiB
Rust
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();
|
|
}
|