parent
1e6c0758d6
commit
44a4fe206a
@ -1 +1,2 @@
|
|||||||
/err-derive-0.2.1.crate
|
/err-derive-0.2.1.crate
|
||||||
|
/err-derive-0.2.2.crate
|
||||||
|
@ -1,241 +0,0 @@
|
|||||||
diff -up err-derive-0.2.1/build.rs.orig err-derive-0.2.1/build.rs
|
|
||||||
--- err-derive-0.2.1/build.rs.orig 2019-10-09 12:21:01.000000000 +0200
|
|
||||||
+++ err-derive-0.2.1/build.rs 2019-12-06 22:41:25.114969835 +0100
|
|
||||||
@@ -1,22 +1,7 @@
|
|
||||||
-use rustc_version::version;
|
|
||||||
-
|
|
||||||
-fn version_ge(minor_min: u64) -> bool {
|
|
||||||
- let version = version().unwrap();
|
|
||||||
-
|
|
||||||
- version.major == 1 && version.minor >= minor_min
|
|
||||||
-}
|
|
||||||
+#[rustversion::before(1.32)]
|
|
||||||
+compile_error!("`err-derive` depends on `skeptic`, which requires rustc >= 1.32");
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
- if !version_ge(32) {
|
|
||||||
- panic!("`err-derive` depends on `quote 1.0`, which requires rustc >= 1.32");
|
|
||||||
- }
|
|
||||||
- generate_doc_tests()
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-#[cfg(feature = "skeptic")]
|
|
||||||
-fn generate_doc_tests() {
|
|
||||||
+ #[cfg(feature = "skeptic")]
|
|
||||||
skeptic::generate_doc_tests(&["README.md"]);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
-#[cfg(not(feature = "skeptic"))]
|
|
||||||
-fn generate_doc_tests() { }
|
|
||||||
diff -up err-derive-0.2.1/Cargo.toml.orig err-derive-0.2.1/Cargo.toml
|
|
||||||
--- err-derive-0.2.1/Cargo.toml.orig 2019-12-06 22:41:25.113969837 +0100
|
|
||||||
+++ err-derive-0.2.1/Cargo.toml 2019-12-06 22:42:14.978892161 +0100
|
|
||||||
@@ -40,8 +40,8 @@ version = "1.0.5"
|
|
||||||
version = "0.12.0"
|
|
||||||
[dev-dependencies.skeptic]
|
|
||||||
version = "0.13"
|
|
||||||
-[build-dependencies.rustc_version]
|
|
||||||
-version = "0.2.3"
|
|
||||||
+[build-dependencies.rustversion]
|
|
||||||
+version = "1.0"
|
|
||||||
|
|
||||||
[build-dependencies.skeptic]
|
|
||||||
version = "0.13"
|
|
||||||
diff -up err-derive-0.2.1/src/lib.rs.orig err-derive-0.2.1/src/lib.rs
|
|
||||||
--- err-derive-0.2.1/src/lib.rs.orig 2019-10-09 13:08:03.000000000 +0200
|
|
||||||
+++ err-derive-0.2.1/src/lib.rs 2019-12-06 22:41:25.115969834 +0100
|
|
||||||
@@ -132,21 +132,13 @@ use syn::spanned::Spanned;
|
|
||||||
|
|
||||||
extern crate proc_macro_error;
|
|
||||||
|
|
||||||
-use proc_macro_error::{filter_macro_errors, span_error};
|
|
||||||
+use proc_macro_error::{abort, proc_macro_error};
|
|
||||||
use syn::Attribute;
|
|
||||||
|
|
||||||
decl_derive!([Error, attributes(error, source, cause)] => error_derive);
|
|
||||||
|
|
||||||
+#[proc_macro_error(allow_not_macro, assert_unwind_safe)]
|
|
||||||
fn error_derive(s: synstructure::Structure) -> TokenStream {
|
|
||||||
- // proc_macro_error requires all `quote!` call to be inside the `filter_macro_errors!` macro,
|
|
||||||
- // by using an inner method we satisfy this requirement while still getting proper syntax
|
|
||||||
- // highlighting
|
|
||||||
- filter_macro_errors! {
|
|
||||||
- error_derive_inner(s).into()
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-fn error_derive_inner(s: synstructure::Structure) -> TokenStream2 {
|
|
||||||
let source_body = s.each_variant(|v| {
|
|
||||||
if let Some(source) = v.bindings().iter().find(|binding| {
|
|
||||||
has_attr(&binding.ast().attrs, "source") || has_attr(&binding.ast().attrs, "cause")
|
|
||||||
@@ -205,11 +197,7 @@ fn error_derive_inner(s: synstructure::S
|
|
||||||
|
|
||||||
let from = from_body(&s);
|
|
||||||
|
|
||||||
- quote! {
|
|
||||||
- #error
|
|
||||||
- #display
|
|
||||||
- #from
|
|
||||||
- }
|
|
||||||
+ quote!(#error #display #from).into()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn display_body(s: &synstructure::Structure) -> quote::__rt::TokenStream {
|
|
||||||
@@ -217,10 +205,10 @@ fn display_body(s: &synstructure::Struct
|
|
||||||
let span = v.ast().ident.span();
|
|
||||||
let msg = match find_error_msg(&v.ast().attrs) {
|
|
||||||
Some(msg) => msg,
|
|
||||||
- None => span_error!(span, "Variant is missing display attribute."),
|
|
||||||
+ None => abort!(span, "Variant is missing display attribute."),
|
|
||||||
};
|
|
||||||
if msg.nested.is_empty() {
|
|
||||||
- span_error!(span, "Expected at least one argument to error attribute");
|
|
||||||
+ abort!(span, "Expected at least one argument to error attribute");
|
|
||||||
}
|
|
||||||
|
|
||||||
let format_string = match msg.nested[0] {
|
|
||||||
@@ -232,7 +220,7 @@ fn display_body(s: &synstructure::Struct
|
|
||||||
{
|
|
||||||
nv.lit.clone()
|
|
||||||
}
|
|
||||||
- _ => span_error!(
|
|
||||||
+ _ => abort!(
|
|
||||||
msg.nested.span(),
|
|
||||||
"Error attribute must begin `display = \"\"` to control the Display message."
|
|
||||||
),
|
|
||||||
@@ -241,14 +229,14 @@ fn display_body(s: &synstructure::Struct
|
|
||||||
syn::NestedMeta::Lit(syn::Lit::Int(ref i)) => {
|
|
||||||
let bi = &v.bindings()[i
|
|
||||||
.base10_parse::<usize>()
|
|
||||||
- .unwrap_or_else(|_| span_error!(i.span(), "integer literal overflows usize"))];
|
|
||||||
+ .unwrap_or_else(|_| abort!(i.span(), "integer literal overflows usize"))];
|
|
||||||
quote!(#bi)
|
|
||||||
}
|
|
||||||
syn::NestedMeta::Meta(syn::Meta::Path(ref path)) => {
|
|
||||||
let id = match path.get_ident() {
|
|
||||||
Some(id) => id,
|
|
||||||
// Allows std::u8::MAX (for example)
|
|
||||||
- None => return quote!(#arg)
|
|
||||||
+ None => return quote!(#arg),
|
|
||||||
};
|
|
||||||
let id_s = id.to_string();
|
|
||||||
if id_s.starts_with('_') {
|
|
||||||
@@ -256,7 +244,7 @@ fn display_body(s: &synstructure::Struct
|
|
||||||
let bi = match v.bindings().get(idx) {
|
|
||||||
Some(bi) => bi,
|
|
||||||
None => {
|
|
||||||
- span_error!(
|
|
||||||
+ abort!(
|
|
||||||
id.span(),
|
|
||||||
"display attempted to access field `{}` in `{}::{}` which \
|
|
||||||
does not exist (there {} {} field{})",
|
|
||||||
@@ -279,10 +267,10 @@ fn display_body(s: &synstructure::Struct
|
|
||||||
}
|
|
||||||
// Arg is not a field - might be in global scope
|
|
||||||
return quote!(#id);
|
|
||||||
- },
|
|
||||||
+ }
|
|
||||||
// Allows u8::max_value() (for example)
|
|
||||||
syn::NestedMeta::Meta(syn::Meta::List(ref list)) => return quote!(#list),
|
|
||||||
- _ => span_error!(msg.nested.span(), "Invalid argument to error attribute!"),
|
|
||||||
+ _ => abort!(msg.nested.span(), "Invalid argument to error attribute!"),
|
|
||||||
});
|
|
||||||
|
|
||||||
quote! {
|
|
||||||
@@ -302,11 +290,11 @@ fn find_error_msg(attrs: &[syn::Attribut
|
|
||||||
{
|
|
||||||
let span = attr.span();
|
|
||||||
if error_msg.is_some() {
|
|
||||||
- span_error!(span, "Cannot have two display attributes")
|
|
||||||
+ abort!(span, "Cannot have two display attributes")
|
|
||||||
} else if let syn::Meta::List(list) = meta {
|
|
||||||
error_msg = Some(list);
|
|
||||||
} else {
|
|
||||||
- span_error!(span, "error attribute must take a list in parentheses")
|
|
||||||
+ abort!(span, "error attribute must take a list in parentheses")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -324,7 +312,7 @@ fn has_attr(attributes: &[Attribute], at
|
|
||||||
.map_or(false, |ident| ident == attr_name)
|
|
||||||
{
|
|
||||||
if found_attr {
|
|
||||||
- span_error!(attr.span(), "Cannot have two `{}` attributes", attr_name);
|
|
||||||
+ abort!(attr.span(), "Cannot have two `{}` attributes", attr_name);
|
|
||||||
}
|
|
||||||
found_attr = true;
|
|
||||||
}
|
|
||||||
@@ -341,7 +329,7 @@ fn has_attr(attributes: &[Attribute], at
|
|
||||||
ident.to_string().split(", ").any(|part| part == attr_name)
|
|
||||||
}) {
|
|
||||||
if found_attr {
|
|
||||||
- span_error!(
|
|
||||||
+ abort!(
|
|
||||||
path.span(),
|
|
||||||
"Cannot have two `{}` attributes",
|
|
||||||
attr_name
|
|
||||||
@@ -371,7 +359,7 @@ fn from_body(s: &synstructure::Structure
|
|
||||||
let exclude = has_attr(&binding.ast().attrs, "no_from");
|
|
||||||
|
|
||||||
if is_source && is_cause {
|
|
||||||
- span_error!(
|
|
||||||
+ abort!(
|
|
||||||
span,
|
|
||||||
"#[error(cause)] is deprecated, use #[error(source)] instead"
|
|
||||||
)
|
|
||||||
@@ -387,7 +375,7 @@ fn from_body(s: &synstructure::Structure
|
|
||||||
}) {
|
|
||||||
if v.bindings().len() > 1 {
|
|
||||||
if is_explicit {
|
|
||||||
- span_error!(
|
|
||||||
+ abort!(
|
|
||||||
span,
|
|
||||||
"Variants containing `from` can only contain a single field"
|
|
||||||
);
|
|
||||||
@@ -402,15 +390,18 @@ fn from_body(s: &synstructure::Structure
|
|
||||||
.iter()
|
|
||||||
.any(|existing_from_type| *existing_from_type == from_ident)
|
|
||||||
{
|
|
||||||
- span_error!(
|
|
||||||
- from_ident.span(),
|
|
||||||
- "`from` can only be applied for a type once{}",
|
|
||||||
- if is_explicit {
|
|
||||||
- ""
|
|
||||||
- } else {
|
|
||||||
- ", hint: use #[error(no_from)] to disable automatic From derive"
|
|
||||||
- }
|
|
||||||
- );
|
|
||||||
+ if is_explicit {
|
|
||||||
+ abort!(
|
|
||||||
+ from_ident.span(),
|
|
||||||
+ "`from` can only be applied for a type once"
|
|
||||||
+ );
|
|
||||||
+ } else {
|
|
||||||
+ abort!(
|
|
||||||
+ from_ident.span(),
|
|
||||||
+ "`from` can only be applied for a type once";
|
|
||||||
+ hint = "use #[error(no_from)] to disable automatic From derive"
|
|
||||||
+ );
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
from_types.push(from_ident);
|
|
||||||
diff -up err-derive-0.2.1/tests/tests.rs.orig err-derive-0.2.1/tests/tests.rs
|
|
||||||
--- err-derive-0.2.1/tests/tests.rs.orig 2019-10-08 21:38:59.000000000 +0200
|
|
||||||
+++ err-derive-0.2.1/tests/tests.rs 2019-12-06 22:41:25.115969834 +0100
|
|
||||||
@@ -125,7 +125,7 @@ pub enum TestsNonFieldDisplayValues {
|
|
||||||
#[error(display = "{}", u8::max_value())]
|
|
||||||
D,
|
|
||||||
#[error(display = "{}", std::u8::MAX)]
|
|
||||||
- E
|
|
||||||
+ E,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TestsNonFieldDisplayValues {
|
|
||||||
@@ -156,4 +156,4 @@ fn non_field_display() {
|
|
||||||
|
|
||||||
let s = format!("{}", TestsNonFieldDisplayValues::E);
|
|
||||||
assert_eq!(&s, "255");
|
|
||||||
-}
|
|
||||||
\ No newline at end of file
|
|
||||||
+}
|
|
@ -1,11 +0,0 @@
|
|||||||
--- err-derive-0.2.1/Cargo.toml 1970-01-01T00:00:00+00:00
|
|
||||||
+++ err-derive-0.2.1/Cargo.toml 2019-12-06T21:22:49.380718+00:00
|
|
||||||
@@ -25,7 +25,7 @@
|
|
||||||
[lib]
|
|
||||||
proc-macro = true
|
|
||||||
[dependencies.proc-macro-error]
|
|
||||||
-version = "0.2.6"
|
|
||||||
+version = "0.4"
|
|
||||||
|
|
||||||
[dependencies.proc-macro2]
|
|
||||||
version = "1.0.1"
|
|
@ -1 +1 @@
|
|||||||
SHA512 (err-derive-0.2.1.crate) = d5aa26b8088272612b78057b89535cf9f032c22e25c86c65cdf872dd57c0f4ca5dbcaf7ea72319833d4487b634160e2d9ffa266cc09d4e00e67f82f68457affd
|
SHA512 (err-derive-0.2.2.crate) = caabf17ef562c9a6a7e0cf41829307bde0ebba44a526a096146a65eabc620b5797fde0b1b8226f0be34ba7cedb1c0ddd0a5b529a0f71fe00c2b7693178af6a7e
|
||||||
|
Loading…
Reference in new issue