mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-26 22:53:28 +00:00
"crate-ify" paths that begin with a renamed crate
This commit is contained in:
parent
27649b7032
commit
2249d65392
@ -3533,7 +3533,9 @@ impl<'a> Resolver<'a> {
|
|||||||
// warning, this looks all good!
|
// warning, this looks all good!
|
||||||
if let Some(binding) = second_binding {
|
if let Some(binding) = second_binding {
|
||||||
if let NameBindingKind::Import { directive: d, .. } = binding.kind {
|
if let NameBindingKind::Import { directive: d, .. } = binding.kind {
|
||||||
if let ImportDirectiveSubclass::ExternCrate(..) = d.subclass {
|
// Careful: we still want to rewrite paths from
|
||||||
|
// renamed extern crates.
|
||||||
|
if let ImportDirectiveSubclass::ExternCrate(None) = d.subclass {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
28
src/test/ui/rust-2018/extern-crate-idiomatic.fixed
Normal file
28
src/test/ui/rust-2018/extern-crate-idiomatic.fixed
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// run-pass
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// The "normal case". Ideally we would remove the `extern crate` here,
|
||||||
|
// but we don't.
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
extern crate edition_lint_paths;
|
||||||
|
|
||||||
|
use edition_lint_paths::foo;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
28
src/test/ui/rust-2018/extern-crate-idiomatic.rs
Normal file
28
src/test/ui/rust-2018/extern-crate-idiomatic.rs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// run-pass
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// The "normal case". Ideally we would remove the `extern crate` here,
|
||||||
|
// but we don't.
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
extern crate edition_lint_paths;
|
||||||
|
|
||||||
|
use edition_lint_paths::foo;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// run-pass
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// Oddball: `edition_lint_paths` is accessed via this `self` path
|
||||||
|
// rather than being accessed directly. Unless we rewrite that path,
|
||||||
|
// we can't drop the extern crate.
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
extern crate edition_lint_paths;
|
||||||
|
use self::edition_lint_paths::foo;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// run-pass
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// Oddball: `edition_lint_paths` is accessed via this `self` path
|
||||||
|
// rather than being accessed directly. Unless we rewrite that path,
|
||||||
|
// we can't drop the extern crate.
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
extern crate edition_lint_paths;
|
||||||
|
use self::edition_lint_paths::foo;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
29
src/test/ui/rust-2018/extern-crate-rename.fixed
Normal file
29
src/test/ui/rust-2018/extern-crate-rename.fixed
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// Oddball: crate is renamed, making it harder for us to rewrite
|
||||||
|
// paths. We don't (and we leave the `extern crate` in place).
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
extern crate edition_lint_paths as my_crate;
|
||||||
|
|
||||||
|
use crate::my_crate::foo;
|
||||||
|
//~^ ERROR absolute paths must start
|
||||||
|
//~| WARNING this was previously accepted
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
29
src/test/ui/rust-2018/extern-crate-rename.rs
Normal file
29
src/test/ui/rust-2018/extern-crate-rename.rs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// Oddball: crate is renamed, making it harder for us to rewrite
|
||||||
|
// paths. We don't (and we leave the `extern crate` in place).
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
extern crate edition_lint_paths as my_crate;
|
||||||
|
|
||||||
|
use my_crate::foo;
|
||||||
|
//~^ ERROR absolute paths must start
|
||||||
|
//~| WARNING this was previously accepted
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
16
src/test/ui/rust-2018/extern-crate-rename.stderr
Normal file
16
src/test/ui/rust-2018/extern-crate-rename.stderr
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||||
|
--> $DIR/extern-crate-rename.rs:22:5
|
||||||
|
|
|
||||||
|
LL | use my_crate::foo;
|
||||||
|
| ^^^^^^^^^^^^^ help: use `crate`: `crate::my_crate::foo`
|
||||||
|
|
|
||||||
|
note: lint level defined here
|
||||||
|
--> $DIR/extern-crate-rename.rs:18:9
|
||||||
|
|
|
||||||
|
LL | #![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
|
||||||
|
= note: for more information, see issue TBD
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
36
src/test/ui/rust-2018/extern-crate-submod.fixed
Normal file
36
src/test/ui/rust-2018/extern-crate-submod.fixed
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// Oddball: extern crate appears in a submodule, making it harder for
|
||||||
|
// us to rewrite paths. We don't (and we leave the `extern crate` in
|
||||||
|
// place).
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
mod m {
|
||||||
|
// Because this extern crate does not appear at the root, we
|
||||||
|
// ignore it altogether.
|
||||||
|
pub extern crate edition_lint_paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
// And we don't being smart about paths like this, even though you
|
||||||
|
// *could* rewrite it to `use edition_lint_paths::foo`
|
||||||
|
use crate::m::edition_lint_paths::foo;
|
||||||
|
//~^ ERROR absolute paths must start
|
||||||
|
//~| WARNING this was previously accepted
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
36
src/test/ui/rust-2018/extern-crate-submod.rs
Normal file
36
src/test/ui/rust-2018/extern-crate-submod.rs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// aux-build:edition-lint-paths.rs
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
// Oddball: extern crate appears in a submodule, making it harder for
|
||||||
|
// us to rewrite paths. We don't (and we leave the `extern crate` in
|
||||||
|
// place).
|
||||||
|
|
||||||
|
#![feature(rust_2018_preview)]
|
||||||
|
#![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
|
||||||
|
mod m {
|
||||||
|
// Because this extern crate does not appear at the root, we
|
||||||
|
// ignore it altogether.
|
||||||
|
pub extern crate edition_lint_paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
// And we don't being smart about paths like this, even though you
|
||||||
|
// *could* rewrite it to `use edition_lint_paths::foo`
|
||||||
|
use m::edition_lint_paths::foo;
|
||||||
|
//~^ ERROR absolute paths must start
|
||||||
|
//~| WARNING this was previously accepted
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
|
16
src/test/ui/rust-2018/extern-crate-submod.stderr
Normal file
16
src/test/ui/rust-2018/extern-crate-submod.stderr
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
error: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
|
||||||
|
--> $DIR/extern-crate-submod.rs:29:5
|
||||||
|
|
|
||||||
|
LL | use m::edition_lint_paths::foo;
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::m::edition_lint_paths::foo`
|
||||||
|
|
|
||||||
|
note: lint level defined here
|
||||||
|
--> $DIR/extern-crate-submod.rs:19:9
|
||||||
|
|
|
||||||
|
LL | #![deny(absolute_path_not_starting_with_crate)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
|
||||||
|
= note: for more information, see issue TBD
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user