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 <[email protected]>
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 <[email protected]>"]
 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]
+proc-macro2 = "1.0.63"
+quote = "1.0.29"
+syn = "2.0.23"
 
-[dependencies.quote]
-version = "1.0"
-
-[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 @@
         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 @@
     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 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 @@
         };
         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 @@
     });
 
     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 @@
             }
         } 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 @@
         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 @@
         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 @@
         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 @@
                 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 @@
     };
 
     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 @@
                     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 @@
                     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 @@
                     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 @@
             }
         });
         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 @@
 
     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 @@
                         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 @@
         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 @@
         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 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 @@
         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,