update to syn2

This commit is contained in:
Jan Tache 2023-03-28 22:54:22 -07:00
parent 78fe18e699
commit 2b69a0c874
9 changed files with 26 additions and 14 deletions

View File

@ -13,7 +13,7 @@ rust-version = "1.56.0"
exclude = ["images/", "tests/", "miette-derive/"] exclude = ["images/", "tests/", "miette-derive/"]
[dependencies] [dependencies]
thiserror = "1.0.26" thiserror = "1.0.40"
miette-derive = { path = "miette-derive", version = "=5.6.0" } miette-derive = { path = "miette-derive", version = "=5.6.0" }
once_cell = "1.8.0" once_cell = "1.8.0"
unicode-width = "0.1.9" unicode-width = "0.1.9"
@ -35,7 +35,7 @@ futures = { version = "0.3", default-features = false }
indenter = "0.3.0" indenter = "0.3.0"
rustversion = "1.0" rustversion = "1.0"
trybuild = { version = "1.0.19", features = ["diff"] } trybuild = { version = "1.0.19", features = ["diff"] }
syn = { version = "1.0", features = ["full"] } syn = { version = "2.0", features = ["full"] }
regex = "1.5" regex = "1.5"
lazy_static = "1.4" lazy_static = "1.4"

View File

@ -13,4 +13,4 @@ proc-macro = true
[dependencies] [dependencies]
proc-macro2 = "1.0" proc-macro2 = "1.0"
quote = "1.0" quote = "1.0"
syn = "1.0.45" syn = "2.0.11"

View File

@ -222,7 +222,7 @@ impl Diagnostic {
let input_attrs = input let input_attrs = input
.attrs .attrs
.iter() .iter()
.filter(|x| x.path.is_ident("diagnostic")) .filter(|x| x.path().is_ident("diagnostic"))
.collect::<Vec<&syn::Attribute>>(); .collect::<Vec<&syn::Attribute>>();
Ok(match input.data { Ok(match input.data {
syn::Data::Struct(data_struct) => { syn::Data::Struct(data_struct) => {
@ -245,7 +245,7 @@ impl Diagnostic {
for var in variants { for var in variants {
let mut variant_attrs = input_attrs.clone(); let mut variant_attrs = input_attrs.clone();
variant_attrs 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 = let args =
DiagnosticDefArgs::parse(&var.ident, &var.fields, &variant_attrs, true)?; DiagnosticDefArgs::parse(&var.ident, &var.fields, &variant_attrs, true)?;
vars.push(DiagnosticDef { vars.push(DiagnosticDef {

View File

@ -24,7 +24,7 @@ impl DiagnosticSource {
fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> { fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> {
for (i, field) in fields.iter().enumerate() { for (i, field) in fields.iter().enumerate() {
for attr in &field.attrs { 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() { let diagnostic_source = if let Some(ident) = field.ident.clone() {
syn::Member::Named(ident) syn::Member::Named(ident)
} else { } else {

View File

@ -210,21 +210,21 @@ pub fn parse_token_expr(input: ParseStream, mut begin_expr: bool) -> Result<Toke
let delimiter = parenthesized!(content in input); let delimiter = parenthesized!(content in input);
let nested = parse_token_expr(&content, true)?; let nested = parse_token_expr(&content, true)?;
let mut group = Group::new(Delimiter::Parenthesis, nested); let mut group = Group::new(Delimiter::Parenthesis, nested);
group.set_span(delimiter.span); group.set_span(delimiter.span.join());
TokenTree::Group(group) TokenTree::Group(group)
} else if input.peek(syn::token::Brace) { } else if input.peek(syn::token::Brace) {
let content; let content;
let delimiter = braced!(content in input); let delimiter = braced!(content in input);
let nested = parse_token_expr(&content, true)?; let nested = parse_token_expr(&content, true)?;
let mut group = Group::new(Delimiter::Brace, nested); let mut group = Group::new(Delimiter::Brace, nested);
group.set_span(delimiter.span); group.set_span(delimiter.span.join());
TokenTree::Group(group) TokenTree::Group(group)
} else if input.peek(syn::token::Bracket) { } else if input.peek(syn::token::Bracket) {
let content; let content;
let delimiter = bracketed!(content in input); let delimiter = bracketed!(content in input);
let nested = parse_token_expr(&content, true)?; let nested = parse_token_expr(&content, true)?;
let mut group = Group::new(Delimiter::Bracket, nested); let mut group = Group::new(Delimiter::Bracket, nested);
group.set_span(delimiter.span); group.set_span(delimiter.span.join());
TokenTree::Group(group) TokenTree::Group(group)
} else { } else {
input.parse()? input.parse()?

View File

@ -69,7 +69,7 @@ impl Help {
fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> { fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> {
for (i, field) in fields.iter().enumerate() { for (i, field) in fields.iter().enumerate() {
for attr in &field.attrs { 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() { let help = if let Some(ident) = field.ident.clone() {
syn::Member::Named(ident) syn::Member::Named(ident)
} else { } else {

View File

@ -28,6 +28,17 @@ struct LabelAttr {
impl Parse for LabelAttr { impl Parse for LabelAttr {
fn parse(input: ParseStream) -> syn::Result<Self> { fn parse(input: ParseStream) -> syn::Result<Self> {
// 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 la = input.lookahead1();
let label = if la.peek(syn::token::Paren) { let label = if la.peek(syn::token::Paren) {
// #[label("{}", x)] // #[label("{}", x)]
@ -79,7 +90,7 @@ impl Labels {
let mut labels = Vec::new(); let mut labels = Vec::new();
for (i, field) in fields.iter().enumerate() { for (i, field) in fields.iter().enumerate() {
for attr in &field.attrs { 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() { let span = if let Some(ident) = field.ident.clone() {
syn::Member::Named(ident) syn::Member::Named(ident)
} else { } else {
@ -88,7 +99,8 @@ impl Labels {
span: field.span(), span: field.span(),
}) })
}; };
let LabelAttr { label } = syn::parse2::<LabelAttr>(attr.tokens.clone())?; use quote::ToTokens;
let LabelAttr { label } = syn::parse2::<LabelAttr>(attr.meta.to_token_stream())?;
labels.push(Label { labels.push(Label {
label, label,
span, span,

View File

@ -24,7 +24,7 @@ impl Related {
fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> { fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> {
for (i, field) in fields.iter().enumerate() { for (i, field) in fields.iter().enumerate() {
for attr in &field.attrs { 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() { let related = if let Some(ident) = field.ident.clone() {
syn::Member::Named(ident) syn::Member::Named(ident)
} else { } else {

View File

@ -26,7 +26,7 @@ impl SourceCode {
fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> { fn from_fields_vec(fields: Vec<&syn::Field>) -> syn::Result<Option<Self>> {
for (i, field) in fields.iter().enumerate() { for (i, field) in fields.iter().enumerate() {
for attr in &field.attrs { 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() { let source_code = if let Some(ident) = field.ident.clone() {
syn::Member::Named(ident) syn::Member::Named(ident)
} else { } else {