Skip to content

Commit 9168599

Browse files
committed
Work around Rust hygiene bug.
See: rust-lang/rust#74036 Fixes #14.
1 parent 2d6cb95 commit 9168599

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

assert2-macros/src/hygiene_bug.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
use proc_macro::{Delimiter, Group, TokenStream, TokenTree};
2+
3+
pub fn fix(ts: TokenStream) -> TokenStream {
4+
ts.into_iter()
5+
.map(|t| match t {
6+
TokenTree::Group(g) => {
7+
let mut fixed = Group::new(
8+
match g.delimiter() {
9+
Delimiter::None => Delimiter::Parenthesis,
10+
d => d,
11+
},
12+
fix(g.stream()),
13+
);
14+
fixed.set_span(g.span());
15+
TokenTree::Group(fixed)
16+
}
17+
t => t,
18+
})
19+
.collect()
20+
}

assert2-macros/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@ type FormatArgs = Punctuated<syn::Expr, syn::token::Comma>;
1414
#[doc(hidden)]
1515
#[proc_macro]
1616
pub fn check_impl(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
17-
check_or_assert_impl(syn::parse_macro_input!(tokens)).into()
17+
hygiene_bug::fix(check_or_assert_impl(syn::parse_macro_input!(tokens)).into())
1818
}
1919

20+
mod hygiene_bug;
2021
mod let_assert;
2122

2223
#[doc(hidden)]
2324
#[proc_macro]
2425
pub fn let_assert_impl(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
25-
let_assert::let_assert_impl(syn::parse_macro_input!(tokens)).into()
26+
hygiene_bug::fix(let_assert::let_assert_impl(syn::parse_macro_input!(tokens)).into())
2627
}
2728

2829
/// Real implementation for assert!() and check!().

0 commit comments

Comments
 (0)