summaryrefslogtreecommitdiffstats
path: root/vendor/thiserror-impl
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
commitef24de24a82fe681581cc130f342363c47c0969a (patch)
tree0d494f7e1a38b95c92426f58fe6eaa877303a86c /vendor/thiserror-impl
parentReleasing progress-linux version 1.74.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-ef24de24a82fe681581cc130f342363c47c0969a.tar.xz
rustc-ef24de24a82fe681581cc130f342363c47c0969a.zip
Merging upstream version 1.75.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/thiserror-impl')
-rw-r--r--vendor/thiserror-impl/.cargo-checksum.json2
-rw-r--r--vendor/thiserror-impl/Cargo.toml2
-rw-r--r--vendor/thiserror-impl/src/attr.rs4
-rw-r--r--vendor/thiserror-impl/src/expand.rs113
-rw-r--r--vendor/thiserror-impl/src/lib.rs3
-rw-r--r--vendor/thiserror-impl/src/prop.rs12
-rw-r--r--vendor/thiserror-impl/src/span.rs15
7 files changed, 92 insertions, 59 deletions
diff --git a/vendor/thiserror-impl/.cargo-checksum.json b/vendor/thiserror-impl/.cargo-checksum.json
index 2a6ce1b97..434947736 100644
--- a/vendor/thiserror-impl/.cargo-checksum.json
+++ b/vendor/thiserror-impl/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"7adfcbfb61f6e08a1b05802640e4648a14cffdc6faa614f18f4ac57ec4bbfe7b","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","src/ast.rs":"c7601e8394f5ee304365c520181f0dbeaa807ddaa71ce4a8618ea1a70f81b3b2","src/attr.rs":"13404e2a5b32ac24a041b977787864d52f3d5253d685894f62fd88625a102561","src/expand.rs":"5515ef3efdd0b24e7191d1f96ff16911f4e2259148072974022295e4a93c03ea","src/fmt.rs":"d63d39120c18712596f9f2a1715821148c2becd4d8bad5bc1b307210a84dbe98","src/generics.rs":"2076cde22271be355a8131a77add4b93f83ab0af4317cd2df5471fffa4f95c66","src/lib.rs":"7d023310cd3db670554ce108a6afd94e1ae3c55c83661d4b9fcebdf1865b9e4b","src/prop.rs":"6709932aee8f9d217f40cd644629c0ecb2f46d333ae8a1398e8d745534f4e028","src/valid.rs":"ac95253944fd360d3578d0643a7baabb2cfa6bf9fbced7a6ce1f7b0529a3bb98"},"package":"6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"} \ No newline at end of file
+{"files":{"Cargo.toml":"3f5057552ccac72bba0665fbc5c5cca35a8cb5e6751eec516b1052212ce8e27d","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","src/ast.rs":"c7601e8394f5ee304365c520181f0dbeaa807ddaa71ce4a8618ea1a70f81b3b2","src/attr.rs":"ad5319f053a18ec3841300b2ae553ffa005749ba7099fe4b318126223e4dcbdf","src/expand.rs":"222c77246df56d96dddf4441ba0327579ebba89c65f0123aaab0505c51bd84a3","src/fmt.rs":"d63d39120c18712596f9f2a1715821148c2becd4d8bad5bc1b307210a84dbe98","src/generics.rs":"2076cde22271be355a8131a77add4b93f83ab0af4317cd2df5471fffa4f95c66","src/lib.rs":"a17484d590d702ea79172ef84a94de4a96b439d1a5fdac69d24417f25461af04","src/prop.rs":"5ba613e38430831259f20b258f33d57dcb783fbaeeb49e5faffa7b2a7be99e67","src/span.rs":"430460a4fa0d1fa9c627c1ddd575d2b101778fea84217591e1a93a5f6a2a0132","src/valid.rs":"ac95253944fd360d3578d0643a7baabb2cfa6bf9fbced7a6ce1f7b0529a3bb98"},"package":"266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"} \ No newline at end of file
diff --git a/vendor/thiserror-impl/Cargo.toml b/vendor/thiserror-impl/Cargo.toml
index fb311cc2c..50d361cba 100644
--- a/vendor/thiserror-impl/Cargo.toml
+++ b/vendor/thiserror-impl/Cargo.toml
@@ -13,7 +13,7 @@
edition = "2021"
rust-version = "1.56"
name = "thiserror-impl"
-version = "1.0.47"
+version = "1.0.50"
authors = ["David Tolnay <dtolnay@gmail.com>"]
description = "Implementation detail of the `thiserror` crate"
license = "MIT OR Apache-2.0"
diff --git a/vendor/thiserror-impl/src/attr.rs b/vendor/thiserror-impl/src/attr.rs
index aa71665dd..4beb8c962 100644
--- a/vendor/thiserror-impl/src/attr.rs
+++ b/vendor/thiserror-impl/src/attr.rs
@@ -197,7 +197,7 @@ impl ToTokens for Display<'_> {
let fmt = &self.fmt;
let args = &self.args;
tokens.extend(quote! {
- std::write!(__formatter, #fmt #args)
+ ::core::write!(__formatter, #fmt #args)
});
}
}
@@ -205,6 +205,6 @@ impl ToTokens for Display<'_> {
impl ToTokens for Trait {
fn to_tokens(&self, tokens: &mut TokenStream) {
let trait_name = format_ident!("{}", format!("{:?}", self));
- tokens.extend(quote!(std::fmt::#trait_name));
+ tokens.extend(quote!(::core::fmt::#trait_name));
}
}
diff --git a/vendor/thiserror-impl/src/expand.rs b/vendor/thiserror-impl/src/expand.rs
index f6822b205..9124ca3a9 100644
--- a/vendor/thiserror-impl/src/expand.rs
+++ b/vendor/thiserror-impl/src/expand.rs
@@ -1,10 +1,10 @@
use crate::ast::{Enum, Field, Input, Struct};
use crate::attr::Trait;
use crate::generics::InferredBounds;
+use crate::span::MemberSpan;
use proc_macro2::TokenStream;
use quote::{format_ident, quote, quote_spanned, ToTokens};
use std::collections::BTreeSet as Set;
-use syn::spanned::Spanned;
use syn::{
Data, DeriveInput, GenericArgument, Member, PathArguments, Result, Token, Type, Visibility,
};
@@ -23,13 +23,13 @@ fn impl_struct(input: Struct) -> TokenStream {
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
let mut error_inferred_bounds = InferredBounds::new();
- let source_body = if input.attrs.transparent.is_some() {
+ let source_body = if let Some(transparent_attr) = &input.attrs.transparent {
let only_field = &input.fields[0];
if only_field.contains_generic {
error_inferred_bounds.insert(only_field.ty, quote!(std::error::Error));
}
let member = &only_field.member;
- Some(quote! {
+ Some(quote_spanned! {transparent_attr.span=>
std::error::Error::source(self.#member.as_dyn_error())
})
} else if let Some(source_field) = input.source_field() {
@@ -39,20 +39,22 @@ fn impl_struct(input: Struct) -> TokenStream {
error_inferred_bounds.insert(ty, quote!(std::error::Error + 'static));
}
let asref = if type_is_option(source_field.ty) {
- Some(quote_spanned!(source.span()=> .as_ref()?))
+ Some(quote_spanned!(source.member_span()=> .as_ref()?))
} else {
None
};
- let dyn_error = quote_spanned!(source.span()=> self.#source #asref.as_dyn_error());
+ let dyn_error = quote_spanned! {source_field.source_span()=>
+ self.#source #asref.as_dyn_error()
+ };
Some(quote! {
- std::option::Option::Some(#dyn_error)
+ ::core::option::Option::Some(#dyn_error)
})
} else {
None
};
let source_method = source_body.map(|body| {
quote! {
- fn source(&self) -> std::option::Option<&(dyn std::error::Error + 'static)> {
+ fn source(&self) -> ::core::option::Option<&(dyn std::error::Error + 'static)> {
use thiserror::__private::AsDynError;
#body
}
@@ -65,13 +67,13 @@ fn impl_struct(input: Struct) -> TokenStream {
let body = if let Some(source_field) = input.source_field() {
let source = &source_field.member;
let source_provide = if type_is_option(source_field.ty) {
- quote_spanned! {source.span()=>
- if let std::option::Option::Some(source) = &self.#source {
+ quote_spanned! {source.member_span()=>
+ if let ::core::option::Option::Some(source) = &self.#source {
source.thiserror_provide(#request);
}
}
} else {
- quote_spanned! {source.span()=>
+ quote_spanned! {source.member_span()=>
self.#source.thiserror_provide(#request);
}
};
@@ -79,7 +81,7 @@ fn impl_struct(input: Struct) -> TokenStream {
None
} else if type_is_option(backtrace_field.ty) {
Some(quote! {
- if let std::option::Option::Some(backtrace) = &self.#backtrace {
+ if let ::core::option::Option::Some(backtrace) = &self.#backtrace {
#request.provide_ref::<std::backtrace::Backtrace>(backtrace);
}
})
@@ -95,7 +97,7 @@ fn impl_struct(input: Struct) -> TokenStream {
}
} else if type_is_option(backtrace_field.ty) {
quote! {
- if let std::option::Option::Some(backtrace) = &self.#backtrace {
+ if let ::core::option::Option::Some(backtrace) = &self.#backtrace {
#request.provide_ref::<std::backtrace::Backtrace>(backtrace);
}
}
@@ -116,18 +118,11 @@ fn impl_struct(input: Struct) -> TokenStream {
let only_field = &input.fields[0].member;
display_implied_bounds.insert((0, Trait::Display));
Some(quote! {
- std::fmt::Display::fmt(&self.#only_field, __formatter)
+ ::core::fmt::Display::fmt(&self.#only_field, __formatter)
})
} else if let Some(display) = &input.attrs.display {
display_implied_bounds = display.implied_bounds.clone();
- let use_as_display = if display.has_bonus_display {
- Some(quote! {
- #[allow(unused_imports)]
- use thiserror::__private::{DisplayAsDisplay, PathAsDisplay};
- })
- } else {
- None
- };
+ let use_as_display = use_as_display(display.has_bonus_display);
let pat = fields_pat(&input.fields);
Some(quote! {
#use_as_display
@@ -149,9 +144,9 @@ fn impl_struct(input: Struct) -> TokenStream {
let display_where_clause = display_inferred_bounds.augment_where_clause(input.generics);
quote! {
#[allow(unused_qualifications)]
- impl #impl_generics std::fmt::Display for #ty #ty_generics #display_where_clause {
+ impl #impl_generics ::core::fmt::Display for #ty #ty_generics #display_where_clause {
#[allow(clippy::used_underscore_binding)]
- fn fmt(&self, __formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
+ fn fmt(&self, __formatter: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
#body
}
}
@@ -164,7 +159,7 @@ fn impl_struct(input: Struct) -> TokenStream {
let body = from_initializer(from_field, backtrace_field);
quote! {
#[allow(unused_qualifications)]
- impl #impl_generics std::convert::From<#from> for #ty #ty_generics #where_clause {
+ impl #impl_generics ::core::convert::From<#from> for #ty #ty_generics #where_clause {
#[allow(deprecated)]
fn from(source: #from) -> Self {
#ty #body
@@ -200,13 +195,15 @@ fn impl_enum(input: Enum) -> TokenStream {
let source_method = if input.has_source() {
let arms = input.variants.iter().map(|variant| {
let ident = &variant.ident;
- if variant.attrs.transparent.is_some() {
+ if let Some(transparent_attr) = &variant.attrs.transparent {
let only_field = &variant.fields[0];
if only_field.contains_generic {
error_inferred_bounds.insert(only_field.ty, quote!(std::error::Error));
}
let member = &only_field.member;
- let source = quote!(std::error::Error::source(transparent.as_dyn_error()));
+ let source = quote_spanned! {transparent_attr.span=>
+ std::error::Error::source(transparent.as_dyn_error())
+ };
quote! {
#ty::#ident {#member: transparent} => #source,
}
@@ -217,23 +214,25 @@ fn impl_enum(input: Enum) -> TokenStream {
error_inferred_bounds.insert(ty, quote!(std::error::Error + 'static));
}
let asref = if type_is_option(source_field.ty) {
- Some(quote_spanned!(source.span()=> .as_ref()?))
+ Some(quote_spanned!(source.member_span()=> .as_ref()?))
} else {
None
};
let varsource = quote!(source);
- let dyn_error = quote_spanned!(source.span()=> #varsource #asref.as_dyn_error());
+ let dyn_error = quote_spanned! {source_field.source_span()=>
+ #varsource #asref.as_dyn_error()
+ };
quote! {
- #ty::#ident {#source: #varsource, ..} => std::option::Option::Some(#dyn_error),
+ #ty::#ident {#source: #varsource, ..} => ::core::option::Option::Some(#dyn_error),
}
} else {
quote! {
- #ty::#ident {..} => std::option::Option::None,
+ #ty::#ident {..} => ::core::option::Option::None,
}
}
});
Some(quote! {
- fn source(&self) -> std::option::Option<&(dyn std::error::Error + 'static)> {
+ fn source(&self) -> ::core::option::Option<&(dyn std::error::Error + 'static)> {
use thiserror::__private::AsDynError;
#[allow(deprecated)]
match self {
@@ -257,19 +256,19 @@ fn impl_enum(input: Enum) -> TokenStream {
let source = &source_field.member;
let varsource = quote!(source);
let source_provide = if type_is_option(source_field.ty) {
- quote_spanned! {source.span()=>
- if let std::option::Option::Some(source) = #varsource {
+ quote_spanned! {source.member_span()=>
+ if let ::core::option::Option::Some(source) = #varsource {
source.thiserror_provide(#request);
}
}
} else {
- quote_spanned! {source.span()=>
+ quote_spanned! {source.member_span()=>
#varsource.thiserror_provide(#request);
}
};
let self_provide = if type_is_option(backtrace_field.ty) {
quote! {
- if let std::option::Option::Some(backtrace) = backtrace {
+ if let ::core::option::Option::Some(backtrace) = backtrace {
#request.provide_ref::<std::backtrace::Backtrace>(backtrace);
}
}
@@ -296,13 +295,13 @@ fn impl_enum(input: Enum) -> TokenStream {
let backtrace = &backtrace_field.member;
let varsource = quote!(source);
let source_provide = if type_is_option(source_field.ty) {
- quote_spanned! {backtrace.span()=>
- if let std::option::Option::Some(source) = #varsource {
+ quote_spanned! {backtrace.member_span()=>
+ if let ::core::option::Option::Some(source) = #varsource {
source.thiserror_provide(#request);
}
}
} else {
- quote_spanned! {backtrace.span()=>
+ quote_spanned! {backtrace.member_span()=>
#varsource.thiserror_provide(#request);
}
};
@@ -317,7 +316,7 @@ fn impl_enum(input: Enum) -> TokenStream {
let backtrace = &backtrace_field.member;
let body = if type_is_option(backtrace_field.ty) {
quote! {
- if let std::option::Option::Some(backtrace) = backtrace {
+ if let ::core::option::Option::Some(backtrace) = backtrace {
#request.provide_ref::<std::backtrace::Backtrace>(backtrace);
}
}
@@ -351,19 +350,13 @@ fn impl_enum(input: Enum) -> TokenStream {
let display_impl = if input.has_display() {
let mut display_inferred_bounds = InferredBounds::new();
- let use_as_display = if input.variants.iter().any(|v| {
+ let has_bonus_display = input.variants.iter().any(|v| {
v.attrs
.display
.as_ref()
.map_or(false, |display| display.has_bonus_display)
- }) {
- Some(quote! {
- #[allow(unused_imports)]
- use thiserror::__private::{DisplayAsDisplay, PathAsDisplay};
- })
- } else {
- None
- };
+ });
+ let use_as_display = use_as_display(has_bonus_display);
let void_deref = if input.variants.is_empty() {
Some(quote!(*))
} else {
@@ -382,7 +375,7 @@ fn impl_enum(input: Enum) -> TokenStream {
Member::Unnamed(index) => format_ident!("_{}", index),
};
display_implied_bounds.insert((0, Trait::Display));
- quote!(std::fmt::Display::fmt(#only_field, __formatter))
+ quote!(::core::fmt::Display::fmt(#only_field, __formatter))
}
};
for (field, bound) in display_implied_bounds {
@@ -401,8 +394,8 @@ fn impl_enum(input: Enum) -> TokenStream {
let display_where_clause = display_inferred_bounds.augment_where_clause(input.generics);
Some(quote! {
#[allow(unused_qualifications)]
- impl #impl_generics std::fmt::Display for #ty #ty_generics #display_where_clause {
- fn fmt(&self, __formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
+ impl #impl_generics ::core::fmt::Display for #ty #ty_generics #display_where_clause {
+ fn fmt(&self, __formatter: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
#use_as_display
#[allow(unused_variables, deprecated, clippy::used_underscore_binding)]
match #void_deref self {
@@ -423,7 +416,7 @@ fn impl_enum(input: Enum) -> TokenStream {
let body = from_initializer(from_field, backtrace_field);
Some(quote! {
#[allow(unused_qualifications)]
- impl #impl_generics std::convert::From<#from> for #ty #ty_generics #where_clause {
+ impl #impl_generics ::core::convert::From<#from> for #ty #ty_generics #where_clause {
#[allow(deprecated)]
fn from(source: #from) -> Self {
#ty::#variant #body
@@ -466,10 +459,20 @@ fn fields_pat(fields: &[Field]) -> TokenStream {
}
}
+fn use_as_display(needs_as_display: bool) -> Option<TokenStream> {
+ if needs_as_display {
+ Some(quote! {
+ use thiserror::__private::AsDisplay as _;
+ })
+ } else {
+ None
+ }
+}
+
fn from_initializer(from_field: &Field, backtrace_field: Option<&Field>) -> TokenStream {
let from_member = &from_field.member;
let some_source = if type_is_option(from_field.ty) {
- quote!(std::option::Option::Some(source))
+ quote!(::core::option::Option::Some(source))
} else {
quote!(source)
};
@@ -477,11 +480,11 @@ fn from_initializer(from_field: &Field, backtrace_field: Option<&Field>) -> Toke
let backtrace_member = &backtrace_field.member;
if type_is_option(backtrace_field.ty) {
quote! {
- #backtrace_member: std::option::Option::Some(std::backtrace::Backtrace::capture()),
+ #backtrace_member: ::core::option::Option::Some(std::backtrace::Backtrace::capture()),
}
} else {
quote! {
- #backtrace_member: std::convert::From::from(std::backtrace::Backtrace::capture()),
+ #backtrace_member: ::core::convert::From::from(std::backtrace::Backtrace::capture()),
}
}
});
diff --git a/vendor/thiserror-impl/src/lib.rs b/vendor/thiserror-impl/src/lib.rs
index f0fc96917..cc86dc49e 100644
--- a/vendor/thiserror-impl/src/lib.rs
+++ b/vendor/thiserror-impl/src/lib.rs
@@ -3,8 +3,10 @@
clippy::cast_lossless,
clippy::cast_possible_truncation,
clippy::manual_find,
+ clippy::manual_let_else,
clippy::manual_map,
clippy::map_unwrap_or,
+ clippy::module_name_repetitions,
clippy::needless_pass_by_value,
clippy::option_if_let_else,
clippy::range_plus_one,
@@ -21,6 +23,7 @@ mod expand;
mod fmt;
mod generics;
mod prop;
+mod span;
mod valid;
use proc_macro::TokenStream;
diff --git a/vendor/thiserror-impl/src/prop.rs b/vendor/thiserror-impl/src/prop.rs
index 6d8a924c1..2867cd312 100644
--- a/vendor/thiserror-impl/src/prop.rs
+++ b/vendor/thiserror-impl/src/prop.rs
@@ -1,4 +1,6 @@
use crate::ast::{Enum, Field, Struct, Variant};
+use crate::span::MemberSpan;
+use proc_macro2::Span;
use syn::{Member, Type};
impl Struct<'_> {
@@ -70,6 +72,16 @@ impl Field<'_> {
pub(crate) fn is_backtrace(&self) -> bool {
type_is_backtrace(self.ty)
}
+
+ pub(crate) fn source_span(&self) -> Span {
+ if let Some(source_attr) = &self.attrs.source {
+ source_attr.path().get_ident().unwrap().span()
+ } else if let Some(from_attr) = &self.attrs.from {
+ from_attr.path().get_ident().unwrap().span()
+ } else {
+ self.member.member_span()
+ }
+ }
}
fn from_field<'a, 'b>(fields: &'a [Field<'b>]) -> Option<&'a Field<'b>> {
diff --git a/vendor/thiserror-impl/src/span.rs b/vendor/thiserror-impl/src/span.rs
new file mode 100644
index 000000000..c1237ddfc
--- /dev/null
+++ b/vendor/thiserror-impl/src/span.rs
@@ -0,0 +1,15 @@
+use proc_macro2::Span;
+use syn::Member;
+
+pub trait MemberSpan {
+ fn member_span(&self) -> Span;
+}
+
+impl MemberSpan for Member {
+ fn member_span(&self) -> Span {
+ match self {
+ Member::Named(ident) => ident.span(),
+ Member::Unnamed(index) => index.span,
+ }
+ }
+}