| use indoc::indoc; |
| use proc_macro2::{Delimiter, Group, TokenStream}; |
| use quote::quote; |
| |
| #[track_caller] |
| fn test(tokens: TokenStream, expected: &str) { |
| let syntax_tree: syn::File = syn::parse2(tokens).unwrap(); |
| let pretty = prettyplease::unparse(&syntax_tree); |
| assert_eq!(pretty, expected); |
| } |
| |
| #[test] |
| fn test_parenthesize_cond() { |
| let s = Group::new(Delimiter::None, quote!(Struct {})); |
| test( |
| quote! { |
| fn main() { |
| if #s == #s {} |
| } |
| }, |
| indoc! {" |
| fn main() { |
| if (Struct {}) == (Struct {}) {} |
| } |
| "}, |
| ); |
| } |
| |
| #[test] |
| fn test_parenthesize_match_guard() { |
| let expr_struct = Group::new(Delimiter::None, quote!(Struct {})); |
| let expr_binary = Group::new(Delimiter::None, quote!(true && false)); |
| test( |
| quote! { |
| fn main() { |
| match () { |
| () if let _ = #expr_struct => {} |
| () if let _ = #expr_binary => {} |
| } |
| } |
| }, |
| indoc! {" |
| fn main() { |
| match () { |
| () if let _ = Struct {} => {} |
| () if let _ = (true && false) => {} |
| } |
| } |
| "}, |
| ); |
| } |