diff --git a/Cargo.toml b/Cargo.toml index 582f812..48e6075 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ rust-version = "1.56.0" exclude = ["images/", "tests/", "miette-derive/"] [dependencies] -thiserror = "1.0.26" +thiserror = "1.0.40" miette-derive = { path = "miette-derive", version = "=5.6.0" } once_cell = "1.8.0" unicode-width = "0.1.9" @@ -35,7 +35,7 @@ futures = { version = "0.3", default-features = false } indenter = "0.3.0" rustversion = "1.0" trybuild = { version = "1.0.19", features = ["diff"] } -syn = { version = "1.0", features = ["full"] } +syn = { version = "2.0", features = ["full"] } regex = "1.5" lazy_static = "1.4" diff --git a/miette-derive/Cargo.toml b/miette-derive/Cargo.toml index 8f6a8e2..eaeca06 100644 --- a/miette-derive/Cargo.toml +++ b/miette-derive/Cargo.toml @@ -13,4 +13,4 @@ proc-macro = true [dependencies] proc-macro2 = "1.0" quote = "1.0" -syn = "1.0.45" +syn = "2.0.11" diff --git a/miette-derive/src/diagnostic.rs b/miette-derive/src/diagnostic.rs index 1239fce..0173d2a 100644 --- a/miette-derive/src/diagnostic.rs +++ b/miette-derive/src/diagnostic.rs @@ -222,7 +222,7 @@ impl Diagnostic { let input_attrs = input .attrs .iter() - .filter(|x| x.path.is_ident("diagnostic")) + .filter(|x| x.path().is_ident("diagnostic")) .collect::>(); Ok(match input.data { syn::Data::Struct(data_struct) => { @@ -245,7 +245,7 @@ impl Diagnostic { for var in variants { let mut variant_attrs = input_attrs.clone(); variant_attrs - .extend(var.attrs.iter().filter(|x| x.path.is_ident("diagnostic"))); + .extend(var.attrs.iter().filter(|x| x.path().is_ident("diagnostic"))); let args = DiagnosticDefArgs::parse(&var.ident, &var.fields, &variant_attrs, true)?; vars.push(DiagnosticDef { diff --git a/miette-derive/src/diagnostic_source.rs b/miette-derive/src/diagnostic_source.rs index 46a8a64..1104eb7 100644 --- a/miette-derive/src/diagnostic_source.rs +++ b/miette-derive/src/diagnostic_source.rs @@ -24,7 +24,7 @@ impl DiagnosticSource { fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result> { for (i, field) in fields.iter().enumerate() { for attr in &field.attrs { - if attr.path.is_ident("diagnostic_source") { + if attr.path().is_ident("diagnostic_source") { let diagnostic_source = if let Some(ident) = field.ident.clone() { syn::Member::Named(ident) } else { diff --git a/miette-derive/src/fmt.rs b/miette-derive/src/fmt.rs index f26e08f..692c5ad 100644 --- a/miette-derive/src/fmt.rs +++ b/miette-derive/src/fmt.rs @@ -210,21 +210,21 @@ pub fn parse_token_expr(input: ParseStream, mut begin_expr: bool) -> Result) -> syn::Result> { for (i, field) in fields.iter().enumerate() { for attr in &field.attrs { - if attr.path.is_ident("help") { + if attr.path().is_ident("help") { let help = if let Some(ident) = field.ident.clone() { syn::Member::Named(ident) } else { diff --git a/miette-derive/src/label.rs b/miette-derive/src/label.rs index c63f589..6b6c853 100644 --- a/miette-derive/src/label.rs +++ b/miette-derive/src/label.rs @@ -28,6 +28,17 @@ struct LabelAttr { impl Parse for LabelAttr { fn parse(input: ParseStream) -> syn::Result { + // Skip a token. + // This should receive one of: + // - label = "..." + // - label("...") + let _ = input.step(|cursor| { + if let Some((_, next)) = cursor.token_tree() { + Ok(((), next)) + } else { + Err(cursor.error("unexpected empty attribute")) + } + }); let la = input.lookahead1(); let label = if la.peek(syn::token::Paren) { // #[label("{}", x)] @@ -79,7 +90,7 @@ impl Labels { let mut labels = Vec::new(); for (i, field) in fields.iter().enumerate() { for attr in &field.attrs { - if attr.path.is_ident("label") { + if attr.path().is_ident("label") { let span = if let Some(ident) = field.ident.clone() { syn::Member::Named(ident) } else { @@ -88,7 +99,8 @@ impl Labels { span: field.span(), }) }; - let LabelAttr { label } = syn::parse2::(attr.tokens.clone())?; + use quote::ToTokens; + let LabelAttr { label } = syn::parse2::(attr.meta.to_token_stream())?; labels.push(Label { label, span, diff --git a/miette-derive/src/related.rs b/miette-derive/src/related.rs index 5533f2d..9b7f9e1 100644 --- a/miette-derive/src/related.rs +++ b/miette-derive/src/related.rs @@ -24,7 +24,7 @@ impl Related { fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result> { for (i, field) in fields.iter().enumerate() { for attr in &field.attrs { - if attr.path.is_ident("related") { + if attr.path().is_ident("related") { let related = if let Some(ident) = field.ident.clone() { syn::Member::Named(ident) } else { diff --git a/miette-derive/src/source_code.rs b/miette-derive/src/source_code.rs index dd80869..62f28e7 100644 --- a/miette-derive/src/source_code.rs +++ b/miette-derive/src/source_code.rs @@ -26,7 +26,7 @@ impl SourceCode { fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result> { for (i, field) in fields.iter().enumerate() { for attr in &field.attrs { - if attr.path.is_ident("source_code") { + if attr.path().is_ident("source_code") { let source_code = if let Some(ident) = field.ident.clone() { syn::Member::Named(ident) } else {