提交 139d1092 编写于 作者: V Vadim Petrochenkov

Add a couple more tests + address review comments

上级 59464709
......@@ -192,6 +192,7 @@ fn resolution(&self, module: Module<'a>, ident: Ident, ns: Namespace)
ident.name == keywords::SelfValue.name() {
// FIXME: Implement these with renaming requirements so that e.g.
// `use super;` doesn't work, but `use super as name;` does.
// Fall through here to get an error from `early_resolve_...`.
}
}
......@@ -940,7 +941,12 @@ fn finalize_import(
}
}
Err(..) => {
assert!(result[ns].get().is_err());
// FIXME: This assert may fire if public glob is later shadowed by a private
// single import (see test `issue-55884-2.rs`). In theory single imports should
// always block globs, even if they are not yet resolved, so that this kind of
// self-inconsistent resolution never happens.
// Reenable the assert when the issue is fixed.
// assert!(result[ns].get().is_err());
}
}
});
......
mod m1 {
pub fn f() {}
}
mod m2 {
pub fn f(_: u8) {}
}
pub use m1::*;
pub use m2::*;
// aux-build:glob-conflict.rs
extern crate glob_conflict;
fn main() {
glob_conflict::f(); //~ ERROR cannot find function `f` in module `glob_conflict`
}
error[E0425]: cannot find function `f` in module `glob_conflict`
--> $DIR/glob-conflict-cross-crate.rs:6:20
|
LL | glob_conflict::f(); //~ ERROR cannot find function `f` in module `glob_conflict`
| ^ not found in `glob_conflict`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0425`.
mod m {
mod m1 {
pub struct S {}
}
mod m2 {
// Note this derive, it makes this struct macro-expanded,
// so it doesn't appear in time to participate in the initial resolution of `use m::S`,
// only in the later validation pass.
#[derive(Default)]
pub struct S {}
}
// Create a glob vs glob ambiguity
pub use self::m1::*;
pub use self::m2::*;
}
fn main() {
use m::S; //~ ERROR `S` is ambiguous
let s = S {};
}
error[E0659]: `S` is ambiguous (glob import vs glob import in the same module)
--> $DIR/issue-55884-1.rs:19:12
|
LL | use m::S; //~ ERROR `S` is ambiguous
| ^ ambiguous name
|
note: `S` could refer to the struct imported here
--> $DIR/issue-55884-1.rs:14:13
|
LL | pub use self::m1::*;
| ^^^^^^^^^^^
= help: consider adding an explicit import of `S` to disambiguate
note: `S` could also refer to the struct imported here
--> $DIR/issue-55884-1.rs:15:13
|
LL | pub use self::m2::*;
| ^^^^^^^^^^^
= help: consider adding an explicit import of `S` to disambiguate
error: aborting due to previous error
For more information about this error, try `rustc --explain E0659`.
mod options {
pub struct ParseOptions {}
}
mod parser {
pub use options::*;
// Private single import shadows public glob import, but arrives too late for initial
// resolution of `use parser::ParseOptions` because it depends on that resolution itself.
use ParseOptions;
}
pub use parser::ParseOptions; //~ ERROR struct `ParseOptions` is private
fn main() {}
error[E0603]: struct `ParseOptions` is private
--> $DIR/issue-55884-2.rs:12:17
|
LL | pub use parser::ParseOptions; //~ ERROR struct `ParseOptions` is private
| ^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0603`.
......@@ -19,7 +19,7 @@ mod foo {
}
mod bazz {
use foo::Bar;
use foo::Bar; //~ ERROR unresolved import `foo`
fn baz() {
let x: Bar = 22;
......@@ -28,6 +28,6 @@ fn baz() {
use foo::Bar;
use foobar::Baz;
use foobar::Baz; //~ ERROR unresolved import `foobar`
fn main() { }
error[E0432]: unresolved import `foo`
--> $DIR/local-path-suggestions-2018.rs:22:9
|
LL | use foo::Bar;
LL | use foo::Bar; //~ ERROR unresolved import `foo`
| ^^^ did you mean `crate::foo`?
|
= note: `use` statements changed in Rust 2018; read more at <https://doc.rust-lang.org/edition-guide/rust-2018/module-system/path-clarity.html>
......@@ -9,7 +9,7 @@ LL | use foo::Bar;
error[E0432]: unresolved import `foobar`
--> $DIR/local-path-suggestions-2018.rs:31:5
|
LL | use foobar::Baz;
LL | use foobar::Baz; //~ ERROR unresolved import `foobar`
| ^^^^^^ did you mean `baz::foobar`?
error: aborting due to 2 previous errors
......
// edition:2018
// compile-flags:--extern foo --extern bar
use foo::bar; //~ ERROR unresolved import
use bar::foo;
fn main() {}
error[E0432]: unresolved import
--> $DIR/deadlock.rs:4:5
|
LL | use foo::bar; //~ ERROR unresolved import
| ^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0432`.
// edition:2018
#![deny(unused)]
use std::fmt;
// No "unresolved import" + "unused import" combination here.
use fmt::Write; //~ ERROR imports can only refer to extern crate names
//~| ERROR unused import: `fmt::Write`
fn main() {}
error[E0658]: imports can only refer to extern crate names passed with `--extern` on stable channel (see issue #53130)
--> $DIR/issue-54390.rs:8:5
|
LL | use std::fmt;
| -------- not an extern crate passed with `--extern`
...
LL | use fmt::Write; //~ ERROR imports can only refer to extern crate names
| ^^^
|
= help: add #![feature(uniform_paths)] to the crate attributes to enable
note: this import refers to the module imported here
--> $DIR/issue-54390.rs:5:5
|
LL | use std::fmt;
| ^^^^^^^^
error: unused import: `fmt::Write`
--> $DIR/issue-54390.rs:8:5
|
LL | use fmt::Write; //~ ERROR imports can only refer to extern crate names
| ^^^^^^^^^^
|
note: lint level defined here
--> $DIR/issue-54390.rs:3:9
|
LL | #![deny(unused)]
| ^^^^^^
= note: #[deny(unused_imports)] implied by #[deny(unused)]
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册