Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Elide lifetimes in derived functions #226

Merged
merged 1 commit into from Nov 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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