Skip to content

Commit 2c65cea

Browse files
authored
Merge pull request #227 from dtolnay/syn
Update to syn 2
2 parents 0e45dde + fb8b81f commit 2c65cea

File tree

7 files changed

+30
-34
lines changed

7 files changed

+30
-34
lines changed

.clippy.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
msrv = "1.31.0"
1+
msrv = "1.56.0"

.github/workflows/ci.yml

-13
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,6 @@ jobs:
4040
if: matrix.rust == 'nightly'
4141
- run: cargo test --all
4242

43-
msrv:
44-
name: Rust 1.31.0
45-
needs: pre_ci
46-
if: needs.pre_ci.outputs.continue
47-
runs-on: ubuntu-latest
48-
timeout-minutes: 45
49-
steps:
50-
- uses: actions/checkout@v3
51-
- uses: dtolnay/rust-toolchain@1.31.0
52-
with:
53-
components: rust-src
54-
- run: cargo check
55-
5643
clippy:
5744
name: Clippy
5845
runs-on: ubuntu-latest

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ edition = "2018"
99
keywords = ["error", "error-handling", "derive"]
1010
license = "MIT OR Apache-2.0"
1111
repository = "https://github.com/dtolnay/thiserror"
12-
rust-version = "1.31"
12+
rust-version = "1.56"
1313

1414
[dependencies]
1515
thiserror-impl = { version = "=1.0.39", path = "impl" }

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ This library provides a convenient derive macro for the standard library's
1616
thiserror = "1.0"
1717
```
1818

19-
*Compiler support: requires rustc 1.31+*
19+
*Compiler support: requires rustc 1.56+*
2020

2121
<br>
2222

impl/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ description = "Implementation detail of the `thiserror` crate"
66
edition = "2018"
77
license = "MIT OR Apache-2.0"
88
repository = "https://github.com/dtolnay/thiserror"
9-
rust-version = "1.31"
9+
rust-version = "1.56"
1010

1111
[lib]
1212
proc-macro = true
1313

1414
[dependencies]
1515
proc-macro2 = "1.0"
1616
quote = "1.0"
17-
syn = "1.0.45"
17+
syn = "2.0"
1818

1919
[package.metadata.docs.rs]
2020
targets = ["x86_64-unknown-linux-gnu"]

impl/src/attr.rs

+24-14
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ use proc_macro2::{Delimiter, Group, Span, TokenStream, TokenTree};
22
use quote::{format_ident, quote, ToTokens};
33
use std::collections::BTreeSet as Set;
44
use std::iter::FromIterator;
5-
use syn::parse::{Nothing, ParseStream};
5+
use syn::parse::ParseStream;
66
use syn::{
7-
braced, bracketed, parenthesized, token, Attribute, Error, Ident, Index, LitInt, LitStr,
7+
braced, bracketed, parenthesized, token, Attribute, Error, Ident, Index, LitInt, LitStr, Meta,
88
Result, Token,
99
};
1010

@@ -54,24 +54,27 @@ pub fn get(input: &[Attribute]) -> Result<Attrs> {
5454
};
5555

5656
for attr in input {
57-
if attr.path.is_ident("error") {
57+
if attr.path().is_ident("error") {
5858
parse_error_attribute(&mut attrs, attr)?;
59-
} else if attr.path.is_ident("source") {
59+
} else if attr.path().is_ident("source") {
6060
require_empty_attribute(attr)?;
6161
if attrs.source.is_some() {
6262
return Err(Error::new_spanned(attr, "duplicate #[source] attribute"));
6363
}
6464
attrs.source = Some(attr);
65-
} else if attr.path.is_ident("backtrace") {
65+
} else if attr.path().is_ident("backtrace") {
6666
require_empty_attribute(attr)?;
6767
if attrs.backtrace.is_some() {
6868
return Err(Error::new_spanned(attr, "duplicate #[backtrace] attribute"));
6969
}
7070
attrs.backtrace = Some(attr);
71-
} else if attr.path.is_ident("from") {
72-
if !attr.tokens.is_empty() {
73-
// Assume this is meant for derive_more crate or something.
74-
continue;
71+
} else if attr.path().is_ident("from") {
72+
match attr.meta {
73+
Meta::Path(_) => {}
74+
Meta::List(_) | Meta::NameValue(_) => {
75+
// Assume this is meant for derive_more crate or something.
76+
continue;
77+
}
7578
}
7679
if attrs.from.is_some() {
7780
return Err(Error::new_spanned(attr, "duplicate #[from] attribute"));
@@ -166,21 +169,21 @@ fn parse_token_expr(input: ParseStream, mut begin_expr: bool) -> Result<TokenStr
166169
let delimiter = parenthesized!(content in input);
167170
let nested = parse_token_expr(&content, true)?;
168171
let mut group = Group::new(Delimiter::Parenthesis, nested);
169-
group.set_span(delimiter.span);
172+
group.set_span(delimiter.span.join());
170173
TokenTree::Group(group)
171174
} else if input.peek(token::Brace) {
172175
let content;
173176
let delimiter = braced!(content in input);
174177
let nested = parse_token_expr(&content, true)?;
175178
let mut group = Group::new(Delimiter::Brace, nested);
176-
group.set_span(delimiter.span);
179+
group.set_span(delimiter.span.join());
177180
TokenTree::Group(group)
178181
} else if input.peek(token::Bracket) {
179182
let content;
180183
let delimiter = bracketed!(content in input);
181184
let nested = parse_token_expr(&content, true)?;
182185
let mut group = Group::new(Delimiter::Bracket, nested);
183-
group.set_span(delimiter.span);
186+
group.set_span(delimiter.span.join());
184187
TokenTree::Group(group)
185188
} else {
186189
input.parse()?
@@ -191,8 +194,15 @@ fn parse_token_expr(input: ParseStream, mut begin_expr: bool) -> Result<TokenStr
191194
}
192195

193196
fn require_empty_attribute(attr: &Attribute) -> Result<()> {
194-
syn::parse2::<Nothing>(attr.tokens.clone())?;
195-
Ok(())
197+
let error_span = match &attr.meta {
198+
Meta::Path(_) => return Ok(()),
199+
Meta::List(meta) => meta.delimiter.span().open(),
200+
Meta::NameValue(meta) => meta.eq_token.span,
201+
};
202+
Err(Error::new(
203+
error_span,
204+
"unexpected token in thiserror attribute",
205+
))
196206
}
197207

198208
impl ToTokens for Display<'_> {

impl/src/expand.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -528,8 +528,7 @@ fn type_parameter_of_option(ty: &Type) -> Option<&Type> {
528528

529529
fn spanned_error_trait(input: &DeriveInput) -> TokenStream {
530530
let vis_span = match &input.vis {
531-
Visibility::Public(vis) => Some(vis.pub_token.span),
532-
Visibility::Crate(vis) => Some(vis.crate_token.span),
531+
Visibility::Public(vis) => Some(vis.span),
533532
Visibility::Restricted(vis) => Some(vis.pub_token.span),
534533
Visibility::Inherited => None,
535534
};

0 commit comments

Comments
 (0)