about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2020-05-26 22:11:29 +0200
committerGitHub <noreply@github.com>2020-05-26 22:11:29 +0200
commite38fdda243c890bc8f4ce93eb82fd1bf750ebbe7 (patch)
treea9654d285094708c102d3a980c6013c0d75bf612 /src/test
parent0747f586ebada402e2b2d5cb14ab40d5f33518a6 (diff)
parentffa493ab57fbb44f16efae2515abdde6876cc5c9 (diff)
downloadrust-e38fdda243c890bc8f4ce93eb82fd1bf750ebbe7.tar.gz
rust-e38fdda243c890bc8f4ce93eb82fd1bf750ebbe7.zip
Rollup merge of #72342 - jsgf:warn-unused-deps, r=petrochenkov
Warn about unused crate deps

Implements #57274 by adding -Wunused-crate-dependencies. This will warn about any `--extern` option on the command line which isn't referenced by the crate source either via `use` or `extern crate`.

Crates which are added for some side effect but are otherwise unreferenced - such as for symbols they define - the warning can be suppressed with `use somecrate as _;`.

If a crate has multiple aliases (eg using `foo = { package = "bar" }` in `Cargo.toml`), then it will warn about each unused alias.

This does not consider crate added by some other means than `--extern`, including the standard library. It also doesn't consider any crate without `add_prelude` set (though I'm not sure about this).

Unfortunately this probably [does not yet work well with Cargo](https://github.com/rust-lang/rust/issues/57274#issuecomment-624839355) as it will over-specify crates, causing spurious warnings. As a result, this lint is "allow" by default and must be explicitly enabled either via `#![warn(unused_crate_deps)]` or with `-Wunused-crate-deps`.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/unused-crate-deps/auxiliary/bar.rs1
-rw-r--r--src/test/ui/unused-crate-deps/auxiliary/foo.rs5
-rw-r--r--src/test/ui/unused-crate-deps/libfib.rs21
-rw-r--r--src/test/ui/unused-crate-deps/libfib.stderr10
-rw-r--r--src/test/ui/unused-crate-deps/suppress.rs11
-rw-r--r--src/test/ui/unused-crate-deps/unused-aliases.rs13
-rw-r--r--src/test/ui/unused-crate-deps/unused-aliases.stderr14
-rw-r--r--src/test/ui/unused-crate-deps/use_extern_crate_2015.rs13
-rw-r--r--src/test/ui/unused-crate-deps/warn-attr.rs10
-rw-r--r--src/test/ui/unused-crate-deps/warn-attr.stderr14
-rw-r--r--src/test/ui/unused-crate-deps/warn-cmdline-static.rs10
-rw-r--r--src/test/ui/unused-crate-deps/warn-cmdline-static.stderr10
-rw-r--r--src/test/ui/unused-crate-deps/warn-cmdline.rs9
-rw-r--r--src/test/ui/unused-crate-deps/warn-cmdline.stderr10
14 files changed, 151 insertions, 0 deletions
diff --git a/src/test/ui/unused-crate-deps/auxiliary/bar.rs b/src/test/ui/unused-crate-deps/auxiliary/bar.rs
new file mode 100644
index 00000000000..1d3824e7a44
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/auxiliary/bar.rs
@@ -0,0 +1 @@
+pub const BAR: &str = "bar";
diff --git a/src/test/ui/unused-crate-deps/auxiliary/foo.rs b/src/test/ui/unused-crate-deps/auxiliary/foo.rs
new file mode 100644
index 00000000000..0ef03eb9edf
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/auxiliary/foo.rs
@@ -0,0 +1,5 @@
+// edition:2018
+// aux-crate:bar=bar.rs
+
+pub const FOO: &str = "foo";
+pub use bar::BAR;
diff --git a/src/test/ui/unused-crate-deps/libfib.rs b/src/test/ui/unused-crate-deps/libfib.rs
new file mode 100644
index 00000000000..c1545dca99f
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/libfib.rs
@@ -0,0 +1,21 @@
+// Test warnings for a library crate
+
+// check-pass
+// aux-crate:bar=bar.rs
+// compile-flags:--crate-type lib -Wunused-crate-dependencies
+
+pub fn fib(n: u32) -> Vec<u32> {
+//~^ WARNING external crate `bar` unused in
+let mut prev = 0;
+    let mut cur = 1;
+    let mut v = vec![];
+
+    for _ in 0..n {
+        v.push(prev);
+        let n = prev + cur;
+        prev = cur;
+        cur = n;
+    }
+
+    v
+}
diff --git a/src/test/ui/unused-crate-deps/libfib.stderr b/src/test/ui/unused-crate-deps/libfib.stderr
new file mode 100644
index 00000000000..15833126bd6
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/libfib.stderr
@@ -0,0 +1,10 @@
+warning: external crate `bar` unused in `libfib`: remove the dependency or add `use bar as _;`
+  --> $DIR/libfib.rs:7:1
+   |
+LL | pub fn fib(n: u32) -> Vec<u32> {
+   | ^
+   |
+   = note: requested on the command line with `-W unused-crate-dependencies`
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/unused-crate-deps/suppress.rs b/src/test/ui/unused-crate-deps/suppress.rs
new file mode 100644
index 00000000000..8904d04bc14
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/suppress.rs
@@ -0,0 +1,11 @@
+// Suppress by using crate
+
+// edition:2018
+// check-pass
+// aux-crate:bar=bar.rs
+
+#![warn(unused_crate_dependencies)]
+
+use bar as _;
+
+fn main() {}
diff --git a/src/test/ui/unused-crate-deps/unused-aliases.rs b/src/test/ui/unused-crate-deps/unused-aliases.rs
new file mode 100644
index 00000000000..1b7cb9b970e
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/unused-aliases.rs
@@ -0,0 +1,13 @@
+// Warn about unused aliased for the crate
+
+// edition:2018
+// check-pass
+// aux-crate:bar=bar.rs
+// aux-crate:barbar=bar.rs
+
+#![warn(unused_crate_dependencies)]
+//~^ WARNING external crate `barbar` unused in
+
+use bar as _;
+
+fn main() {}
diff --git a/src/test/ui/unused-crate-deps/unused-aliases.stderr b/src/test/ui/unused-crate-deps/unused-aliases.stderr
new file mode 100644
index 00000000000..c8c6c4507b0
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/unused-aliases.stderr
@@ -0,0 +1,14 @@
+warning: external crate `barbar` unused in `unused_aliases`: remove the dependency or add `use barbar as _;`
+  --> $DIR/unused-aliases.rs:8:1
+   |
+LL | #![warn(unused_crate_dependencies)]
+   | ^
+   |
+note: the lint level is defined here
+  --> $DIR/unused-aliases.rs:8:9
+   |
+LL | #![warn(unused_crate_dependencies)]
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/unused-crate-deps/use_extern_crate_2015.rs b/src/test/ui/unused-crate-deps/use_extern_crate_2015.rs
new file mode 100644
index 00000000000..f15c87fa0b2
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/use_extern_crate_2015.rs
@@ -0,0 +1,13 @@
+// Suppress by using crate
+
+// edition:2015
+// check-pass
+// aux-crate:bar=bar.rs
+
+#![warn(unused_crate_dependencies)]
+
+extern crate bar;
+
+fn main() {
+    println!("bar {}", bar::BAR);
+}
diff --git a/src/test/ui/unused-crate-deps/warn-attr.rs b/src/test/ui/unused-crate-deps/warn-attr.rs
new file mode 100644
index 00000000000..1acb307ab21
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/warn-attr.rs
@@ -0,0 +1,10 @@
+// Check for unused crate dep, no path
+
+// edition:2018
+// check-pass
+// aux-crate:bar=bar.rs
+
+#![warn(unused_crate_dependencies)]
+//~^ WARNING external crate `bar` unused in
+
+fn main() {}
diff --git a/src/test/ui/unused-crate-deps/warn-attr.stderr b/src/test/ui/unused-crate-deps/warn-attr.stderr
new file mode 100644
index 00000000000..0d38315704b
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/warn-attr.stderr
@@ -0,0 +1,14 @@
+warning: external crate `bar` unused in `warn_attr`: remove the dependency or add `use bar as _;`
+  --> $DIR/warn-attr.rs:7:1
+   |
+LL | #![warn(unused_crate_dependencies)]
+   | ^
+   |
+note: the lint level is defined here
+  --> $DIR/warn-attr.rs:7:9
+   |
+LL | #![warn(unused_crate_dependencies)]
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/unused-crate-deps/warn-cmdline-static.rs b/src/test/ui/unused-crate-deps/warn-cmdline-static.rs
new file mode 100644
index 00000000000..c609529a6c6
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/warn-cmdline-static.rs
@@ -0,0 +1,10 @@
+// Check for unused crate dep, no path
+
+// edition:2018
+// check-pass
+// compile-flags: -Wunused-crate-dependencies
+// aux-crate:bar=bar.rs
+// no-prefer-dynamic
+
+fn main() {}
+//~^ WARNING external crate `bar` unused in
diff --git a/src/test/ui/unused-crate-deps/warn-cmdline-static.stderr b/src/test/ui/unused-crate-deps/warn-cmdline-static.stderr
new file mode 100644
index 00000000000..65956461d64
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/warn-cmdline-static.stderr
@@ -0,0 +1,10 @@
+warning: external crate `bar` unused in `warn_cmdline_static`: remove the dependency or add `use bar as _;`
+  --> $DIR/warn-cmdline-static.rs:9:1
+   |
+LL | fn main() {}
+   | ^
+   |
+   = note: requested on the command line with `-W unused-crate-dependencies`
+
+warning: 1 warning emitted
+
diff --git a/src/test/ui/unused-crate-deps/warn-cmdline.rs b/src/test/ui/unused-crate-deps/warn-cmdline.rs
new file mode 100644
index 00000000000..3bae61c3ea2
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/warn-cmdline.rs
@@ -0,0 +1,9 @@
+// Check for unused crate dep, no path
+
+// edition:2018
+// check-pass
+// compile-flags: -Wunused-crate-dependencies
+// aux-crate:bar=bar.rs
+
+fn main() {}
+//~^ WARNING external crate `bar` unused in
diff --git a/src/test/ui/unused-crate-deps/warn-cmdline.stderr b/src/test/ui/unused-crate-deps/warn-cmdline.stderr
new file mode 100644
index 00000000000..ea675ba9a1e
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/warn-cmdline.stderr
@@ -0,0 +1,10 @@
+warning: external crate `bar` unused in `warn_cmdline`: remove the dependency or add `use bar as _;`
+  --> $DIR/warn-cmdline.rs:8:1
+   |
+LL | fn main() {}
+   | ^
+   |
+   = note: requested on the command line with `-W unused-crate-dependencies`
+
+warning: 1 warning emitted
+