From e813132e4f8b0c469c9959c2efa1b0629067b3b8 Mon Sep 17 00:00:00 2001 From: SpanishPear Date: Mon, 24 Oct 2022 00:52:59 +1100 Subject: [PATCH 1/7] --wip-- [skip ci] --wip-- [skip ci] get the generic text and put it int he suggestion, but suggestion not working on derive subdiagnostic refactor away from derives and use span_suggestion() instead. Show's the correct(?) generic contents, but overwrites the fn name :( x fmt drop commented code and s/todo/fixme get the correct diagnostic for functions, at least x fmt remove some debugs remove format remove debugs remove useless change remove useless change remove legacy approach correct lookahead + error message contains the ident name fmt refactor code tests add tests remoev debug remove comment --- .../rustc_parse/src/parser/diagnostics.rs | 57 ++++++++++++++++++- .../suggest_misplaced_generics/enum.fixed | 10 ++++ .../parser/suggest_misplaced_generics/enum.rs | 10 ++++ .../suggest_misplaced_generics/enum.stderr | 13 +++++ .../existing_generics.rs | 9 +++ .../existing_generics.stderr | 10 ++++ .../fn-complex-generics.fixed | 10 ++++ .../fn-complex-generics.rs | 10 ++++ .../fn-complex-generics.stderr | 13 +++++ .../fn-invalid-generics.rs | 8 +++ .../fn-invalid-generics.stderr | 8 +++ .../fn-simple.fixed | 10 ++++ .../suggest_misplaced_generics/fn-simple.rs | 10 ++++ .../fn-simple.stderr | 13 +++++ .../suggest_misplaced_generics/struct.fixed | 10 ++++ .../suggest_misplaced_generics/struct.rs | 10 ++++ .../suggest_misplaced_generics/struct.stderr | 13 +++++ .../suggest_misplaced_generics/trait.fixed | 12 ++++ .../suggest_misplaced_generics/trait.rs | 12 ++++ .../suggest_misplaced_generics/trait.stderr | 13 +++++ .../suggest_misplaced_generics/type.fixed | 10 ++++ .../parser/suggest_misplaced_generics/type.rs | 10 ++++ .../suggest_misplaced_generics/type.stderr | 13 +++++ 23 files changed, 292 insertions(+), 2 deletions(-) create mode 100644 src/test/ui/parser/suggest_misplaced_generics/enum.fixed create mode 100644 src/test/ui/parser/suggest_misplaced_generics/enum.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/enum.stderr create mode 100644 src/test/ui/parser/suggest_misplaced_generics/existing_generics.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/existing_generics.stderr create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-simple.fixed create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-simple.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr create mode 100644 src/test/ui/parser/suggest_misplaced_generics/struct.fixed create mode 100644 src/test/ui/parser/suggest_misplaced_generics/struct.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/struct.stderr create mode 100644 src/test/ui/parser/suggest_misplaced_generics/trait.fixed create mode 100644 src/test/ui/parser/suggest_misplaced_generics/trait.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/trait.stderr create mode 100644 src/test/ui/parser/suggest_misplaced_generics/type.fixed create mode 100644 src/test/ui/parser/suggest_misplaced_generics/type.rs create mode 100644 src/test/ui/parser/suggest_misplaced_generics/type.stderr diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 4c918c6702ed9..6df9cfd3ff4e3 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -284,7 +284,7 @@ impl<'a> Parser<'a> { self.sess.source_map().span_to_snippet(span) } - pub(super) fn expected_ident_found(&self) -> DiagnosticBuilder<'a, ErrorGuaranteed> { + pub(super) fn expected_ident_found(&mut self) -> DiagnosticBuilder<'a, ErrorGuaranteed> { let valid_follow = &[ TokenKind::Eq, TokenKind::Colon, @@ -324,7 +324,60 @@ impl<'a> Parser<'a> { suggest_raw, suggest_remove_comma, }; - err.into_diagnostic(&self.sess.span_diagnostic) + let mut err = err.into_diagnostic(&self.sess.span_diagnostic); + + // if the token we have is a `<` + // it *might* be a misplaced generic + if self.token == token::Lt { + // all keywords that could have generic applied + let valid_prev_keywords = + [kw::Fn, kw::Type, kw::Struct, kw::Enum, kw::Union, kw::Trait]; + + // If we've expected an identifier, + // and the current token is a '<' + // if the previous token is a valid keyword + // that might use a generic, then suggest a correct + // generic placement (later on) + let maybe_keyword = self.prev_token.clone(); + if valid_prev_keywords.into_iter().any(|x| maybe_keyword.is_keyword(x)) { + // if we have a valid keyword, attempt to parse generics + // also obtain the keywords symbol + match self.parse_generics() { + Ok(generic) => { + if let TokenKind::Ident(symbol, _) = maybe_keyword.kind { + let ident_name = symbol.to_string(); + // at this point, we've found something like + // `fn id` + // and current token should be Ident with the item name (i.e. the function name) + // if there is a `<` after the fn name, then don't show a suggestion, show help + + if !self.look_ahead(1, |t| *t == token::Lt) && + let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) && + let Ok(ident) = self.sess.source_map().span_to_snippet(self.token.span) { + err.span_suggestion_verbose( + generic.span.to(self.token.span), + format!("place the generic parameter name after the {ident_name} name"), + format!(" {ident}{snippet}"), + Applicability::MachineApplicable, + ); + } else { + err.help(format!( + "place the generic parameter name after the {ident_name} name" + )); + } + } + } + Err(err) => { + // if there's an error parsing the generics, + // then don't do a misplaced generics suggestion + // and emit the expected ident error instead; + err.cancel(); + } + } + } + } + + err } pub(super) fn expected_one_of_not_found( diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.fixed b/src/test/ui/parser/suggest_misplaced_generics/enum.fixed new file mode 100644 index 0000000000000..a9d3e9f86d09c --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/enum.fixed @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +enum Foo { Variant(T) } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the enum name +//~| SUGGESTION Foo + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.rs b/src/test/ui/parser/suggest_misplaced_generics/enum.rs new file mode 100644 index 0000000000000..2d216ba53cc72 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/enum.rs @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +enum Foo { Variant(T) } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the enum name +//~| SUGGESTION Foo + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.stderr b/src/test/ui/parser/suggest_misplaced_generics/enum.stderr new file mode 100644 index 0000000000000..521cee4f72898 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/enum.stderr @@ -0,0 +1,13 @@ +error: expected identifier, found `<` + --> $DIR/enum.rs:5:5 + | +LL | enum Foo { Variant(T) } + | ^ expected identifier + | +help: place the generic parameter name after the enum name + | +LL | enum Foo { Variant(T) } + | ~~~~~~ + +error: aborting due to previous error + diff --git a/src/test/ui/parser/suggest_misplaced_generics/existing_generics.rs b/src/test/ui/parser/suggest_misplaced_generics/existing_generics.rs new file mode 100644 index 0000000000000..1dc182398d80a --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/existing_generics.rs @@ -0,0 +1,9 @@ +// Issue: 103366 +// there is already an existing generic on f, so don't show a suggestion + +#[allow(unused)] +fn<'a, B: 'a + std::ops::Add> f(_x: B) { } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the fn name + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/existing_generics.stderr b/src/test/ui/parser/suggest_misplaced_generics/existing_generics.stderr new file mode 100644 index 0000000000000..89716e6f1ed0a --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/existing_generics.stderr @@ -0,0 +1,10 @@ +error: expected identifier, found `<` + --> $DIR/existing_generics.rs:5:3 + | +LL | fn<'a, B: 'a + std::ops::Add> f(_x: B) { } + | ^ expected identifier + | + = help: place the generic parameter name after the fn name + +error: aborting due to previous error + diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed new file mode 100644 index 0000000000000..06947e098ee6a --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +fn f<'a, B: 'a + std::ops::Add>(_x: B) { } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the fn name +//~| SUGGESTION f<'a, B: 'a + std::ops::Add> + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs new file mode 100644 index 0000000000000..cefce8d08806d --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +fn<'a, B: 'a + std::ops::Add> f(_x: B) { } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the fn name +//~| SUGGESTION f<'a, B: 'a + std::ops::Add> + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr new file mode 100644 index 0000000000000..7d1b44c44944c --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr @@ -0,0 +1,13 @@ +error: expected identifier, found `<` + --> $DIR/fn-complex-generics.rs:5:3 + | +LL | fn<'a, B: 'a + std::ops::Add> f(_x: B) { } + | ^ expected identifier + | +help: place the generic parameter name after the fn name + | +LL | fn f<'a, B: 'a + std::ops::Add>(_x: B) { } + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +error: aborting due to previous error + diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs b/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs new file mode 100644 index 0000000000000..7fcb6a82ce451 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs @@ -0,0 +1,8 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// The generics fail to parse here, so don't make any suggestions/help + +#[allow(unused)] +fn<~>()> id(x: T) -> T { x } +//~^ ERROR expected identifier, found `<` + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr b/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr new file mode 100644 index 0000000000000..47e12016938d8 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr @@ -0,0 +1,8 @@ +error: expected identifier, found `<` + --> $DIR/fn-invalid-generics.rs:5:3 + | +LL | fn<~>()> id(x: T) -> T { x } + | ^ expected identifier + +error: aborting due to previous error + diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.fixed b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.fixed new file mode 100644 index 0000000000000..31c5429b16b05 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.fixed @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +fn id(x: T) -> T { x } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the fn name +//~| SUGGESTION id + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.rs b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.rs new file mode 100644 index 0000000000000..0a466184e996f --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.rs @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +fn id(x: T) -> T { x } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the fn name +//~| SUGGESTION id + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr new file mode 100644 index 0000000000000..40c4581e513ad --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr @@ -0,0 +1,13 @@ +error: expected identifier, found `<` + --> $DIR/fn-simple.rs:5:3 + | +LL | fn id(x: T) -> T { x } + | ^ expected identifier + | +help: place the generic parameter name after the fn name + | +LL | fn id(x: T) -> T { x } + | ~~~~~ + +error: aborting due to previous error + diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.fixed b/src/test/ui/parser/suggest_misplaced_generics/struct.fixed new file mode 100644 index 0000000000000..8627699a83084 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/struct.fixed @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +struct Foo { x: T } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the struct name +//~| SUGGESTION Foo + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.rs b/src/test/ui/parser/suggest_misplaced_generics/struct.rs new file mode 100644 index 0000000000000..15646b06cfc62 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/struct.rs @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +struct Foo { x: T } +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the struct name +//~| SUGGESTION Foo + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.stderr b/src/test/ui/parser/suggest_misplaced_generics/struct.stderr new file mode 100644 index 0000000000000..ab17ee57e0bcd --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/struct.stderr @@ -0,0 +1,13 @@ +error: expected identifier, found `<` + --> $DIR/struct.rs:5:7 + | +LL | struct Foo { x: T } + | ^ expected identifier + | +help: place the generic parameter name after the struct name + | +LL | struct Foo { x: T } + | ~~~~~~ + +error: aborting due to previous error + diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.fixed b/src/test/ui/parser/suggest_misplaced_generics/trait.fixed new file mode 100644 index 0000000000000..31ebf1f088fc7 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/trait.fixed @@ -0,0 +1,12 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +trait Foo { + //~^ ERROR expected identifier, found `<` + //~| HELP place the generic parameter name after the trait name + //~| SUGGESTION Foo +} + + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.rs b/src/test/ui/parser/suggest_misplaced_generics/trait.rs new file mode 100644 index 0000000000000..81b6abbd66163 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/trait.rs @@ -0,0 +1,12 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +trait Foo { + //~^ ERROR expected identifier, found `<` + //~| HELP place the generic parameter name after the trait name + //~| SUGGESTION Foo +} + + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.stderr b/src/test/ui/parser/suggest_misplaced_generics/trait.stderr new file mode 100644 index 0000000000000..069683bda1be3 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/trait.stderr @@ -0,0 +1,13 @@ +error: expected identifier, found `<` + --> $DIR/trait.rs:5:6 + | +LL | trait Foo { + | ^ expected identifier + | +help: place the generic parameter name after the trait name + | +LL | trait Foo { + | ~~~~~~ + +error: aborting due to previous error + diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.fixed b/src/test/ui/parser/suggest_misplaced_generics/type.fixed new file mode 100644 index 0000000000000..b04003b803d1c --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/type.fixed @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +type Foo = T; +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the type name +//~| SUGGESTION Foo + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.rs b/src/test/ui/parser/suggest_misplaced_generics/type.rs new file mode 100644 index 0000000000000..2d759a8b1ab61 --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/type.rs @@ -0,0 +1,10 @@ +// Issue: 103366 , Suggest fix for misplaced generic params +// run-rustfix + +#[allow(unused)] +type Foo = T; +//~^ ERROR expected identifier, found `<` +//~| HELP place the generic parameter name after the type name +//~| SUGGESTION Foo + +fn main() {} diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.stderr b/src/test/ui/parser/suggest_misplaced_generics/type.stderr new file mode 100644 index 0000000000000..a2832965c6d0e --- /dev/null +++ b/src/test/ui/parser/suggest_misplaced_generics/type.stderr @@ -0,0 +1,13 @@ +error: expected identifier, found `<` + --> $DIR/type.rs:5:5 + | +LL | type Foo = T; + | ^ expected identifier + | +help: place the generic parameter name after the type name + | +LL | type Foo = T; + | ~~~~~~ + +error: aborting due to previous error + From 5287004aa4f9b0685197cc0c009237812fed7047 Mon Sep 17 00:00:00 2001 From: Shrey Sudhir Date: Fri, 2 Dec 2022 00:40:33 +1100 Subject: [PATCH 2/7] Apply automatic suggestions from code review Co-authored-by: Takayuki Maeda --- compiler/rustc_parse/src/parser/diagnostics.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 6df9cfd3ff4e3..1e1e804c0d30a 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -345,7 +345,7 @@ impl<'a> Parser<'a> { match self.parse_generics() { Ok(generic) => { if let TokenKind::Ident(symbol, _) = maybe_keyword.kind { - let ident_name = symbol.to_string(); + let ident_name = symbol; // at this point, we've found something like // `fn id` // and current token should be Ident with the item name (i.e. the function name) @@ -355,9 +355,9 @@ impl<'a> Parser<'a> { let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) && let Ok(ident) = self.sess.source_map().span_to_snippet(self.token.span) { err.span_suggestion_verbose( - generic.span.to(self.token.span), + self.token.span.shrink_to_hi(), format!("place the generic parameter name after the {ident_name} name"), - format!(" {ident}{snippet}"), + snippet, Applicability::MachineApplicable, ); } else { From 655beb4ece8a116c664ae63f26811ba75aa9e0e7 Mon Sep 17 00:00:00 2001 From: Shrey Sudhir Date: Thu, 1 Dec 2022 14:12:33 +0000 Subject: [PATCH 3/7] Attempt to address review comments via github web... --- compiler/rustc_parse/src/parser/diagnostics.rs | 5 ++--- src/test/ui/parser/suggest_misplaced_generics/enum.stderr | 2 +- .../suggest_misplaced_generics/fn-complex-generics.stderr | 2 +- .../ui/parser/suggest_misplaced_generics/fn-simple.stderr | 2 +- src/test/ui/parser/suggest_misplaced_generics/struct.stderr | 2 +- src/test/ui/parser/suggest_misplaced_generics/trait.stderr | 2 +- src/test/ui/parser/suggest_misplaced_generics/type.stderr | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 1e1e804c0d30a..94bedc07ba155 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -352,13 +352,12 @@ impl<'a> Parser<'a> { // if there is a `<` after the fn name, then don't show a suggestion, show help if !self.look_ahead(1, |t| *t == token::Lt) && - let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) && - let Ok(ident) = self.sess.source_map().span_to_snippet(self.token.span) { + let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) { err.span_suggestion_verbose( self.token.span.shrink_to_hi(), format!("place the generic parameter name after the {ident_name} name"), snippet, - Applicability::MachineApplicable, + Applicability::MaybeIncorrect, ); } else { err.help(format!( diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.stderr b/src/test/ui/parser/suggest_misplaced_generics/enum.stderr index 521cee4f72898..8af94856a4a48 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/enum.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/enum.stderr @@ -7,7 +7,7 @@ LL | enum Foo { Variant(T) } help: place the generic parameter name after the enum name | LL | enum Foo { Variant(T) } - | ~~~~~~ + | ~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr index 7d1b44c44944c..196769cb2b569 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr @@ -7,7 +7,7 @@ LL | fn<'a, B: 'a + std::ops::Add> f(_x: B) { } help: place the generic parameter name after the fn name | LL | fn f<'a, B: 'a + std::ops::Add>(_x: B) { } - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr index 40c4581e513ad..0d09d8967b849 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr @@ -7,7 +7,7 @@ LL | fn id(x: T) -> T { x } help: place the generic parameter name after the fn name | LL | fn id(x: T) -> T { x } - | ~~~~~ + | ~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.stderr b/src/test/ui/parser/suggest_misplaced_generics/struct.stderr index ab17ee57e0bcd..32ffdb5e9c308 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/struct.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/struct.stderr @@ -7,7 +7,7 @@ LL | struct Foo { x: T } help: place the generic parameter name after the struct name | LL | struct Foo { x: T } - | ~~~~~~ + | ~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.stderr b/src/test/ui/parser/suggest_misplaced_generics/trait.stderr index 069683bda1be3..01a31b7a85a9d 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/trait.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/trait.stderr @@ -7,7 +7,7 @@ LL | trait Foo { help: place the generic parameter name after the trait name | LL | trait Foo { - | ~~~~~~ + | ~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.stderr b/src/test/ui/parser/suggest_misplaced_generics/type.stderr index a2832965c6d0e..1ae73fae7f926 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/type.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/type.stderr @@ -7,7 +7,7 @@ LL | type Foo = T; help: place the generic parameter name after the type name | LL | type Foo = T; - | ~~~~~~ + | ~~~ error: aborting due to previous error From 4447949e400822a02cc9945fc39f06842e6b9439 Mon Sep 17 00:00:00 2001 From: SpanishPear Date: Sun, 22 Jan 2023 16:45:56 +1100 Subject: [PATCH 4/7] revert to previous span --- compiler/rustc_parse/src/parser/diagnostics.rs | 7 ++++--- src/test/ui/parser/suggest_misplaced_generics/enum.stderr | 2 +- .../suggest_misplaced_generics/fn-complex-generics.stderr | 2 +- .../ui/parser/suggest_misplaced_generics/fn-simple.stderr | 2 +- .../ui/parser/suggest_misplaced_generics/struct.stderr | 2 +- src/test/ui/parser/suggest_misplaced_generics/trait.stderr | 2 +- src/test/ui/parser/suggest_misplaced_generics/type.stderr | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 94bedc07ba155..9ac3bb946dc42 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -352,11 +352,12 @@ impl<'a> Parser<'a> { // if there is a `<` after the fn name, then don't show a suggestion, show help if !self.look_ahead(1, |t| *t == token::Lt) && - let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) { + let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) && + let Ok(ident) = self.sess.source_map().span_to_snippet(self.token.span) { err.span_suggestion_verbose( - self.token.span.shrink_to_hi(), + generic.span.to(self.token.span), format!("place the generic parameter name after the {ident_name} name"), - snippet, + format!(" {ident}{snippet}"), Applicability::MaybeIncorrect, ); } else { diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.stderr b/src/test/ui/parser/suggest_misplaced_generics/enum.stderr index 8af94856a4a48..521cee4f72898 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/enum.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/enum.stderr @@ -7,7 +7,7 @@ LL | enum Foo { Variant(T) } help: place the generic parameter name after the enum name | LL | enum Foo { Variant(T) } - | ~~~ + | ~~~~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr index 196769cb2b569..7d1b44c44944c 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr @@ -7,7 +7,7 @@ LL | fn<'a, B: 'a + std::ops::Add> f(_x: B) { } help: place the generic parameter name after the fn name | LL | fn f<'a, B: 'a + std::ops::Add>(_x: B) { } - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr index 0d09d8967b849..40c4581e513ad 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr @@ -7,7 +7,7 @@ LL | fn id(x: T) -> T { x } help: place the generic parameter name after the fn name | LL | fn id(x: T) -> T { x } - | ~~~ + | ~~~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.stderr b/src/test/ui/parser/suggest_misplaced_generics/struct.stderr index 32ffdb5e9c308..ab17ee57e0bcd 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/struct.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/struct.stderr @@ -7,7 +7,7 @@ LL | struct Foo { x: T } help: place the generic parameter name after the struct name | LL | struct Foo { x: T } - | ~~~ + | ~~~~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.stderr b/src/test/ui/parser/suggest_misplaced_generics/trait.stderr index 01a31b7a85a9d..069683bda1be3 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/trait.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/trait.stderr @@ -7,7 +7,7 @@ LL | trait Foo { help: place the generic parameter name after the trait name | LL | trait Foo { - | ~~~ + | ~~~~~~ error: aborting due to previous error diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.stderr b/src/test/ui/parser/suggest_misplaced_generics/type.stderr index 1ae73fae7f926..a2832965c6d0e 100644 --- a/src/test/ui/parser/suggest_misplaced_generics/type.stderr +++ b/src/test/ui/parser/suggest_misplaced_generics/type.stderr @@ -7,7 +7,7 @@ LL | type Foo = T; help: place the generic parameter name after the type name | LL | type Foo = T; - | ~~~ + | ~~~~~~ error: aborting due to previous error From 8292d07cc4c9a070a9de808620bb79bab6935f70 Mon Sep 17 00:00:00 2001 From: SpanishPear Date: Sun, 22 Jan 2023 17:16:39 +1100 Subject: [PATCH 5/7] move tests to new rust-lang location --- .../ui/parser/suggest_misplaced_generics/enum.fixed | 0 {src/test => tests}/ui/parser/suggest_misplaced_generics/enum.rs | 0 .../ui/parser/suggest_misplaced_generics/enum.stderr | 0 .../ui/parser/suggest_misplaced_generics/existing_generics.rs | 0 .../ui/parser/suggest_misplaced_generics/existing_generics.stderr | 0 .../parser/suggest_misplaced_generics/fn-complex-generics.fixed | 0 .../ui/parser/suggest_misplaced_generics/fn-complex-generics.rs | 0 .../parser/suggest_misplaced_generics/fn-complex-generics.stderr | 0 .../ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs | 0 .../parser/suggest_misplaced_generics/fn-invalid-generics.stderr | 0 .../ui/parser/suggest_misplaced_generics/fn-simple.fixed | 0 .../ui/parser/suggest_misplaced_generics/fn-simple.rs | 0 .../ui/parser/suggest_misplaced_generics/fn-simple.stderr | 0 .../ui/parser/suggest_misplaced_generics/struct.fixed | 0 .../test => tests}/ui/parser/suggest_misplaced_generics/struct.rs | 0 .../ui/parser/suggest_misplaced_generics/struct.stderr | 0 .../ui/parser/suggest_misplaced_generics/trait.fixed | 0 {src/test => tests}/ui/parser/suggest_misplaced_generics/trait.rs | 0 .../ui/parser/suggest_misplaced_generics/trait.stderr | 0 .../ui/parser/suggest_misplaced_generics/type.fixed | 0 {src/test => tests}/ui/parser/suggest_misplaced_generics/type.rs | 0 .../ui/parser/suggest_misplaced_generics/type.stderr | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/enum.fixed (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/enum.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/enum.stderr (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/existing_generics.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/existing_generics.stderr (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-simple.fixed (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-simple.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/fn-simple.stderr (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/struct.fixed (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/struct.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/struct.stderr (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/trait.fixed (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/trait.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/trait.stderr (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/type.fixed (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/type.rs (100%) rename {src/test => tests}/ui/parser/suggest_misplaced_generics/type.stderr (100%) diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.fixed b/tests/ui/parser/suggest_misplaced_generics/enum.fixed similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/enum.fixed rename to tests/ui/parser/suggest_misplaced_generics/enum.fixed diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.rs b/tests/ui/parser/suggest_misplaced_generics/enum.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/enum.rs rename to tests/ui/parser/suggest_misplaced_generics/enum.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/enum.stderr b/tests/ui/parser/suggest_misplaced_generics/enum.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/enum.stderr rename to tests/ui/parser/suggest_misplaced_generics/enum.stderr diff --git a/src/test/ui/parser/suggest_misplaced_generics/existing_generics.rs b/tests/ui/parser/suggest_misplaced_generics/existing_generics.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/existing_generics.rs rename to tests/ui/parser/suggest_misplaced_generics/existing_generics.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/existing_generics.stderr b/tests/ui/parser/suggest_misplaced_generics/existing_generics.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/existing_generics.stderr rename to tests/ui/parser/suggest_misplaced_generics/existing_generics.stderr diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed rename to tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs rename to tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr rename to tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs b/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs rename to tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr rename to tests/ui/parser/suggest_misplaced_generics/fn-invalid-generics.stderr diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.fixed b/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-simple.fixed rename to tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.rs b/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-simple.rs rename to tests/ui/parser/suggest_misplaced_generics/fn-simple.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/fn-simple.stderr rename to tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.fixed b/tests/ui/parser/suggest_misplaced_generics/struct.fixed similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/struct.fixed rename to tests/ui/parser/suggest_misplaced_generics/struct.fixed diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.rs b/tests/ui/parser/suggest_misplaced_generics/struct.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/struct.rs rename to tests/ui/parser/suggest_misplaced_generics/struct.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/struct.stderr b/tests/ui/parser/suggest_misplaced_generics/struct.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/struct.stderr rename to tests/ui/parser/suggest_misplaced_generics/struct.stderr diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.fixed b/tests/ui/parser/suggest_misplaced_generics/trait.fixed similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/trait.fixed rename to tests/ui/parser/suggest_misplaced_generics/trait.fixed diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.rs b/tests/ui/parser/suggest_misplaced_generics/trait.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/trait.rs rename to tests/ui/parser/suggest_misplaced_generics/trait.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/trait.stderr b/tests/ui/parser/suggest_misplaced_generics/trait.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/trait.stderr rename to tests/ui/parser/suggest_misplaced_generics/trait.stderr diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.fixed b/tests/ui/parser/suggest_misplaced_generics/type.fixed similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/type.fixed rename to tests/ui/parser/suggest_misplaced_generics/type.fixed diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.rs b/tests/ui/parser/suggest_misplaced_generics/type.rs similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/type.rs rename to tests/ui/parser/suggest_misplaced_generics/type.rs diff --git a/src/test/ui/parser/suggest_misplaced_generics/type.stderr b/tests/ui/parser/suggest_misplaced_generics/type.stderr similarity index 100% rename from src/test/ui/parser/suggest_misplaced_generics/type.stderr rename to tests/ui/parser/suggest_misplaced_generics/type.stderr From 70bfcc2518dc431cf20cd7d088b954fa348f17d9 Mon Sep 17 00:00:00 2001 From: SpanishPear Date: Tue, 31 Jan 2023 21:44:11 +1100 Subject: [PATCH 6/7] move to multipart spans --- compiler/rustc_parse/src/parser/diagnostics.rs | 11 ++++++----- .../ui/parser/suggest_misplaced_generics/enum.stderr | 5 +++-- .../fn-complex-generics.stderr | 5 +++-- .../suggest_misplaced_generics/fn-simple.stderr | 5 +++-- .../parser/suggest_misplaced_generics/struct.stderr | 5 +++-- .../ui/parser/suggest_misplaced_generics/trait.stderr | 5 +++-- .../ui/parser/suggest_misplaced_generics/type.stderr | 5 +++-- 7 files changed, 24 insertions(+), 17 deletions(-) diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 9ac3bb946dc42..1740f2c2c8455 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -352,12 +352,13 @@ impl<'a> Parser<'a> { // if there is a `<` after the fn name, then don't show a suggestion, show help if !self.look_ahead(1, |t| *t == token::Lt) && - let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) && - let Ok(ident) = self.sess.source_map().span_to_snippet(self.token.span) { - err.span_suggestion_verbose( - generic.span.to(self.token.span), + let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) { + err.multipart_suggestion_verbose( format!("place the generic parameter name after the {ident_name} name"), - format!(" {ident}{snippet}"), + vec![ + (self.token.span.shrink_to_hi(), snippet), + (generic.span, String::new()) + ], Applicability::MaybeIncorrect, ); } else { diff --git a/tests/ui/parser/suggest_misplaced_generics/enum.stderr b/tests/ui/parser/suggest_misplaced_generics/enum.stderr index 521cee4f72898..5f5947627ee5c 100644 --- a/tests/ui/parser/suggest_misplaced_generics/enum.stderr +++ b/tests/ui/parser/suggest_misplaced_generics/enum.stderr @@ -6,8 +6,9 @@ LL | enum Foo { Variant(T) } | help: place the generic parameter name after the enum name | -LL | enum Foo { Variant(T) } - | ~~~~~~ +LL - enum Foo { Variant(T) } +LL + enum Foo { Variant(T) } + | error: aborting due to previous error diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr index 7d1b44c44944c..061d0910a742d 100644 --- a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr +++ b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.stderr @@ -6,8 +6,9 @@ LL | fn<'a, B: 'a + std::ops::Add> f(_x: B) { } | help: place the generic parameter name after the fn name | -LL | fn f<'a, B: 'a + std::ops::Add>(_x: B) { } - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +LL - fn<'a, B: 'a + std::ops::Add> f(_x: B) { } +LL + fn f<'a, B: 'a + std::ops::Add>(_x: B) { } + | error: aborting due to previous error diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr b/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr index 40c4581e513ad..e749f1a0d00d6 100644 --- a/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr +++ b/tests/ui/parser/suggest_misplaced_generics/fn-simple.stderr @@ -6,8 +6,9 @@ LL | fn id(x: T) -> T { x } | help: place the generic parameter name after the fn name | -LL | fn id(x: T) -> T { x } - | ~~~~~ +LL - fn id(x: T) -> T { x } +LL + fn id(x: T) -> T { x } + | error: aborting due to previous error diff --git a/tests/ui/parser/suggest_misplaced_generics/struct.stderr b/tests/ui/parser/suggest_misplaced_generics/struct.stderr index ab17ee57e0bcd..2b650907092d1 100644 --- a/tests/ui/parser/suggest_misplaced_generics/struct.stderr +++ b/tests/ui/parser/suggest_misplaced_generics/struct.stderr @@ -6,8 +6,9 @@ LL | struct Foo { x: T } | help: place the generic parameter name after the struct name | -LL | struct Foo { x: T } - | ~~~~~~ +LL - struct Foo { x: T } +LL + struct Foo { x: T } + | error: aborting due to previous error diff --git a/tests/ui/parser/suggest_misplaced_generics/trait.stderr b/tests/ui/parser/suggest_misplaced_generics/trait.stderr index 069683bda1be3..ac86cfa469704 100644 --- a/tests/ui/parser/suggest_misplaced_generics/trait.stderr +++ b/tests/ui/parser/suggest_misplaced_generics/trait.stderr @@ -6,8 +6,9 @@ LL | trait Foo { | help: place the generic parameter name after the trait name | -LL | trait Foo { - | ~~~~~~ +LL - trait Foo { +LL + trait Foo { + | error: aborting due to previous error diff --git a/tests/ui/parser/suggest_misplaced_generics/type.stderr b/tests/ui/parser/suggest_misplaced_generics/type.stderr index a2832965c6d0e..22744f6cf37fb 100644 --- a/tests/ui/parser/suggest_misplaced_generics/type.stderr +++ b/tests/ui/parser/suggest_misplaced_generics/type.stderr @@ -6,8 +6,9 @@ LL | type Foo = T; | help: place the generic parameter name after the type name | -LL | type Foo = T; - | ~~~~~~ +LL - type Foo = T; +LL + type Foo = T; + | error: aborting due to previous error From a3d32bbbbe06ffe42edbc4905e964d394de5ee02 Mon Sep 17 00:00:00 2001 From: SpanishPear Date: Wed, 1 Feb 2023 18:11:37 +1100 Subject: [PATCH 7/7] fix formatting + test syntax --- compiler/rustc_parse/src/parser/diagnostics.rs | 2 +- tests/ui/parser/suggest_misplaced_generics/enum.fixed | 1 - tests/ui/parser/suggest_misplaced_generics/enum.rs | 1 - .../parser/suggest_misplaced_generics/fn-complex-generics.fixed | 1 - .../ui/parser/suggest_misplaced_generics/fn-complex-generics.rs | 1 - tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed | 1 - tests/ui/parser/suggest_misplaced_generics/fn-simple.rs | 1 - tests/ui/parser/suggest_misplaced_generics/struct.fixed | 1 - tests/ui/parser/suggest_misplaced_generics/struct.rs | 1 - tests/ui/parser/suggest_misplaced_generics/trait.fixed | 1 - tests/ui/parser/suggest_misplaced_generics/trait.rs | 1 - tests/ui/parser/suggest_misplaced_generics/type.fixed | 1 - tests/ui/parser/suggest_misplaced_generics/type.rs | 1 - 13 files changed, 1 insertion(+), 13 deletions(-) diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 1740f2c2c8455..2c6db485828bd 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -353,7 +353,7 @@ impl<'a> Parser<'a> { if !self.look_ahead(1, |t| *t == token::Lt) && let Ok(snippet) = self.sess.source_map().span_to_snippet(generic.span) { - err.multipart_suggestion_verbose( + err.multipart_suggestion_verbose( format!("place the generic parameter name after the {ident_name} name"), vec![ (self.token.span.shrink_to_hi(), snippet), diff --git a/tests/ui/parser/suggest_misplaced_generics/enum.fixed b/tests/ui/parser/suggest_misplaced_generics/enum.fixed index a9d3e9f86d09c..3332118a1e768 100644 --- a/tests/ui/parser/suggest_misplaced_generics/enum.fixed +++ b/tests/ui/parser/suggest_misplaced_generics/enum.fixed @@ -5,6 +5,5 @@ enum Foo { Variant(T) } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the enum name -//~| SUGGESTION Foo fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/enum.rs b/tests/ui/parser/suggest_misplaced_generics/enum.rs index 2d216ba53cc72..5a2289c5c5ae2 100644 --- a/tests/ui/parser/suggest_misplaced_generics/enum.rs +++ b/tests/ui/parser/suggest_misplaced_generics/enum.rs @@ -5,6 +5,5 @@ enum Foo { Variant(T) } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the enum name -//~| SUGGESTION Foo fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed index 06947e098ee6a..84bf64bd63cf9 100644 --- a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed +++ b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.fixed @@ -5,6 +5,5 @@ fn f<'a, B: 'a + std::ops::Add>(_x: B) { } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the fn name -//~| SUGGESTION f<'a, B: 'a + std::ops::Add> fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs index cefce8d08806d..d0684397e744c 100644 --- a/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs +++ b/tests/ui/parser/suggest_misplaced_generics/fn-complex-generics.rs @@ -5,6 +5,5 @@ fn<'a, B: 'a + std::ops::Add> f(_x: B) { } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the fn name -//~| SUGGESTION f<'a, B: 'a + std::ops::Add> fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed b/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed index 31c5429b16b05..cbfd5f2d39c08 100644 --- a/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed +++ b/tests/ui/parser/suggest_misplaced_generics/fn-simple.fixed @@ -5,6 +5,5 @@ fn id(x: T) -> T { x } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the fn name -//~| SUGGESTION id fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs b/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs index 0a466184e996f..b207cf70d8584 100644 --- a/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs +++ b/tests/ui/parser/suggest_misplaced_generics/fn-simple.rs @@ -5,6 +5,5 @@ fn id(x: T) -> T { x } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the fn name -//~| SUGGESTION id fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/struct.fixed b/tests/ui/parser/suggest_misplaced_generics/struct.fixed index 8627699a83084..fec05bdeca15c 100644 --- a/tests/ui/parser/suggest_misplaced_generics/struct.fixed +++ b/tests/ui/parser/suggest_misplaced_generics/struct.fixed @@ -5,6 +5,5 @@ struct Foo { x: T } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the struct name -//~| SUGGESTION Foo fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/struct.rs b/tests/ui/parser/suggest_misplaced_generics/struct.rs index 15646b06cfc62..6b80150d54656 100644 --- a/tests/ui/parser/suggest_misplaced_generics/struct.rs +++ b/tests/ui/parser/suggest_misplaced_generics/struct.rs @@ -5,6 +5,5 @@ struct Foo { x: T } //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the struct name -//~| SUGGESTION Foo fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/trait.fixed b/tests/ui/parser/suggest_misplaced_generics/trait.fixed index 31ebf1f088fc7..a471a078af142 100644 --- a/tests/ui/parser/suggest_misplaced_generics/trait.fixed +++ b/tests/ui/parser/suggest_misplaced_generics/trait.fixed @@ -5,7 +5,6 @@ trait Foo { //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the trait name - //~| SUGGESTION Foo } diff --git a/tests/ui/parser/suggest_misplaced_generics/trait.rs b/tests/ui/parser/suggest_misplaced_generics/trait.rs index 81b6abbd66163..55355f451f9fd 100644 --- a/tests/ui/parser/suggest_misplaced_generics/trait.rs +++ b/tests/ui/parser/suggest_misplaced_generics/trait.rs @@ -5,7 +5,6 @@ trait Foo { //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the trait name - //~| SUGGESTION Foo } diff --git a/tests/ui/parser/suggest_misplaced_generics/type.fixed b/tests/ui/parser/suggest_misplaced_generics/type.fixed index b04003b803d1c..a97b9e66d0b2b 100644 --- a/tests/ui/parser/suggest_misplaced_generics/type.fixed +++ b/tests/ui/parser/suggest_misplaced_generics/type.fixed @@ -5,6 +5,5 @@ type Foo = T; //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the type name -//~| SUGGESTION Foo fn main() {} diff --git a/tests/ui/parser/suggest_misplaced_generics/type.rs b/tests/ui/parser/suggest_misplaced_generics/type.rs index 2d759a8b1ab61..17e200536fa3e 100644 --- a/tests/ui/parser/suggest_misplaced_generics/type.rs +++ b/tests/ui/parser/suggest_misplaced_generics/type.rs @@ -5,6 +5,5 @@ type Foo = T; //~^ ERROR expected identifier, found `<` //~| HELP place the generic parameter name after the type name -//~| SUGGESTION Foo fn main() {}