-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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.
- Loading branch information
Showing
11 changed files
with
135 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
mod foo { | ||
use spam::*; //~ ERROR unresolved import `spam` [E0432] | ||
} | ||
|
||
fn main() { | ||
// Expect this to pass because the compiler knows there's a failed `*` import in `foo` that | ||
// might have caused it. | ||
foo::bar(); | ||
// FIXME: these two should *fail* because they can't be fixed by fixing the glob import in `foo` | ||
ham(); // should error but doesn't | ||
eggs(); // should error but doesn't | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
error[E0432]: unresolved import `spam` | ||
--> $DIR/import-from-missing-star-2.rs:2:9 | ||
| | ||
LL | use spam::*; | ||
| ^^^^ maybe a missing crate `spam`? | ||
| | ||
= help: consider adding `extern crate spam` to use the `spam` crate | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0432`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
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(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
error[E0432]: unresolved import `spam` | ||
--> $DIR/import-from-missing-star-3.rs:2:9 | ||
| | ||
LL | use spam::*; | ||
| ^^^^ maybe a missing crate `spam`? | ||
| | ||
= help: consider adding `extern crate spam` to use the `spam` crate | ||
|
||
error[E0432]: unresolved import `spam` | ||
--> $DIR/import-from-missing-star-3.rs:27:13 | ||
| | ||
LL | use spam::*; | ||
| ^^^^ maybe a missing crate `spam`? | ||
| | ||
= help: consider adding `extern crate spam` to use the `spam` crate | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0432`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
use spam::*; //~ ERROR unresolved import `spam` [E0432] | ||
|
||
fn main() { | ||
// Expect these to pass because the compiler knows there's a failed `*` import that might have | ||
// caused it. | ||
ham(); | ||
eggs(); | ||
// Even this case, as we might have expected `spam::foo` to exist. | ||
foo::bar(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
error[E0432]: unresolved import `spam` | ||
--> $DIR/import-from-missing-star.rs:1:5 | ||
| | ||
LL | use spam::*; | ||
| ^^^^ maybe a missing crate `spam`? | ||
| | ||
= help: consider adding `extern crate spam` to use the `spam` crate | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0432`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters