From: Esteban Küber Date: Sun, 20 Jan 2019 02:44:20 +0000 (-0800) Subject: Accept parenthesized type args for error recovery X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=3235446b397a06596063f237ae864de8d95799e9;p=rust.git Accept parenthesized type args for error recovery --- diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index b8aeb6032ba..b7624b09eee 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -1826,7 +1826,11 @@ fn lower_path_segment( struct_span_err!(self.sess, data.span, E0214, "{}", msg) .span_label(data.span, "only traits may use parentheses") .emit(); - (hir::GenericArgs::none(), false) + (self.lower_angle_bracketed_parameter_data( + &data.as_angle_bracketed_args(), + param_mode, + itctx).0, + false) } }, } diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index bbcaaacbab5..d57f9247c05 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -192,6 +192,16 @@ pub struct ParenthesisedArgs { pub output: Option>, } +impl ParenthesisedArgs { + pub fn as_angle_bracketed_args(&self) -> AngleBracketedArgs { + AngleBracketedArgs { + span: self.span, + args: self.inputs.iter().cloned().map(|input| GenericArg::Type(input)).collect(), + bindings: vec![], + } + } +} + // hack to ensure that we don't try to access the private parts of `NodeId` in this module mod node_id_inner { use rustc_data_structures::indexed_vec::Idx; diff --git a/src/test/ui/error-codes/E0214.stderr b/src/test/ui/error-codes/E0214.stderr index f87502efe1b..08a98b1c3bf 100644 --- a/src/test/ui/error-codes/E0214.stderr +++ b/src/test/ui/error-codes/E0214.stderr @@ -4,13 +4,6 @@ error[E0214]: parenthesized parameters may only be used with a trait LL | let v: Vec(&str) = vec!["foo"]; | ^^^^^^ only traits may use parentheses -error[E0107]: wrong number of type arguments: expected 1, found 0 - --> $DIR/E0214.rs:2:12 - | -LL | let v: Vec(&str) = vec!["foo"]; - | ^^^^^^^^^ expected 1 type argument - -error: aborting due to 2 previous errors +error: aborting due to previous error -Some errors occurred: E0107, E0214. -For more information about an error, try `rustc --explain E0107`. +For more information about this error, try `rustc --explain E0214`. diff --git a/src/test/ui/issues/issue-23589.rs b/src/test/ui/issues/issue-23589.rs index a59710a1a3c..fb765e453dc 100644 --- a/src/test/ui/issues/issue-23589.rs +++ b/src/test/ui/issues/issue-23589.rs @@ -1,4 +1,5 @@ fn main() { let v: Vec(&str) = vec!['1', '2']; //~^ ERROR parenthesized parameters may only be used with a trait + //~| ERROR mismatched types } diff --git a/src/test/ui/issues/issue-23589.stderr b/src/test/ui/issues/issue-23589.stderr index 15f2c524a7a..c71061606df 100644 --- a/src/test/ui/issues/issue-23589.stderr +++ b/src/test/ui/issues/issue-23589.stderr @@ -4,13 +4,16 @@ error[E0214]: parenthesized parameters may only be used with a trait LL | let v: Vec(&str) = vec!['1', '2']; | ^^^^^^ only traits may use parentheses -error[E0107]: wrong number of type arguments: expected 1, found 0 - --> $DIR/issue-23589.rs:2:12 +error[E0308]: mismatched types + --> $DIR/issue-23589.rs:2:29 | LL | let v: Vec(&str) = vec!['1', '2']; - | ^^^^^^^^^ expected 1 type argument + | ^^^ expected &str, found char + | + = note: expected type `&str` + found type `char` error: aborting due to 2 previous errors -Some errors occurred: E0107, E0214. -For more information about an error, try `rustc --explain E0107`. +Some errors occurred: E0214, E0308. +For more information about an error, try `rustc --explain E0214`. diff --git a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs index 5387dcb218c..2827e6eead5 100644 --- a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs +++ b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs @@ -7,6 +7,7 @@ struct Bar { fn bar() { let x: Box = panic!(); //~^ ERROR parenthesized parameters may only be used with a trait + //~| ERROR wrong number of type arguments: expected 1, found 0 } fn main() { } diff --git a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr index b4f7a97c3e5..395f6596cfd 100644 --- a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr +++ b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr @@ -4,13 +4,6 @@ error[E0214]: parenthesized parameters may only be used with a trait LL | let b = Bar::(isize, usize)::new(); // OK too (for the parser) | ^^^^^^^^^^^^^^^^ only traits may use parentheses -error[E0107]: wrong number of type arguments: expected 2, found 0 - --> $DIR/unboxed-closure-sugar-used-on-struct-3.rs:14:13 - | -LL | let b = Bar::(isize, usize)::new(); // OK too (for the parser) - | ^^^^^^^^^^^^^^^^^^^^^^^^ expected 2 type arguments - -error: aborting due to 2 previous errors +error: aborting due to previous error -Some errors occurred: E0107, E0214. -For more information about an error, try `rustc --explain E0107`. +For more information about this error, try `rustc --explain E0214`. diff --git a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs index e795650447c..6da53585c9c 100644 --- a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs +++ b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs @@ -6,7 +6,7 @@ struct Bar { fn foo(b: Box) { //~^ ERROR parenthesized parameters may only be used with a trait - //~| ERROR the type placeholder `_` is not allowed within types on item signatures + //~| ERROR wrong number of type arguments: expected 1, found 0 } fn main() { }