about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-01-03 15:08:47 +0000
committerbors <bors@rust-lang.org>2019-01-03 15:08:47 +0000
commit5b8b01e8dc9d5ba7209256061c8ace789f95e432 (patch)
tree7a3fbe4c8c1ada6ce8ac9df739863bf200c1df4b
parentbaec524fac2f627c1bddd3bce57448c32a86d8aa (diff)
parentec1395aafbf4c95ad9043cc256eb66bd0d622bb5 (diff)
downloadrust-5b8b01e8dc9d5ba7209256061c8ace789f95e432.tar.gz
rust-5b8b01e8dc9d5ba7209256061c8ace789f95e432.zip
Auto merge of #3519 - phansch:brave_newer_ui_tests, r=flip1995
Integrate rustfix into Clippy test suite

Once the [PR to compiletest-rs](https://github.com/laumann/compiletest-rs/pull/151) is reviewed and merged this fixes #2376.

I will create a separate tracking issue for adding `run-rustfix` to all tests.
-rw-r--r--CONTRIBUTING.md9
-rw-r--r--Cargo.toml2
-rw-r--r--clippy_lints/src/reference.rs8
-rw-r--r--tests/ui/unnecessary_ref.fixed23
-rw-r--r--tests/ui/unnecessary_ref.rs4
-rw-r--r--tests/ui/unnecessary_ref.stderr6
-rwxr-xr-xtests/ui/update-references.sh6
7 files changed, 47 insertions, 11 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 94120a3771a..df216a8fbc9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -156,6 +156,15 @@ Therefore you should use `tests/ui/update-all-references.sh` (after running
 `cargo test`) and check whether the output looks as you expect with `git diff`. Commit all
 `*.stderr` files, too.
 
+If the lint you are working on is making use of structured suggestions, the
+test file should include a `// run-rustfix` comment at the top. This will
+additionally run [rustfix](https://github.com/rust-lang-nursery/rustfix) for
+that test. Rustfix will apply the suggestions from the lint to the code of the
+test file and compare that to the contents of a `.fixed` file.
+
+Use `tests/ui/update-all-references.sh` to automatically generate the
+`.fixed` file after running `cargo test`.
+
 ### Running rustfmt
 
 [Rustfmt](https://github.com/rust-lang/rustfmt) is a tool for formatting Rust code according
diff --git a/Cargo.toml b/Cargo.toml
index 3478e496f8c..ce609bb1add 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -48,7 +48,7 @@ rustc_tools_util = { version = "0.1.1", path = "rustc_tools_util"}
 [dev-dependencies]
 clippy_dev = { version = "0.0.1", path = "clippy_dev" }
 cargo_metadata = "0.6.2"
-compiletest_rs = "0.3.16"
+compiletest_rs = "0.3.18"
 lazy_static = "1.0"
 serde_derive = "1.0"
 clippy-mini-macro-test = { version = "0.2", path = "mini-macro" }
diff --git a/clippy_lints/src/reference.rs b/clippy_lints/src/reference.rs
index d4145a2dd39..54a9c0336f0 100644
--- a/clippy_lints/src/reference.rs
+++ b/clippy_lints/src/reference.rs
@@ -98,7 +98,7 @@ impl LintPass for DerefPass {
 impl EarlyLintPass for DerefPass {
     fn check_expr(&mut self, cx: &EarlyContext<'_>, e: &Expr) {
         if_chain! {
-            if let ExprKind::Field(ref object, ref field_name) = e.node;
+            if let ExprKind::Field(ref object, _) = e.node;
             if let ExprKind::Paren(ref parened) = object.node;
             if let ExprKind::AddrOf(_, ref inner) = parened.node;
             then {
@@ -109,11 +109,7 @@ impl EarlyLintPass for DerefPass {
                     object.span,
                     "Creating a reference that is immediately dereferenced.",
                     "try this",
-                    format!(
-                        "{}.{}",
-                        snippet_with_applicability(cx, inner.span, "_", &mut applicability),
-                        snippet_with_applicability(cx, field_name.span, "_", &mut applicability)
-                    ),
+                    snippet_with_applicability(cx, inner.span, "_", &mut applicability).to_string(),
                     applicability,
                 );
             }
diff --git a/tests/ui/unnecessary_ref.fixed b/tests/ui/unnecessary_ref.fixed
new file mode 100644
index 00000000000..3617641a116
--- /dev/null
+++ b/tests/ui/unnecessary_ref.fixed
@@ -0,0 +1,23 @@
+// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution.
+//
+// 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-rustfix
+
+#![feature(stmt_expr_attributes)]
+#![allow(unused_variables)]
+
+struct Outer {
+    inner: u32,
+}
+
+#[deny(clippy::ref_in_deref)]
+fn main() {
+    let outer = Outer { inner: 0 };
+    let inner = outer.inner;
+}
diff --git a/tests/ui/unnecessary_ref.rs b/tests/ui/unnecessary_ref.rs
index 31aa367e506..48101c87a54 100644
--- a/tests/ui/unnecessary_ref.rs
+++ b/tests/ui/unnecessary_ref.rs
@@ -7,8 +7,10 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(tool_attributes)]
+// run-rustfix
+
 #![feature(stmt_expr_attributes)]
+#![allow(unused_variables)]
 
 struct Outer {
     inner: u32,
diff --git a/tests/ui/unnecessary_ref.stderr b/tests/ui/unnecessary_ref.stderr
index 77503026bde..863a6389e7f 100644
--- a/tests/ui/unnecessary_ref.stderr
+++ b/tests/ui/unnecessary_ref.stderr
@@ -1,11 +1,11 @@
 error: Creating a reference that is immediately dereferenced.
-  --> $DIR/unnecessary_ref.rs:20:17
+  --> $DIR/unnecessary_ref.rs:22:17
    |
 LL |     let inner = (&outer).inner;
-   |                 ^^^^^^^^ help: try this: `outer.inner`
+   |                 ^^^^^^^^ help: try this: `outer`
    |
 note: lint level defined here
-  --> $DIR/unnecessary_ref.rs:17:8
+  --> $DIR/unnecessary_ref.rs:19:8
    |
 LL | #[deny(clippy::ref_in_deref)]
    |        ^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui/update-references.sh b/tests/ui/update-references.sh
index aa99d35f7aa..d6995985a3b 100755
--- a/tests/ui/update-references.sh
+++ b/tests/ui/update-references.sh
@@ -34,6 +34,7 @@ shift
 while [[ "$1" != "" ]]; do
     STDERR_NAME="${1/%.rs/.stderr}"
     STDOUT_NAME="${1/%.rs/.stdout}"
+    FIXED_NAME="${1/%.rs/.fixed}"
     shift
     if [ -f $BUILD_DIR/$STDOUT_NAME ] && \
            ! (diff $BUILD_DIR/$STDOUT_NAME $MYDIR/$STDOUT_NAME >& /dev/null); then
@@ -45,6 +46,11 @@ while [[ "$1" != "" ]]; do
         echo updating $MYDIR/$STDERR_NAME
         cp $BUILD_DIR/$STDERR_NAME $MYDIR/$STDERR_NAME
     fi
+    if [ -f $BUILD_DIR/$FIXED_NAME ] && \
+           ! (diff $BUILD_DIR/$FIXED_NAME $MYDIR/$FIXED_NAME >& /dev/null); then
+        echo updating $MYDIR/$FIXED_NAME
+        cp $BUILD_DIR/$FIXED_NAME $MYDIR/$FIXED_NAME
+    fi
 done