From 3a47dba761b706e747bc9e8728e14a7b9aeba5b0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 9 Oct 2021 22:19:42 +0300 Subject: [PATCH 1/4] fix tests --- .../hir_def/src/macro_expansion_tests/mbe.rs | 20 +++++++++++++++++++ crates/mbe/src/tests/expand.rs | 15 -------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 7279ff7e33..3c5a02ce2e 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -615,3 +615,23 @@ fn bar() {} "#]], ); } + +#[test] +fn test_macro_2_0_panic_2015() { + check( + r#" +macro panic_2015 { + () => (), + (bar) => (), +} +panic_2015!(bar); +"#, + expect![[r#" +macro panic_2015 { + () => (), + (bar) => (), +} + +"#]], + ); +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 393c2041d9..758bf8c6f7 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,21 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_macro_2_0_panic_2015() { - parse_macro2( - r#" -macro panic_2015 { - () => ( - ), - (bar) => ( - ), -} -"#, - ) - .assert_expand_items("panic_2015!(bar);", ""); -} - #[test] fn test_path() { parse_macro( From f17f5d68f9a771791daa895ecea33659557e0359 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 9 Oct 2021 22:23:38 +0300 Subject: [PATCH 2/4] move tests --- .../hir_def/src/macro_expansion_tests/mbe.rs | 69 +++++++++++++++++++ crates/mbe/src/tests/expand.rs | 46 ------------- 2 files changed, 69 insertions(+), 46 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 3c5a02ce2e..ae93ce2ae8 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -635,3 +635,72 @@ macro panic_2015 { "#]], ); } + +#[test] +fn test_path() { + check( + r#" +macro_rules! m { + ($p:path) => { fn foo() { let a = $p; } } +} + +m! { foo } + +m! { bar::::baz:: } +"#, + expect![[r#" +macro_rules! m { + ($p:path) => { fn foo() { let a = $p; } } +} + +fn foo() { + let a = foo; +} + +fn foo() { + let a = bar::::baz:: ; +} +"#]], + ); +} + +#[test] +fn test_two_paths() { + check( + r#" +macro_rules! m { + ($i:path, $j:path) => { fn foo() { let a = $ i; let b = $j; } } +} +m! { foo, bar } +"#, + expect![[r#" +macro_rules! m { + ($i:path, $j:path) => { fn foo() { let a = $ i; let b = $j; } } +} +fn foo() { + let a = foo; + let b = bar; +} +"#]], + ); +} + +#[test] +fn test_path_with_path() { + check( + r#" +macro_rules! m { + ($p:path) => { fn foo() { let a = $p::bar; } } +} +m! { foo } +"#, + expect![[r#" +macro_rules! m { + ($p:path) => { fn foo() { let a = $p::bar; } } +} +fn foo() { + let a = foo::bar; +} +"#]], + ); +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 758bf8c6f7..b3e30391f7 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,52 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_path() { - parse_macro( - r#" - macro_rules! foo { - ($ i:path) => { - fn foo() { let a = $ i; } - } - } -"#, - ) - .assert_expand_items("foo! { foo }", "fn foo () {let a = foo ;}") - .assert_expand_items( - "foo! { bar::::baz:: }", - "fn foo () {let a = bar ::< u8 >:: baz ::< u8 > ;}", - ); -} - -#[test] -fn test_two_paths() { - parse_macro( - r#" - macro_rules! foo { - ($ i:path, $ j:path) => { - fn foo() { let a = $ i; let b = $j; } - } - } -"#, - ) - .assert_expand_items("foo! { foo, bar }", "fn foo () {let a = foo ; let b = bar ;}"); -} - -#[test] -fn test_path_with_path() { - parse_macro( - r#" - macro_rules! foo { - ($ i:path) => { - fn foo() { let a = $ i :: bar; } - } - } -"#, - ) - .assert_expand_items("foo! { foo }", "fn foo () {let a = foo :: bar ;}"); -} - #[test] fn test_expr() { parse_macro( From e9902b92ab0e886a190a2babdbe7a940955bceed Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 9 Oct 2021 23:33:43 +0300 Subject: [PATCH 3/4] internal: move some mbe tests --- crates/hir_def/src/macro_expansion_tests.rs | 1 + .../hir_def/src/macro_expansion_tests/mbe.rs | 74 +++++++++++++++++++ crates/mbe/src/tests/expand.rs | 52 ------------- 3 files changed, 75 insertions(+), 52 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests.rs b/crates/hir_def/src/macro_expansion_tests.rs index c66c75c143..e892ab5268 100644 --- a/crates/hir_def/src/macro_expansion_tests.rs +++ b/crates/hir_def/src/macro_expansion_tests.rs @@ -121,6 +121,7 @@ fn pretty_print_macro_expansion(expn: SyntaxNode) -> String { (T![;] | T!['{'] | T!['}'], _) => "\n", (_, T!['}']) => "\n", (IDENT | LIFETIME_IDENT, IDENT | LIFETIME_IDENT) => " ", + _ if prev_kind.is_keyword() && curr_kind.is_keyword() => " ", (IDENT, _) if curr_kind.is_keyword() => " ", (_, IDENT) if prev_kind.is_keyword() => " ", (T![>], IDENT) => " ", diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index ae93ce2ae8..958f2a1c33 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -704,3 +704,77 @@ fn foo() { "#]], ); } + +#[test] +fn test_expr() { + check( + r#" +macro_rules! m { + ($e:expr) => { fn bar() { $e; } } +} + +m! { 2 + 2 * baz(3).quux() } +"#, + expect![[r#" +macro_rules! m { + ($e:expr) => { fn bar() { $e; } } +} + +fn bar() { + 2+2*baz(3).quux(); +} +"#]], + ) +} + +#[test] +fn test_last_expr() { + check( + r#" +macro_rules! vec { + ($($item:expr),*) => {{ + let mut v = Vec::new(); + $( v.push($item); )* + v + }}; +} + +fn f() { + vec![1,2,3]; +} +"#, + expect![[r#" +macro_rules! vec { + ($($item:expr),*) => {{ + let mut v = Vec::new(); + $( v.push($item); )* + v + }}; +} + +fn f() { + { + let mut v = Vec::new(); + v.push(1); + v.push(2); + v.push(3); + v + }; +} +"#]], + ); +} + +#[test] +fn test_expr_with_attr() { + check( + r#" +macro_rules! m { ($a:expr) => { x!(); } } +m!(#[allow(a)]()); +"#, + expect![[r#" +macro_rules! m { ($a:expr) => { x!(); } } +x!(); +"#]], + ) +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index b3e30391f7..01b5533522 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,58 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_expr() { - parse_macro( - r#" - macro_rules! foo { - ($ i:expr) => { - fn bar() { $ i; } - } - } -"#, - ) - .assert_expand_items( - "foo! { 2 + 2 * baz(3).quux() }", - "fn bar () {2 + 2 * baz (3) . quux () ;}", - ); -} - -#[test] -fn test_last_expr() { - parse_macro( - r#" - macro_rules! vec { - ($($item:expr),*) => { - { - let mut v = Vec::new(); - $( - v.push($item); - )* - v - } - }; - } -"#, - ) - .assert_expand_items( - "vec!(1,2,3);", - "{let mut v = Vec :: new () ; v . push (1) ; v . push (2) ; v . push (3) ; v}", - ); -} - -#[test] -fn test_expr_with_attr() { - parse_macro( - r#" -macro_rules! m { - ($a:expr) => {0} -} -"#, - ) - .assert_expand_items("m!(#[allow(a)]())", "0"); -} - #[test] fn test_ty() { parse_macro( From c6d5c1c9463d485220d041d1617365f03df221a4 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:09:16 +0300 Subject: [PATCH 4/4] dead code --- crates/mbe/src/tests.rs | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/crates/mbe/src/tests.rs b/crates/mbe/src/tests.rs index ad5ae3a32c..64d80baa3e 100644 --- a/crates/mbe/src/tests.rs +++ b/crates/mbe/src/tests.rs @@ -80,6 +80,7 @@ macro_rules! impl_fixture { test_utils::assert_eq_text!(&expected.trim(), &actual.trim()); } + #[allow(unused)] fn assert_expand_items(&self, invocation: &str, expected: &str) -> &$name { self.assert_expansion(ParserEntryPoint::Items, invocation, expected); self @@ -140,12 +141,6 @@ pub(crate) fn parse_macro(ra_fixture: &str) -> MacroFixture { MacroFixture { rules } } -pub(crate) fn parse_macro2(ra_fixture: &str) -> MacroFixture2 { - let definition_tt = parse_macro_def_to_tt(ra_fixture); - let rules = MacroDef::parse(&definition_tt).unwrap(); - MacroFixture2 { rules } -} - pub(crate) fn parse_macro_error(ra_fixture: &str) -> ParseError { let definition_tt = parse_macro_rules_to_tt(ra_fixture); @@ -183,22 +178,6 @@ fn parse_macro_rules_to_tt(ra_fixture: &str) -> tt::Subtree { definition_tt } -fn parse_macro_def_to_tt(ra_fixture: &str) -> tt::Subtree { - let source_file = ast::SourceFile::parse(ra_fixture).ok().unwrap(); - let macro_definition = - source_file.syntax().descendants().find_map(ast::MacroDef::cast).unwrap(); - - let (definition_tt, _) = syntax_node_to_token_tree(macro_definition.body().unwrap().syntax()); - - let parsed = - parse_to_token_tree(&ra_fixture[macro_definition.body().unwrap().syntax().text_range()]) - .unwrap() - .0; - assert_eq!(definition_tt, parsed); - - definition_tt -} - fn debug_dump_ignore_spaces(node: &syntax::SyntaxNode) -> String { let mut level = 0; let mut buf = String::new();