summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharisee Chiw <chiw@google.com>2023-10-13 22:51:21 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-10-13 22:51:21 +0000
commitfdfc9c7d3259dda1e596fb6295a23199c8aa95a8 (patch)
tree4dbb8129d887b79ab048b85c1a92906fd60d9a77
parenta1637e3659cc46d713fb4f1dc48162e50903c6d2 (diff)
parentae80c6b398ab994f7fda84bfec1bd925b13e38e2 (diff)
downloadthiserror-impl-fdfc9c7d3259dda1e596fb6295a23199c8aa95a8.tar.gz
Update thiserror-impl crate to 1.0.49 am: 9c2299da75 am: a2fb7198d0 am: ae80c6b398
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/thiserror-impl/+/2787856 Change-Id: I3f13b0027c1d0da9c67af65f2d5d5d96815199e8 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--Cargo.toml34
-rw-r--r--src/attr.rs23
-rw-r--r--src/expand.rs113
-rw-r--r--src/lib.rs1
4 files changed, 72 insertions, 99 deletions
diff --git a/Cargo.toml b/Cargo.toml
index bf61470..6a538a9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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()),
}
}
});
diff --git a/src/lib.rs b/src/lib.rs
index f0fc969..c5dab93 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,