Skip to content

Commit

Permalink
fix(derive): elide lifetimes in derived functions (#226)
Browse files Browse the repository at this point in the history
  • Loading branch information
drivasperez committed Nov 21, 2022
1 parent c857595 commit c88f0b5
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 34 deletions.
2 changes: 1 addition & 1 deletion miette-derive/src/code.rs
Expand Up @@ -72,7 +72,7 @@ impl Code {
pub(crate) fn gen_struct(&self) -> Option<TokenStream> {
let code = &self.0;
Some(quote! {
fn code<'a>(&'a self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + 'a>> {
fn code(&self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + '_>> {
std::option::Option::Some(std::boxed::Box::new(#code))
}
})
Expand Down
6 changes: 3 additions & 3 deletions miette-derive/src/forward.rs
Expand Up @@ -58,13 +58,13 @@ impl WhichFn {
pub fn signature(&self) -> TokenStream {
match self {
Self::Code => quote! {
fn code<'a>(&'a self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + 'a>>
fn code(& self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + '_>>
},
Self::Help => quote! {
fn help<'a>(&'a self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + 'a>>
fn help(& self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + '_>>
},
Self::Url => quote! {
fn url<'a>(&'a self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + 'a>>
fn url(& self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + '_>>
},
Self::Severity => quote! {
fn severity(&self) -> std::option::Option<miette::Severity>
Expand Down
8 changes: 4 additions & 4 deletions miette-derive/src/help.rs
Expand Up @@ -108,7 +108,7 @@ impl Help {
Some(quote! {
Self::#ident #display_pat => {
use miette::macro_helpers::ToOption;
miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(&#help).as_ref().map(|#var| -> std::boxed::Box<dyn std::fmt::Display + 'a> { std::boxed::Box::new(format!("{}", #var)) })
miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(&#help).as_ref().map(|#var| -> std::boxed::Box<dyn std::fmt::Display + '_> { std::boxed::Box::new(format!("{}", #var)) })
},
})
}
Expand All @@ -123,7 +123,7 @@ impl Help {
Help::Display(display) => {
let (fmt, args) = display.expand_shorthand_cloned(&display_members);
Some(quote! {
fn help<'a>(&'a self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + 'a>> {
fn help(&self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + '_>> {
#[allow(unused_variables, deprecated)]
let Self #display_pat = self;
std::option::Option::Some(std::boxed::Box::new(format!(#fmt #args)))
Expand All @@ -133,11 +133,11 @@ impl Help {
Help::Field(member, ty) => {
let var = quote! { __miette_internal_var };
Some(quote! {
fn help<'a>(&'a self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + 'a>> {
fn help(&self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + '_>> {
#[allow(unused_variables, deprecated)]
let Self #display_pat = self;
use miette::macro_helpers::ToOption;
miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(&self.#member).as_ref().map(|#var| -> std::boxed::Box<dyn std::fmt::Display + 'a> { std::boxed::Box::new(format!("{}", #var)) })
miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(&self.#member).as_ref().map(|#var| -> std::boxed::Box<dyn std::fmt::Display + '_> { std::boxed::Box::new(format!("{}", #var)) })
}
})
}
Expand Down
2 changes: 1 addition & 1 deletion miette-derive/src/url.rs
Expand Up @@ -129,7 +129,7 @@ impl Url {
}
};
Some(quote! {
fn url<'a>(&'a self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + 'a>> {
fn url(&self) -> std::option::Option<std::boxed::Box<dyn std::fmt::Display + '_>> {
#[allow(unused_variables, deprecated)]
let Self #pat = self;
std::option::Option::Some(std::boxed::Box::new(format!(#fmt #args)))
Expand Down
50 changes: 25 additions & 25 deletions tests/derive.rs
Expand Up @@ -185,7 +185,7 @@ fn fmt_help() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic(code(foo::bar::baz), help("{} x {0} x {:?}", 1, "2"))]
struct FooStruct(String);
struct FooStruct<'a>(&'a str);

assert_eq!(
"1 x hello x \"2\"".to_string(),
Expand All @@ -195,8 +195,8 @@ fn fmt_help() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic(code(foo::bar::baz), help("{} x {my_field} x {:?}", 1, "2"))]
struct BarStruct {
my_field: String,
struct BarStruct<'a> {
my_field: &'a str,
}

assert_eq!(
Expand All @@ -211,9 +211,9 @@ fn fmt_help() {

#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
enum FooEnum {
enum FooEnum<'a> {
#[diagnostic(code(foo::x), help("{} x {0} x {:?}", 1, "2"))]
X(String),
X(&'a str),

#[diagnostic(code(foo::x), help("{} x {len} x {:?}", 1, "2"))]
Y { len: usize },
Expand Down Expand Up @@ -243,9 +243,9 @@ fn help_field() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic()]
struct Foo {
struct Foo<'a> {
#[help]
do_this: Option<String>,
do_this: Option<&'a str>,
}

assert_eq!(
Expand All @@ -261,11 +261,11 @@ fn help_field() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic()]
enum Bar {
A(#[help] Option<String>),
enum Bar<'a> {
A(#[help] Option<&'a str>),
B {
#[help]
do_this: Option<String>,
do_this: Option<&'a str>,
},
}

Expand All @@ -286,7 +286,7 @@ fn help_field() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic()]
struct Baz(#[help] Option<String>);
struct Baz<'a>(#[help] Option<&'a str>);

assert_eq!(
"x".to_string(),
Expand All @@ -296,7 +296,7 @@ fn help_field() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic()]
struct Quux(#[help] String);
struct Quux<'a>(#[help] &'a str);

assert_eq!(
"x".to_string(),
Expand All @@ -309,9 +309,9 @@ fn test_snippet_named_struct() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic(code(foo::bar::baz))]
struct Foo {
struct Foo<'a> {
#[source_code]
src: String,
src: &'a str,
#[label("var 1")]
var1: SourceSpan,
#[label = "var 2"]
Expand All @@ -331,8 +331,8 @@ fn test_snippet_unnamed_struct() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[diagnostic(code(foo::bar::baz))]
struct Foo(
#[source_code] String,
struct Foo<'a>(
#[source_code] &'a str,
#[label("{0}")] SourceSpan,
#[label = "idk"] SourceSpan,
#[label] SourceSpan,
Expand All @@ -346,11 +346,11 @@ fn test_snippet_enum() {
#[derive(Debug, Diagnostic, Error)]
#[error("welp")]
#[allow(dead_code)]
enum Foo {
enum Foo<'a> {
#[diagnostic(code(foo::a))]
A {
#[source_code]
src: String,
src: &'a str,
msg: String,
#[label("hi this is where the thing went wrong ({msg})")]
var0: SourceSpan,
Expand Down Expand Up @@ -516,9 +516,9 @@ fn test_forward_struct_named() {
help("{help}"),
forward(span)
)]
struct Struct {
struct Struct<'a> {
span: ForwardsTo,
help: &'static str,
help: &'a str,
}
// Also check the From impl here
let diag = Struct {
Expand All @@ -535,7 +535,7 @@ fn test_forward_struct_unnamed() {
#[derive(Debug, Diagnostic, Error)]
#[error("display")]
#[diagnostic(code(foo::bar::overridden), url("{1}"), forward(0))]
struct Struct(ForwardsTo, &'static str);
struct Struct<'a>(ForwardsTo, &'a str);

// Also check the From impl here
let diag = Struct(ForwardsTo::new(), "url here");
Expand All @@ -546,12 +546,12 @@ fn test_forward_struct_unnamed() {
#[test]
fn test_forward_enum_named() {
#[derive(Debug, Diagnostic, Error)]
enum Enum {
enum Enum<'a> {
#[error("help: {help_text}")]
#[diagnostic(code(foo::bar::overridden), help("{help_text}"), forward(span))]
Variant {
span: ForwardsTo,
help_text: &'static str,
help_text: &'a str,
},
}
// Also check the From impl here
Expand All @@ -569,10 +569,10 @@ fn test_forward_enum_named() {
#[test]
fn test_forward_enum_unnamed() {
#[derive(Debug, Diagnostic, Error)]
enum ForwardEnumUnnamed {
enum ForwardEnumUnnamed<'a> {
#[error("help: {1}")]
#[diagnostic(code(foo::bar::overridden), help("{1}"), forward(0))]
Variant(ForwardsTo, &'static str),
Variant(ForwardsTo, &'a str),
}
// Also check the From impl here
let variant = ForwardEnumUnnamed::Variant(ForwardsTo::new(), "overridden help please");
Expand Down

0 comments on commit c88f0b5

Please sign in to comment.