Auto merge of #50724 - zackmdavis:applicability_rush, r=Manishearth
add suggestion applicabilities to librustc and libsyntax A down payment on #50723. Interested in feedback on whether my `MaybeIncorrect` vs. `MachineApplicable` judgement calls are well-calibrated (and that we have a consensus on what this means). r? @Manishearth cc @killercup @estebank
This commit is contained in:
commit
16cd84ee22
35 changed files with 447 additions and 117 deletions
25
src/test/ui/extern-const.fixed
Normal file
25
src/test/ui/extern-const.fixed
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright 2017 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-rustfix
|
||||
// compile-flags: -Z continue-parse-after-error
|
||||
|
||||
extern "C" {
|
||||
static C: u8; //~ ERROR extern items cannot be `const`
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// We suggest turning the (illegal) extern `const` into an extern `static`,
|
||||
// but this also requires `unsafe` (a deny-by-default lint at comment time,
|
||||
// future error; Issue #36247)
|
||||
unsafe {
|
||||
let _x = C;
|
||||
}
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
// compile-flags: -Z continue-parse-after-error
|
||||
|
||||
extern "C" {
|
||||
|
|
@ -15,5 +16,10 @@ extern "C" {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
let x = C;
|
||||
// We suggest turning the (illegal) extern `const` into an extern `static`,
|
||||
// but this also requires `unsafe` (a deny-by-default lint at comment time,
|
||||
// future error; Issue #36247)
|
||||
unsafe {
|
||||
let _x = C;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
error: extern items cannot be `const`
|
||||
--> $DIR/extern-const.rs:14:5
|
||||
--> $DIR/extern-const.rs:15:5
|
||||
|
|
||||
LL | const C: u8; //~ ERROR extern items cannot be `const`
|
||||
| ^^^^^ help: instead try using: `static`
|
||||
| ^^^^^ help: try using a static value: `static`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
24
src/test/ui/issue-42954.fixed
Normal file
24
src/test/ui/issue-42954.fixed
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright 2017 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-rustfix
|
||||
|
||||
#![allow(unused_must_use, unused_comparisons)]
|
||||
|
||||
macro_rules! is_plainly_printable {
|
||||
($i: ident) => {
|
||||
($i as u32) < 0 //~ `<` is interpreted as a start of generic arguments
|
||||
};
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let c = 'a';
|
||||
is_plainly_printable!(c);
|
||||
}
|
||||
|
|
@ -8,6 +8,10 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#![allow(unused_must_use, unused_comparisons)]
|
||||
|
||||
macro_rules! is_plainly_printable {
|
||||
($i: ident) => {
|
||||
$i as u32 < 0 //~ `<` is interpreted as a start of generic arguments
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: `<` is interpreted as a start of generic arguments for `u32`, not a comparison
|
||||
--> $DIR/issue-42954.rs:13:19
|
||||
--> $DIR/issue-42954.rs:17:19
|
||||
|
|
||||
LL | $i as u32 < 0 //~ `<` is interpreted as a start of generic arguments
|
||||
| --------- ^ - interpreted as generic arguments
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ error: expected type, found keyword `true`
|
|||
--> $DIR/issue-44406.rs:18:10
|
||||
|
|
||||
LL | bar(baz: $rest)
|
||||
| - help: did you mean to use `;` here?
|
||||
| - help: try using a semicolon: `;`
|
||||
...
|
||||
LL | foo!(true); //~ ERROR expected type, found keyword
|
||||
| ^^^^ expecting a type here because of type ascription
|
||||
|
|
|
|||
21
src/test/ui/issue-48636.fixed
Normal file
21
src/test/ui/issue-48636.fixed
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// 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-rustfix
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
struct S {
|
||||
x: u8,
|
||||
/// The id of the parent core
|
||||
y: u8,
|
||||
}
|
||||
//~^^^ ERROR found a documentation comment that doesn't document anything
|
||||
fn main() {}
|
||||
|
|
@ -8,6 +8,10 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
struct S {
|
||||
x: u8
|
||||
/// The id of the parent core
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0585]: found a documentation comment that doesn't document anything
|
||||
--> $DIR/issue-48636.rs:13:5
|
||||
--> $DIR/issue-48636.rs:17:5
|
||||
|
|
||||
LL | x: u8
|
||||
| - help: missing comma here: `,`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright 2016 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.
|
||||
|
||||
// Regression test for #47244: in this specific scenario, when the
|
||||
// expected type indicated 1 argument but the closure takes two, we
|
||||
// would (early on) create type variables for the type of `b`. If the
|
||||
// user then attempts to invoke a method on `b`, we would get an error
|
||||
// saying that the type of `b` must be known, which was not very
|
||||
// helpful.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
fn main() {
|
||||
let mut m = HashMap::new();
|
||||
m.insert("foo", "bar");
|
||||
|
||||
let _n = m.iter().map(|(_, b)| {
|
||||
//~^ ERROR closure is expected to take a single 2-tuple
|
||||
b.to_string()
|
||||
});
|
||||
}
|
||||
|
|
@ -15,15 +15,16 @@
|
|||
// saying that the type of `b` must be known, which was not very
|
||||
// helpful.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
fn main() {
|
||||
let mut m = HashMap::new();
|
||||
m.insert("foo", "bar");
|
||||
|
||||
let m = HashMap::new();
|
||||
m.insert( "foo", "bar" );
|
||||
|
||||
m.iter().map( |_, b| {
|
||||
let _n = m.iter().map(|_, b| {
|
||||
//~^ ERROR closure is expected to take a single 2-tuple
|
||||
|
||||
b.to_string()
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
error[E0593]: closure is expected to take a single 2-tuple as argument, but it takes 2 distinct arguments
|
||||
--> $DIR/closure-arg-count-expected-type-issue-47244.rs:24:14
|
||||
--> $DIR/closure-arg-count-expected-type-issue-47244.rs:26:23
|
||||
|
|
||||
LL | m.iter().map( |_, b| {
|
||||
| ^^^ ------ takes 2 distinct arguments
|
||||
| |
|
||||
| expected closure that takes a single 2-tuple as argument
|
||||
LL | let _n = m.iter().map(|_, b| {
|
||||
| ^^^ ------ takes 2 distinct arguments
|
||||
| |
|
||||
| expected closure that takes a single 2-tuple as argument
|
||||
help: change the closure to accept a tuple instead of individual arguments
|
||||
|
|
||||
LL | m.iter().map( |(_, b)| {
|
||||
| ^^^^^^^^
|
||||
LL | let _n = m.iter().map(|(_, b)| {
|
||||
| ^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
21
src/test/ui/repr-align-assign.fixed
Normal file
21
src/test/ui/repr-align-assign.fixed
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// 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-rustfix
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
#[repr(align(8))] //~ ERROR incorrect `repr(align)` attribute format
|
||||
struct A(u64);
|
||||
|
||||
#[repr(align(8))] //~ ERROR incorrect `repr(align)` attribute format
|
||||
struct B(u64);
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -8,6 +8,10 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
#[repr(align=8)] //~ ERROR incorrect `repr(align)` attribute format
|
||||
struct A(u64);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
error[E0693]: incorrect `repr(align)` attribute format
|
||||
--> $DIR/repr-align-assign.rs:11:8
|
||||
--> $DIR/repr-align-assign.rs:15:8
|
||||
|
|
||||
LL | #[repr(align=8)] //~ ERROR incorrect `repr(align)` attribute format
|
||||
| ^^^^^^^ help: use parentheses instead: `align(8)`
|
||||
|
||||
error[E0693]: incorrect `repr(align)` attribute format
|
||||
--> $DIR/repr-align-assign.rs:14:8
|
||||
--> $DIR/repr-align-assign.rs:18:8
|
||||
|
|
||||
LL | #[repr(align="8")] //~ ERROR incorrect `repr(align)` attribute format
|
||||
| ^^^^^^^^^ help: use parentheses instead: `align(8)`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
// Copyright 2017 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-rustfix
|
||||
|
||||
#![allow(unused_imports)]
|
||||
|
||||
pub mod extension1 {
|
||||
pub trait ConstructorExtension {}
|
||||
}
|
||||
|
||||
pub mod extension2 {
|
||||
pub trait ConstructorExtension {}
|
||||
}
|
||||
|
||||
use extension1::ConstructorExtension;
|
||||
use extension2::ConstructorExtension as OtherConstructorExtension; //~ ERROR is defined multiple times
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -8,6 +8,10 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#![allow(unused_imports)]
|
||||
|
||||
pub mod extension1 {
|
||||
pub trait ConstructorExtension {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0252]: the name `ConstructorExtension` is defined multiple times
|
||||
--> $DIR/issue-32354-suggest-import-rename.rs:20:5
|
||||
--> $DIR/issue-32354-suggest-import-rename.rs:24:5
|
||||
|
|
||||
LL | use extension1::ConstructorExtension;
|
||||
| -------------------------------- previous import of the trait `ConstructorExtension` here
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ error: missing `fn` or `struct` for method or struct definition
|
|||
--> $DIR/pub-ident-fn-or-struct-2.rs:11:4
|
||||
|
|
||||
LL | pub S();
|
||||
| ---^- help: if you meant to call a macro, write instead: `S!`
|
||||
| ---^- help: if you meant to call a macro, try: `S!`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ error: missing `fn` or `struct` for method or struct definition
|
|||
--> $DIR/pub-ident-fn-or-struct.rs:11:4
|
||||
|
|
||||
LL | pub S (foo) bar
|
||||
| ---^- help: if you meant to call a macro, write instead: `S!`
|
||||
| ---^- help: if you meant to call a macro, try: `S!`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
18
src/test/ui/suggestions/pub-ident-fn.fixed
Normal file
18
src/test/ui/suggestions/pub-ident-fn.fixed
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright 2017 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-rustfix
|
||||
|
||||
pub fn foo(_s: usize) -> bool { true }
|
||||
//~^ ERROR missing `fn` for method definition
|
||||
|
||||
fn main() {
|
||||
foo(2);
|
||||
}
|
||||
|
|
@ -8,7 +8,9 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
pub foo(s: usize) -> bool { true }
|
||||
// run-rustfix
|
||||
|
||||
pub foo(_s: usize) -> bool { true }
|
||||
//~^ ERROR missing `fn` for method definition
|
||||
|
||||
fn main() {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
error: missing `fn` for method definition
|
||||
--> $DIR/pub-ident-fn.rs:11:4
|
||||
--> $DIR/pub-ident-fn.rs:13:4
|
||||
|
|
||||
LL | pub foo(s: usize) -> bool { true }
|
||||
LL | pub foo(_s: usize) -> bool { true }
|
||||
| ^^^
|
||||
help: add `fn` here to parse `foo` as a public method
|
||||
|
|
||||
LL | pub fn foo(s: usize) -> bool { true }
|
||||
LL | pub fn foo(_s: usize) -> bool { true }
|
||||
| ^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ error: expected type, found `0`
|
|||
--> $DIR/type-ascription-instead-of-statement-end.rs:15:5
|
||||
|
|
||||
LL | println!("test"):
|
||||
| - help: did you mean to use `;` here?
|
||||
| - help: try using a semicolon: `;`
|
||||
LL | 0; //~ ERROR expected type, found `0`
|
||||
| ^ expecting a type here because of type ascription
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue