Skip to content

Commit

Permalink
Check for redundant parens in permutations test
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Dec 30, 2024
1 parent 245bcb5 commit 2533d45
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
23 changes: 23 additions & 0 deletions tests/common/visit.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
use proc_macro2::{Delimiter, Group, TokenStream, TokenTree};
use std::mem;
use syn::visit_mut::{self, VisitMut};
use syn::{Expr, File, Generics, LifetimeParam, MacroDelimiter, Stmt, StmtMacro, TypeParam};

pub struct FlattenParens;

impl FlattenParens {
pub fn visit_token_stream_mut(tokens: &mut TokenStream) {
*tokens = mem::take(tokens)
.into_iter()
.flat_map(|tt| {
if let TokenTree::Group(group) = tt {
let delimiter = group.delimiter();
let mut content = group.stream();
Self::visit_token_stream_mut(&mut content);
if let Delimiter::Parenthesis = delimiter {
content
} else {
TokenStream::from(TokenTree::Group(Group::new(delimiter, content)))
}
} else {
TokenStream::from(tt)
}
})
.collect();
}
}

impl VisitMut for FlattenParens {
fn visit_expr_mut(&mut self, e: &mut Expr) {
while let Expr::Paren(paren) = e {
Expand Down
10 changes: 10 additions & 0 deletions tests/test_expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1191,6 +1191,16 @@ fn test_permutations() -> ExitCode {
if original != parsed {
fail!("before: {}\nafter: {}", tokens, parsed.to_token_stream());
}
let mut tokens_no_paren = tokens.clone();
FlattenParens::visit_token_stream_mut(&mut tokens_no_paren);
if tokens.to_string() != tokens_no_paren.to_string() {
if let Ok(mut parsed2) = syn::parse2::<Expr>(tokens_no_paren) {
FlattenParens.visit_expr_mut(&mut parsed2);
if original == parsed2 {
fail!("redundant parens: {}", tokens);
}
}
}
};

iter(2, &mut assert);
Expand Down

0 comments on commit 2533d45

Please sign in to comment.