diff options
author | Charisee Chiw <chiw@google.com> | 2023-10-13 23:22:52 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-10-13 23:22:52 +0000 |
commit | 48928be877811f047eaae45cf6d8e61f6a1e1fad (patch) | |
tree | 4dbb8129d887b79ab048b85c1a92906fd60d9a77 | |
parent | e59752163bb588aa8da7b07018b84fcad43aa122 (diff) | |
parent | fdfc9c7d3259dda1e596fb6295a23199c8aa95a8 (diff) | |
download | thiserror-impl-48928be877811f047eaae45cf6d8e61f6a1e1fad.tar.gz |
Update thiserror-impl crate to 1.0.49 am: 9c2299da75 am: a2fb7198d0 am: ae80c6b398 am: fdfc9c7d32
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/thiserror-impl/+/2787856
Change-Id: I21c30076dcbe863eed2515c9173a0102e1016fb9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | Cargo.toml | 34 | ||||
-rw-r--r-- | src/attr.rs | 23 | ||||
-rw-r--r-- | src/expand.rs | 113 | ||||
-rw-r--r-- | src/lib.rs | 1 |
4 files changed, 72 insertions, 99 deletions
@@ -1,35 +1,21 @@ -# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO -# -# When uploading crates to the registry Cargo will automatically -# "normalize" Cargo.toml files for maximal compatibility -# with all versions of Cargo and also rewrite `path` dependencies -# to registry (e.g., crates.io) dependencies. -# -# If you are reading this file be aware that the original Cargo.toml -# will likely look very different (and much more reasonable). -# See Cargo.toml.orig for the original contents. - [package] -edition = "2018" -rust-version = "1.56" name = "thiserror-impl" -version = "1.0.40" +version = "1.0.49" authors = ["David Tolnay <dtolnay@gmail.com>"] description = "Implementation detail of the `thiserror` crate" +edition = "2021" license = "MIT OR Apache-2.0" repository = "https://github.com/dtolnay/thiserror" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] +rust-version = "1.56" [lib] proc-macro = true -[dependencies.proc-macro2] -version = "1.0" - -[dependencies.quote] -version = "1.0" +[dependencies] +proc-macro2 = "1.0.63" +quote = "1.0.29" +syn = "2.0.23" -[dependencies.syn] -version = "2.0" +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] +rustdoc-args = ["--generate-link-to-definition"] diff --git a/src/attr.rs b/src/attr.rs index 0b1b89d..02a4f2e 100644 --- a/src/attr.rs +++ b/src/attr.rs @@ -1,8 +1,9 @@ use proc_macro2::{Delimiter, Group, Span, TokenStream, TokenTree}; use quote::{format_ident, quote, ToTokens}; use std::collections::BTreeSet as Set; -use std::iter::FromIterator; use syn::parse::ParseStream; +use std::iter::FromIterator; + use syn::{ braced, bracketed, parenthesized, token, Attribute, Error, Ident, Index, LitInt, LitStr, Meta, Result, Token, @@ -57,13 +58,13 @@ pub fn get(input: &[Attribute]) -> Result<Attrs> { if attr.path().is_ident("error") { parse_error_attribute(&mut attrs, attr)?; } else if attr.path().is_ident("source") { - require_empty_attribute(attr)?; + attr.meta.require_path_only()?; if attrs.source.is_some() { return Err(Error::new_spanned(attr, "duplicate #[source] attribute")); } attrs.source = Some(attr); } else if attr.path().is_ident("backtrace") { - require_empty_attribute(attr)?; + attr.meta.require_path_only()?; if attrs.backtrace.is_some() { return Err(Error::new_spanned(attr, "duplicate #[backtrace] attribute")); } @@ -193,24 +194,12 @@ fn parse_token_expr(input: ParseStream, mut begin_expr: bool) -> Result<TokenStr Ok(TokenStream::from_iter(tokens)) } -fn require_empty_attribute(attr: &Attribute) -> Result<()> { - let error_span = match &attr.meta { - Meta::Path(_) => return Ok(()), - Meta::List(meta) => meta.delimiter.span().open(), - Meta::NameValue(meta) => meta.eq_token.span, - }; - Err(Error::new( - error_span, - "unexpected token in thiserror attribute", - )) -} - impl ToTokens for Display<'_> { fn to_tokens(&self, tokens: &mut TokenStream) { let fmt = &self.fmt; let args = &self.args; tokens.extend(quote! { - write!(__formatter, #fmt #args) + ::core::write!(__formatter, #fmt #args) }); } } @@ -218,6 +207,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/src/expand.rs b/src/expand.rs index ef8eaf3..a1fe0c7 100644 --- a/src/expand.rs +++ b/src/expand.rs @@ -45,14 +45,14 @@ fn impl_struct(input: Struct) -> TokenStream { }; let dyn_error = quote_spanned!(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 } @@ -60,32 +60,32 @@ fn impl_struct(input: Struct) -> TokenStream { }); let provide_method = input.backtrace_field().map(|backtrace_field| { - let demand = quote!(demand); + let request = quote!(request); let backtrace = &backtrace_field.member; 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 { - source.thiserror_provide(#demand); + if let ::core::option::Option::Some(source) = &self.#source { + source.thiserror_provide(#request); } } } else { quote_spanned! {source.span()=> - self.#source.thiserror_provide(#demand); + self.#source.thiserror_provide(#request); } }; let self_provide = if source == backtrace { None } else if type_is_option(backtrace_field.ty) { Some(quote! { - if let std::option::Option::Some(backtrace) = &self.#backtrace { - #demand.provide_ref::<std::backtrace::Backtrace>(backtrace); + if let ::core::option::Option::Some(backtrace) = &self.#backtrace { + #request.provide_ref::<std::backtrace::Backtrace>(backtrace); } }) } else { Some(quote! { - #demand.provide_ref::<std::backtrace::Backtrace>(&self.#backtrace); + #request.provide_ref::<std::backtrace::Backtrace>(&self.#backtrace); }) }; quote! { @@ -95,17 +95,17 @@ fn impl_struct(input: Struct) -> TokenStream { } } else if type_is_option(backtrace_field.ty) { quote! { - if let std::option::Option::Some(backtrace) = &self.#backtrace { - #demand.provide_ref::<std::backtrace::Backtrace>(backtrace); + if let ::core::option::Option::Some(backtrace) = &self.#backtrace { + #request.provide_ref::<std::backtrace::Backtrace>(backtrace); } } } else { quote! { - #demand.provide_ref::<std::backtrace::Backtrace>(&self.#backtrace); + #request.provide_ref::<std::backtrace::Backtrace>(&self.#backtrace); } }; quote! { - fn provide<'_demand>(&'_demand self, #demand: &mut std::any::Demand<'_demand>) { + fn provide<'_request>(&'_request self, #request: &mut std::error::Request<'_request>) { #body } } @@ -116,18 +116,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 +142,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 +157,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 @@ -224,16 +217,16 @@ fn impl_enum(input: Enum) -> TokenStream { let varsource = quote!(source); let dyn_error = quote_spanned!(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 { @@ -246,7 +239,7 @@ fn impl_enum(input: Enum) -> TokenStream { }; let provide_method = if input.has_backtrace() { - let demand = quote!(demand); + let request = quote!(request); let arms = input.variants.iter().map(|variant| { let ident = &variant.ident; match (variant.backtrace_field(), variant.source_field()) { @@ -258,24 +251,24 @@ fn impl_enum(input: Enum) -> TokenStream { 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 { - source.thiserror_provide(#demand); + if let ::core::option::Option::Some(source) = #varsource { + source.thiserror_provide(#request); } } } else { quote_spanned! {source.span()=> - #varsource.thiserror_provide(#demand); + #varsource.thiserror_provide(#request); } }; let self_provide = if type_is_option(backtrace_field.ty) { quote! { - if let std::option::Option::Some(backtrace) = backtrace { - #demand.provide_ref::<std::backtrace::Backtrace>(backtrace); + if let ::core::option::Option::Some(backtrace) = backtrace { + #request.provide_ref::<std::backtrace::Backtrace>(backtrace); } } } else { quote! { - #demand.provide_ref::<std::backtrace::Backtrace>(backtrace); + #request.provide_ref::<std::backtrace::Backtrace>(backtrace); } }; quote! { @@ -297,13 +290,13 @@ fn impl_enum(input: Enum) -> TokenStream { 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 { - source.thiserror_provide(#demand); + if let ::core::option::Option::Some(source) = #varsource { + source.thiserror_provide(#request); } } } else { quote_spanned! {backtrace.span()=> - #varsource.thiserror_provide(#demand); + #varsource.thiserror_provide(#request); } }; quote! { @@ -317,13 +310,13 @@ 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 { - #demand.provide_ref::<std::backtrace::Backtrace>(backtrace); + if let ::core::option::Option::Some(backtrace) = backtrace { + #request.provide_ref::<std::backtrace::Backtrace>(backtrace); } } } else { quote! { - #demand.provide_ref::<std::backtrace::Backtrace>(backtrace); + #request.provide_ref::<std::backtrace::Backtrace>(backtrace); } }; quote! { @@ -338,7 +331,7 @@ fn impl_enum(input: Enum) -> TokenStream { } }); Some(quote! { - fn provide<'_demand>(&'_demand self, #demand: &mut std::any::Demand<'_demand>) { + fn provide<'_request>(&'_request self, #request: &mut std::error::Request<'_request>) { #[allow(deprecated)] match self { #(#arms)* @@ -351,19 +344,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 +369,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 +388,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 +410,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 +453,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 +474,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()), } } }); @@ -3,6 +3,7 @@ clippy::cast_lossless, clippy::cast_possible_truncation, clippy::manual_find, + clippy::manual_let_else, clippy::manual_map, clippy::map_unwrap_or, clippy::needless_pass_by_value, |