Skip to content

Commit

Permalink
use structured suggestion for pattern-named-the-same-as-variant warning
Browse files Browse the repository at this point in the history
  • Loading branch information
zackmdavis committed Jun 24, 2018
1 parent 3874676 commit 4650361
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 16 deletions.
12 changes: 7 additions & 5 deletions src/librustc_mir/hair/pattern/check_match.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use rustc::session::Session;
use rustc::ty::{self, Ty, TyCtxt};
use rustc::ty::subst::Substs;
use rustc::lint;
use rustc_errors::DiagnosticBuilder;
use rustc_errors::{Applicability, DiagnosticBuilder};
use rustc::util::common::ErrorReported;

use rustc::hir::def::*;
Expand Down Expand Up @@ -328,10 +328,12 @@ fn check_for_bindings_named_the_same_as_variants(cx: &MatchVisitor, pat: &Pat) {
"pattern binding `{}` is named the same as one \
of the variants of the type `{}`",
name.node, ty_path);
help!(err,
"if you meant to match on a variant, \
consider making the path in the pattern qualified: `{}::{}`",
ty_path, name.node);
err.span_suggestion_with_applicability(
p.span,
"to match on the variant, qualify the path",
format!("{}::{}", ty_path, name.node),
Applicability::MachineApplicable
);
err.emit();
}
}
Expand Down
40 changes: 40 additions & 0 deletions src/test/ui/issue-19100.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright 2014 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
// run-rustfix

#![allow(non_snake_case)]
#![allow(dead_code)]
#![allow(unused_variables)]

#[derive(Copy, Clone)]
enum Foo {
Bar,
Baz
}

impl Foo {
fn foo(&self) {
match self {
&
Foo::Bar if true
//~^ WARN pattern binding `Bar` is named the same as one of the variants of the type `Foo`
=> println!("bar"),
&
Foo::Baz if false
//~^ WARN pattern binding `Baz` is named the same as one of the variants of the type `Foo`
=> println!("baz"),
_ => ()
}
}
}

fn main() {}
1 change: 1 addition & 0 deletions src/test/ui/issue-19100.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// except according to those terms.

// run-pass
// run-rustfix

#![allow(non_snake_case)]
#![allow(dead_code)]
Expand Down
12 changes: 4 additions & 8 deletions src/test/ui/issue-19100.stderr
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
warning[E0170]: pattern binding `Bar` is named the same as one of the variants of the type `Foo`
--> $DIR/issue-19100.rs:27:1
--> $DIR/issue-19100.rs:28:1
|
LL | Bar if true
| ^^^
|
= help: if you meant to match on a variant, consider making the path in the pattern qualified: `Foo::Bar`
| ^^^ help: to match on the variant, qualify the path: `Foo::Bar`

warning[E0170]: pattern binding `Baz` is named the same as one of the variants of the type `Foo`
--> $DIR/issue-19100.rs:31:1
--> $DIR/issue-19100.rs:32:1
|
LL | Baz if false
| ^^^
|
= help: if you meant to match on a variant, consider making the path in the pattern qualified: `Foo::Baz`
| ^^^ help: to match on the variant, qualify the path: `Foo::Baz`

4 changes: 1 addition & 3 deletions src/test/ui/issue-30302.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ warning[E0170]: pattern binding `Nil` is named the same as one of the variants o
--> $DIR/issue-30302.rs:23:9
|
LL | Nil => true,
| ^^^
|
= help: if you meant to match on a variant, consider making the path in the pattern qualified: `Stack::Nil`
| ^^^ help: to match on the variant, qualify the path: `Stack::Nil`

error: unreachable pattern
--> $DIR/issue-30302.rs:25:9
Expand Down

0 comments on commit 4650361

Please # to comment.