From d8f1d57c0abcaf7499ff3e9f2d7bc0645d8f6720 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Thu, 27 Jul 2023 10:07:45 +0200 Subject: [PATCH] Update error span for attribute / data kind mismatches --- serde_derive/src/internals/attr.rs | 40 +++++++++---------- .../tests/ui/default-attribute/enum.stderr | 6 +-- .../ui/default-attribute/enum_path.stderr | 6 +-- .../nameless_struct_fields_path.stderr | 6 +-- .../untagged-struct.stderr | 6 +-- .../internally-tagged-tuple.stderr | 6 +-- .../internally-tagged-unit.stderr | 8 ++-- 7 files changed, 38 insertions(+), 40 deletions(-) diff --git a/serde_derive/src/internals/attr.rs b/serde_derive/src/internals/attr.rs index 574ad2bc4..d90d8f041 100644 --- a/serde_derive/src/internals/attr.rs +++ b/serde_derive/src/internals/attr.rs @@ -410,16 +410,16 @@ impl Container { } syn::Fields::Unnamed(_) | syn::Fields::Unit => { let msg = "#[serde(default = \"...\")] can only be used on structs with named fields"; - cx.error_spanned_by(fields, msg); + cx.error_spanned_by(&meta.path, msg); } }, - syn::Data::Enum(syn::DataEnum { enum_token, .. }) => { + syn::Data::Enum(_) => { let msg = "#[serde(default = \"...\")] can only be used on structs with named fields"; - cx.error_spanned_by(enum_token, msg); + cx.error_spanned_by(&meta.path, msg); } - syn::Data::Union(syn::DataUnion { union_token, .. }) => { + syn::Data::Union(_) => { let msg = "#[serde(default = \"...\")] can only be used on structs with named fields"; - cx.error_spanned_by(union_token, msg); + cx.error_spanned_by(&meta.path, msg); } } } @@ -435,13 +435,13 @@ impl Container { cx.error_spanned_by(fields, msg); } }, - syn::Data::Enum(syn::DataEnum { enum_token, .. }) => { + syn::Data::Enum(_) => { let msg = "#[serde(default)] can only be used on structs with named fields"; - cx.error_spanned_by(enum_token, msg); + cx.error_spanned_by(&meta.path, msg); } - syn::Data::Union(syn::DataUnion { union_token, .. }) => { + syn::Data::Union(_) => { let msg = "#[serde(default)] can only be used on structs with named fields"; - cx.error_spanned_by(union_token, msg); + cx.error_spanned_by(&meta.path, msg); } } } @@ -457,13 +457,13 @@ impl Container { syn::Data::Enum(_) => { untagged.set_true(&meta.path); } - syn::Data::Struct(syn::DataStruct { struct_token, .. }) => { + syn::Data::Struct(_) => { let msg = "#[serde(untagged)] can only be used on enums"; - cx.error_spanned_by(struct_token, msg); + cx.error_spanned_by(&meta.path, msg); } - syn::Data::Union(syn::DataUnion { union_token, .. }) => { + syn::Data::Union(_) => { let msg = "#[serde(untagged)] can only be used on enums"; - cx.error_spanned_by(union_token, msg); + cx.error_spanned_by(&meta.path, msg); } } } else if meta.path == TAG { @@ -479,12 +479,12 @@ impl Container { } syn::Fields::Unnamed(_) | syn::Fields::Unit => { let msg = "#[serde(tag = \"...\")] can only be used on enums and structs with named fields"; - cx.error_spanned_by(fields, msg); + cx.error_spanned_by(&meta.path, msg); } }, - syn::Data::Union(syn::DataUnion { union_token, .. }) => { + syn::Data::Union(_) => { let msg = "#[serde(tag = \"...\")] can only be used on enums and structs with named fields"; - cx.error_spanned_by(union_token, msg); + cx.error_spanned_by(&meta.path, msg); } } } @@ -495,13 +495,13 @@ impl Container { syn::Data::Enum(_) => { content.set(&meta.path, s.value()); } - syn::Data::Struct(syn::DataStruct { struct_token, .. }) => { + syn::Data::Struct(_) => { let msg = "#[serde(content = \"...\")] can only be used on enums"; - cx.error_spanned_by(struct_token, msg); + cx.error_spanned_by(&meta.path, msg); } - syn::Data::Union(syn::DataUnion { union_token, .. }) => { + syn::Data::Union(_) => { let msg = "#[serde(content = \"...\")] can only be used on enums"; - cx.error_spanned_by(union_token, msg); + cx.error_spanned_by(&meta.path, msg); } } } diff --git a/test_suite/tests/ui/default-attribute/enum.stderr b/test_suite/tests/ui/default-attribute/enum.stderr index 8f58ad66f..83e5079fc 100644 --- a/test_suite/tests/ui/default-attribute/enum.stderr +++ b/test_suite/tests/ui/default-attribute/enum.stderr @@ -1,5 +1,5 @@ error: #[serde(default)] can only be used on structs with named fields - --> tests/ui/default-attribute/enum.rs:5:1 + --> tests/ui/default-attribute/enum.rs:4:9 | -5 | enum E { - | ^^^^ +4 | #[serde(default)] + | ^^^^^^^ diff --git a/test_suite/tests/ui/default-attribute/enum_path.stderr b/test_suite/tests/ui/default-attribute/enum_path.stderr index 008c12423..ab99b091b 100644 --- a/test_suite/tests/ui/default-attribute/enum_path.stderr +++ b/test_suite/tests/ui/default-attribute/enum_path.stderr @@ -1,5 +1,5 @@ error: #[serde(default = "...")] can only be used on structs with named fields - --> tests/ui/default-attribute/enum_path.rs:5:1 + --> tests/ui/default-attribute/enum_path.rs:4:9 | -5 | enum E { - | ^^^^ +4 | #[serde(default = "default_e")] + | ^^^^^^^ diff --git a/test_suite/tests/ui/default-attribute/nameless_struct_fields_path.stderr b/test_suite/tests/ui/default-attribute/nameless_struct_fields_path.stderr index 40415ff93..0ccd52615 100644 --- a/test_suite/tests/ui/default-attribute/nameless_struct_fields_path.stderr +++ b/test_suite/tests/ui/default-attribute/nameless_struct_fields_path.stderr @@ -1,5 +1,5 @@ error: #[serde(default = "...")] can only be used on structs with named fields - --> tests/ui/default-attribute/nameless_struct_fields_path.rs:5:9 + --> tests/ui/default-attribute/nameless_struct_fields_path.rs:4:9 | -5 | struct T(u8, u8); - | ^^^^^^^^ +4 | #[serde(default = "default_t")] + | ^^^^^^^ diff --git a/test_suite/tests/ui/enum-representation/untagged-struct.stderr b/test_suite/tests/ui/enum-representation/untagged-struct.stderr index 74eb0ae2b..495a9f4f7 100644 --- a/test_suite/tests/ui/enum-representation/untagged-struct.stderr +++ b/test_suite/tests/ui/enum-representation/untagged-struct.stderr @@ -1,5 +1,5 @@ error: #[serde(untagged)] can only be used on enums - --> tests/ui/enum-representation/untagged-struct.rs:5:1 + --> tests/ui/enum-representation/untagged-struct.rs:4:9 | -5 | struct S; - | ^^^^^^ +4 | #[serde(untagged)] + | ^^^^^^^^ diff --git a/test_suite/tests/ui/struct-representation/internally-tagged-tuple.stderr b/test_suite/tests/ui/struct-representation/internally-tagged-tuple.stderr index e6282aeb4..35d28f122 100644 --- a/test_suite/tests/ui/struct-representation/internally-tagged-tuple.stderr +++ b/test_suite/tests/ui/struct-representation/internally-tagged-tuple.stderr @@ -1,5 +1,5 @@ error: #[serde(tag = "...")] can only be used on enums and structs with named fields - --> tests/ui/struct-representation/internally-tagged-tuple.rs:5:9 + --> tests/ui/struct-representation/internally-tagged-tuple.rs:4:9 | -5 | struct S(u8, u8); - | ^^^^^^^^ +4 | #[serde(tag = "type")] + | ^^^ diff --git a/test_suite/tests/ui/struct-representation/internally-tagged-unit.stderr b/test_suite/tests/ui/struct-representation/internally-tagged-unit.stderr index 040c44e4d..04688943a 100644 --- a/test_suite/tests/ui/struct-representation/internally-tagged-unit.stderr +++ b/test_suite/tests/ui/struct-representation/internally-tagged-unit.stderr @@ -1,7 +1,5 @@ error: #[serde(tag = "...")] can only be used on enums and structs with named fields - --> tests/ui/struct-representation/internally-tagged-unit.rs:3:10 + --> tests/ui/struct-representation/internally-tagged-unit.rs:4:9 | -3 | #[derive(Serialize)] - | ^^^^^^^^^ - | - = note: this error originates in the derive macro `Serialize` (in Nightly builds, run with -Z macro-backtrace for more info) +4 | #[serde(tag = "type")] + | ^^^