diff options
Diffstat (limited to 'src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs')
-rw-r--r-- | src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs | 321 |
1 files changed, 199 insertions, 122 deletions
diff --git a/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs b/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs index 812ca0c72..efec85eb5 100644 --- a/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs +++ b/src/test/ui-fulldeps/session-diagnostic/subdiagnostic-derive.rs @@ -1,8 +1,8 @@ // check-fail -// Tests error conditions for specifying subdiagnostics using #[derive(SessionSubdiagnostic)] +// Tests error conditions for specifying subdiagnostics using #[derive(Subdiagnostic)] // The proc_macro2 crate handles spans differently when on beta/stable release rather than nightly, -// changing the output of this test. Since SessionSubdiagnostic is strictly internal to the compiler +// changing the output of this test. Since Subdiagnostic is strictly internal to the compiler // the test is just ignored on stable and beta: // ignore-beta // ignore-stable @@ -17,25 +17,25 @@ extern crate rustc_macros; use rustc_errors::Applicability; use rustc_span::Span; -use rustc_macros::SessionSubdiagnostic; +use rustc_macros::Subdiagnostic; -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] struct A { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum B { - #[label(parser::add_paren)] + #[label(parser_add_paren)] A { #[primary_span] span: Span, var: String, }, - #[label(parser::add_paren)] + #[label(parser_add_paren)] B { #[primary_span] span: Span, @@ -43,23 +43,23 @@ enum B { } } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] //~^ ERROR label without `#[primary_span]` field struct C { var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label] -//~^ ERROR `#[label]` is not a valid attribute +//~^ ERROR diagnostic slug must be first argument struct D { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[foo] //~^ ERROR `#[foo]` is not a valid attribute //~^^ ERROR cannot find attribute `foo` in this scope @@ -69,7 +69,7 @@ struct E { var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label = "..."] //~^ ERROR `#[label = ...]` is not a valid attribute struct F { @@ -78,43 +78,47 @@ struct F { var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label(bug = "...")] //~^ ERROR `#[label(bug = ...)]` is not a valid attribute +//~| ERROR diagnostic slug must be first argument struct G { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label("...")] //~^ ERROR `#[label("...")]` is not a valid attribute +//~| ERROR diagnostic slug must be first argument struct H { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label(slug = 4)] //~^ ERROR `#[label(slug = ...)]` is not a valid attribute +//~| ERROR diagnostic slug must be first argument struct J { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label(slug("..."))] //~^ ERROR `#[label(slug(...))]` is not a valid attribute +//~| ERROR diagnostic slug must be first argument struct K { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label(slug)] //~^ ERROR cannot find value `slug` in module `rustc_errors::fluent` //~^^ NOTE not found in `rustc_errors::fluent` @@ -124,7 +128,7 @@ struct L { var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label()] //~^ ERROR diagnostic slug must be first argument of a `#[label(...)]` attribute struct M { @@ -133,30 +137,30 @@ struct M { var: String, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren, code = "...")] -//~^ ERROR `code` is not a valid nested attribute of a `label` attribute +#[derive(Subdiagnostic)] +#[label(parser_add_paren, code = "...")] +//~^ ERROR `#[label(code = ...)]` is not a valid attribute struct N { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren, applicability = "machine-applicable")] -//~^ ERROR `applicability` is not a valid nested attribute of a `label` attribute +#[derive(Subdiagnostic)] +#[label(parser_add_paren, applicability = "machine-applicable")] +//~^ ERROR `#[label(applicability = ...)]` is not a valid attribute struct O { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[foo] //~^ ERROR cannot find attribute `foo` in this scope //~^^ ERROR unsupported type attribute for subdiagnostic enum enum P { - #[label(parser::add_paren)] + #[label(parser_add_paren)] A { #[primary_span] span: Span, @@ -164,7 +168,7 @@ enum P { } } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum Q { #[bar] //~^ ERROR `#[bar]` is not a valid attribute @@ -176,7 +180,7 @@ enum Q { } } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum R { #[bar = "..."] //~^ ERROR `#[bar = ...]` is not a valid attribute @@ -188,7 +192,7 @@ enum R { } } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum S { #[bar = 4] //~^ ERROR `#[bar = ...]` is not a valid attribute @@ -200,7 +204,7 @@ enum S { } } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum T { #[bar("...")] //~^ ERROR `#[bar(...)]` is not a valid attribute @@ -212,10 +216,11 @@ enum T { } } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum U { #[label(code = "...")] //~^ ERROR diagnostic slug must be first argument of a `#[label(...)]` attribute + //~| ERROR `#[label(code = ...)]` is not a valid attribute A { #[primary_span] span: Span, @@ -223,24 +228,23 @@ enum U { } } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum V { - #[label(parser::add_paren)] + #[label(parser_add_paren)] A { #[primary_span] span: Span, var: String, }, B { - //~^ ERROR subdiagnostic kind not specified #[primary_span] span: Span, var: String, } } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] //~^ ERROR label without `#[primary_span]` field struct W { #[primary_span] @@ -248,8 +252,8 @@ struct W { span: String, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] struct X { #[primary_span] span: Span, @@ -258,8 +262,8 @@ struct X { applicability: Applicability, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] struct Y { #[primary_span] span: Span, @@ -269,8 +273,8 @@ struct Y { bar: String, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] struct Z { #[primary_span] span: Span, @@ -280,8 +284,8 @@ struct Z { bar: String, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] struct AA { #[primary_span] span: Span, @@ -291,8 +295,8 @@ struct AA { bar: String, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] struct AB { #[primary_span] span: Span, @@ -300,31 +304,31 @@ struct AB { z: Z } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] union AC { //~^ ERROR unexpected unsupported untagged union span: u32, b: u64 } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] +#[label(parser_add_paren)] struct AD { #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren, parser::add_paren)] -//~^ ERROR `#[label(parser::add_paren)]` is not a valid attribute +#[derive(Subdiagnostic)] +#[label(parser_add_paren, parser_add_paren)] +//~^ ERROR `#[label(parser_add_paren)]` is not a valid attribute struct AE { #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] -#[label(parser::add_paren)] +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] struct AF { #[primary_span] //~^ NOTE previously specified here @@ -334,15 +338,15 @@ struct AF { span_b: Span, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] struct AG { //~^ ERROR subdiagnostic kind not specified #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code = "...")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "...")] struct AH { #[primary_span] span: Span, @@ -351,9 +355,9 @@ struct AH { var: String, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum AI { - #[suggestion(parser::add_paren, code = "...")] + #[suggestion(parser_add_paren, code = "...")] A { #[primary_span] span: Span, @@ -361,7 +365,7 @@ enum AI { applicability: Applicability, var: String, }, - #[suggestion(parser::add_paren, code = "...")] + #[suggestion(parser_add_paren, code = "...")] B { #[primary_span] span: Span, @@ -371,8 +375,8 @@ enum AI { } } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code = "...", code = "...")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "...", code = "...")] //~^ ERROR specified multiple times //~^^ NOTE previously specified here struct AJ { @@ -382,8 +386,8 @@ struct AJ { applicability: Applicability, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code = "...")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "...")] struct AK { #[primary_span] span: Span, @@ -395,8 +399,8 @@ struct AK { applicability_b: Applicability, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code = "...")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "...")] struct AL { #[primary_span] span: Span, @@ -405,15 +409,15 @@ struct AL { applicability: Span, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code = "...")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "...")] struct AM { #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren)] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren)] //~^ ERROR suggestion without `code = "..."` struct AN { #[primary_span] @@ -422,43 +426,43 @@ struct AN { applicability: Applicability, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code ="...", applicability = "foo")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code ="...", applicability = "foo")] //~^ ERROR invalid applicability struct AO { #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] -#[help(parser::add_paren)] +#[derive(Subdiagnostic)] +#[help(parser_add_paren)] struct AP { var: String } -#[derive(SessionSubdiagnostic)] -#[note(parser::add_paren)] +#[derive(Subdiagnostic)] +#[note(parser_add_paren)] struct AQ; -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code = "...")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "...")] //~^ ERROR suggestion without `#[primary_span]` field struct AR { var: String, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code ="...", applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code ="...", applicability = "machine-applicable")] struct AS { #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] #[label] //~^ ERROR unsupported type attribute for subdiagnostic enum enum AT { - #[label(parser::add_paren)] + #[label(parser_add_paren)] A { #[primary_span] span: Span, @@ -466,25 +470,25 @@ enum AT { } } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code ="{var}", applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code ="{var}", applicability = "machine-applicable")] struct AU { #[primary_span] span: Span, var: String, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code ="{var}", applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code ="{var}", applicability = "machine-applicable")] //~^ ERROR `var` doesn't refer to a field on this type struct AV { #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum AW { - #[suggestion(parser::add_paren, code ="{var}", applicability = "machine-applicable")] + #[suggestion(parser_add_paren, code ="{var}", applicability = "machine-applicable")] A { #[primary_span] span: Span, @@ -492,9 +496,9 @@ enum AW { } } -#[derive(SessionSubdiagnostic)] +#[derive(Subdiagnostic)] enum AX { - #[suggestion(parser::add_paren, code ="{var}", applicability = "machine-applicable")] + #[suggestion(parser_add_paren, code ="{var}", applicability = "machine-applicable")] //~^ ERROR `var` doesn't refer to a field on this type A { #[primary_span] @@ -502,19 +506,19 @@ enum AX { } } -#[derive(SessionSubdiagnostic)] -#[warning(parser::add_paren)] +#[derive(Subdiagnostic)] +#[warning(parser_add_paren)] struct AY {} -#[derive(SessionSubdiagnostic)] -#[warning(parser::add_paren)] +#[derive(Subdiagnostic)] +#[warning(parser_add_paren)] struct AZ { #[primary_span] span: Span, } -#[derive(SessionSubdiagnostic)] -#[suggestion(parser::add_paren, code = "...")] +#[derive(Subdiagnostic)] +#[suggestion(parser_add_paren, code = "...")] //~^ ERROR suggestion without `#[primary_span]` field struct BA { #[suggestion_part] @@ -528,32 +532,32 @@ struct BA { var: String, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren, code = "...", applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren, code = "...", applicability = "machine-applicable")] //~^ ERROR multipart suggestion without any `#[suggestion_part(...)]` fields -//~| ERROR `code` is not a valid nested attribute of a `multipart_suggestion` attribute +//~| ERROR `#[multipart_suggestion(code = ...)]` is not a valid attribute struct BBa { var: String, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren, applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren, applicability = "machine-applicable")] struct BBb { #[suggestion_part] //~^ ERROR `#[suggestion_part(...)]` attribute without `code = "..."` span1: Span, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren, applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren, applicability = "machine-applicable")] struct BBc { #[suggestion_part()] //~^ ERROR `#[suggestion_part(...)]` attribute without `code = "..."` span1: Span, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren)] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] //~^ ERROR multipart suggestion without any `#[suggestion_part(...)]` fields struct BC { #[primary_span] @@ -561,8 +565,8 @@ struct BC { span: Span, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren)] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] struct BD { #[suggestion_part] //~^ ERROR `#[suggestion_part(...)]` attribute without `code = "..."` @@ -581,8 +585,8 @@ struct BD { s2: String, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren, applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren, applicability = "machine-applicable")] struct BE { #[suggestion_part(code = "...", code = ",,,")] //~^ ERROR specified multiple times @@ -590,8 +594,8 @@ struct BE { span: Span, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren, applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren, applicability = "machine-applicable")] struct BF { #[suggestion_part(code = "(")] first: Span, @@ -599,8 +603,8 @@ struct BF { second: Span, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren)] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] struct BG { #[applicability] appl: Applicability, @@ -610,12 +614,11 @@ struct BG { second: Span, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren, applicability = "machine-applicable")] -//~^ NOTE previously specified here +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren, applicability = "machine-applicable")] struct BH { #[applicability] - //~^ ERROR specified multiple times + //~^ ERROR `#[applicability]` has no effect appl: Applicability, #[suggestion_part(code = "(")] first: Span, @@ -623,9 +626,83 @@ struct BH { second: Span, } -#[derive(SessionSubdiagnostic)] -#[multipart_suggestion(parser::add_paren, applicability = "machine-applicable")] +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren, applicability = "machine-applicable")] struct BI { #[suggestion_part(code = "")] spans: Vec<Span>, } + +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] +struct BJ { + #[primary_span] + span: Span, + r#type: String, +} + +/// with a doc comment on the type.. +#[derive(Subdiagnostic)] +#[label(parser_add_paren)] +struct BK { + /// ..and the field + #[primary_span] + span: Span, +} + +/// with a doc comment on the type.. +#[derive(Subdiagnostic)] +enum BL { + /// ..and the variant.. + #[label(parser_add_paren)] + Foo { + /// ..and the field + #[primary_span] + span: Span, + } +} + +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] +struct BM { + #[suggestion_part(code("foo"))] + //~^ ERROR expected exactly one string literal for `code = ...` + span: Span, + r#type: String, +} + +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] +struct BN { + #[suggestion_part(code("foo", "bar"))] + //~^ ERROR expected exactly one string literal for `code = ...` + span: Span, + r#type: String, +} + +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] +struct BO { + #[suggestion_part(code(3))] + //~^ ERROR expected exactly one string literal for `code = ...` + span: Span, + r#type: String, +} + +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] +struct BP { + #[suggestion_part(code())] + //~^ ERROR expected exactly one string literal for `code = ...` + span: Span, + r#type: String, +} + +#[derive(Subdiagnostic)] +#[multipart_suggestion(parser_add_paren)] +struct BQ { + #[suggestion_part(code = 3)] + //~^ ERROR `code = "..."`/`code(...)` must contain only string literals + span: Span, + r#type: String, +} |