Skip to content

Commit

Permalink
resolve: Mark extern crate items as used in more cases
Browse files Browse the repository at this point in the history
  • Loading branch information
petrochenkov committed Jan 12, 2019
1 parent d6525ef commit 6aa7856
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/librustc_resolve/lib.rs
Expand Up @@ -5089,6 +5089,9 @@ impl<'a> Resolver<'a> {
}
self.extern_prelude.get(&ident.modern()).cloned().and_then(|entry| {
if let Some(binding) = entry.extern_crate_item {
if !speculative && entry.introduced_by_item {
self.record_use(ident, TypeNS, binding, false);
}
Some(binding)
} else {
let crate_id = if !speculative {
Expand Down
28 changes: 28 additions & 0 deletions src/test/ui/imports/extern-crate-used.rs
@@ -0,0 +1,28 @@
// Extern crate items are marked as used if they are used
// through extern prelude entries introduced by them.

// edition:2018

#![deny(unused_extern_crates)]

extern crate core as iso1; //~ ERROR `extern crate` is not idiomatic in the new edition
extern crate core as iso2; //~ ERROR `extern crate` is not idiomatic in the new edition
extern crate core as iso3; //~ ERROR `extern crate` is not idiomatic in the new edition
extern crate core as iso4; //~ ERROR `extern crate` is not idiomatic in the new edition

// Doesn't introduce its extern prelude entry, so it's still considered unused.
extern crate core; //~ ERROR unused extern crate

mod m {
use iso1::any as are_you_okay1;
use ::iso2::any as are_you_okay2;
type AreYouOkay1 = iso3::any::Any;
type AreYouOkay2 = ::iso4::any::Any;

use core::any as are_you_okay3;
use ::core::any as are_you_okay4;
type AreYouOkay3 = core::any::Any;
type AreYouOkay4 = ::core::any::Any;
}

fn main() {}
38 changes: 38 additions & 0 deletions src/test/ui/imports/extern-crate-used.stderr
@@ -0,0 +1,38 @@
error: `extern crate` is not idiomatic in the new edition
--> $DIR/extern-crate-used.rs:8:1
|
LL | extern crate core as iso1; //~ ERROR `extern crate` is not idiomatic in the new edition
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`
|
note: lint level defined here
--> $DIR/extern-crate-used.rs:6:9
|
LL | #![deny(unused_extern_crates)]
| ^^^^^^^^^^^^^^^^^^^^

error: `extern crate` is not idiomatic in the new edition
--> $DIR/extern-crate-used.rs:9:1
|
LL | extern crate core as iso2; //~ ERROR `extern crate` is not idiomatic in the new edition
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`

error: `extern crate` is not idiomatic in the new edition
--> $DIR/extern-crate-used.rs:10:1
|
LL | extern crate core as iso3; //~ ERROR `extern crate` is not idiomatic in the new edition
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`

error: `extern crate` is not idiomatic in the new edition
--> $DIR/extern-crate-used.rs:11:1
|
LL | extern crate core as iso4; //~ ERROR `extern crate` is not idiomatic in the new edition
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert it to a `use`

error: unused extern crate
--> $DIR/extern-crate-used.rs:14:1
|
LL | extern crate core; //~ ERROR unused extern crate
| ^^^^^^^^^^^^^^^^^^ help: remove it

error: aborting due to 5 previous errors

0 comments on commit 6aa7856

Please sign in to comment.