From 1c15f47e00184aac1e830e1cfa57a8fff7ba272b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:11:50 +0300 Subject: [PATCH 1/9] internal: move tests --- .../hir_def/src/macro_expansion_tests/mbe.rs | 42 +++++++++++++++++++ crates/mbe/src/tests/expand.rs | 37 ---------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 958f2a1c3317..0d3d86c8ad68 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -778,3 +778,45 @@ x!(); "#]], ) } + +#[test] +fn test_ty() { + check( + r#" +macro_rules! foo { + ($t:ty) => ( fn bar() -> $t {} ) +} +foo! { Baz } +"#, + expect![[r#" +macro_rules! foo { + ($t:ty) => ( fn bar() -> $t {} ) +} +fn bar() -> Baz {} +"#]], + ) +} + +#[test] +fn test_ty_with_complex_type() { + check( + r#" +macro_rules! foo { + ($t:ty) => ( fn bar() -> $ t {} ) +} + +foo! { &'a Baz } + +foo! { extern "Rust" fn() -> Ret } +"#, + expect![[r#" +macro_rules! foo { + ($t:ty) => ( fn bar() -> $ t {} ) +} + +fn bar() -> & 'a Baz {} + +fn bar() -> extern"Rust"fn() -> Ret {} +"#]], + ); +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 01b553352268..85283181523e 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,43 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_ty() { - parse_macro( - r#" - macro_rules! foo { - ($ i:ty) => ( - fn bar() -> $ i { unimplemented!() } - ) - } -"#, - ) - .assert_expand_items("foo! { Baz }", "fn bar () -> Baz < u8 > {unimplemented ! ()}"); -} - -#[test] -fn test_ty_with_complex_type() { - parse_macro( - r#" - macro_rules! foo { - ($ i:ty) => ( - fn bar() -> $ i { unimplemented!() } - ) - } -"#, - ) - // Reference lifetime struct with generic type - .assert_expand_items( - "foo! { &'a Baz }", - "fn bar () -> & 'a Baz < u8 > {unimplemented ! ()}", - ) - // extern "Rust" func type - .assert_expand_items( - r#"foo! { extern "Rust" fn() -> Ret }"#, - r#"fn bar () -> extern "Rust" fn () -> Ret {unimplemented ! ()}"#, - ); -} - #[test] fn test_pat_() { parse_macro( From 9c819eaa9a7f6dc394571c95a8b4ad8cec440d5b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:15:42 +0300 Subject: [PATCH 2/9] move tests --- .../hir_def/src/macro_expansion_tests/mbe.rs | 72 +++++++++++++++++-- crates/mbe/src/tests/expand.rs | 41 ----------- 2 files changed, 65 insertions(+), 48 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 0d3d86c8ad68..1cabce70fec8 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -783,13 +783,13 @@ x!(); fn test_ty() { check( r#" -macro_rules! foo { +macro_rules! m { ($t:ty) => ( fn bar() -> $t {} ) } -foo! { Baz } +m! { Baz } "#, expect![[r#" -macro_rules! foo { +macro_rules! m { ($t:ty) => ( fn bar() -> $t {} ) } fn bar() -> Baz {} @@ -801,16 +801,16 @@ fn bar() -> Baz {} fn test_ty_with_complex_type() { check( r#" -macro_rules! foo { +macro_rules! m { ($t:ty) => ( fn bar() -> $ t {} ) } -foo! { &'a Baz } +m! { &'a Baz } -foo! { extern "Rust" fn() -> Ret } +m! { extern "Rust" fn() -> Ret } "#, expect![[r#" -macro_rules! foo { +macro_rules! m { ($t:ty) => ( fn bar() -> $ t {} ) } @@ -820,3 +820,61 @@ fn bar() -> extern"Rust"fn() -> Ret {} "#]], ); } + +#[test] +fn test_pat_() { + check( + r#" +macro_rules! m { + ($p:pat) => { fn foo() { let $p; } } +} +m! { (a, b) } +"#, + expect![[r#" +macro_rules! m { + ($p:pat) => { fn foo() { let $p; } } +} +fn foo() { + let(a,b); +} +"#]], + ); +} + +#[test] +fn test_stmt() { + check( + r#" +macro_rules! m { + ($s:stmt) => ( fn bar() { $s; } ) +} +m! { 2 } +m! { let a = 0 } +"#, + expect![[r#" +macro_rules! m { + ($s:stmt) => ( fn bar() { $s; } ) +} +fn bar() { + 2; +} +fn bar() { + let a = 0; +} +"#]], + ) +} + +#[test] +fn test_single_item() { + check( + r#" +macro_rules! m { ($i:item) => ( $i ) } +m! { mod c {} } +"#, + expect![[r#" +macro_rules! m { ($i:item) => ( $i ) } +mod c {} +"#]], + ) +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 85283181523e..2cb0fc4aad0f 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,47 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_pat_() { - parse_macro( - r#" - macro_rules! foo { - ($ i:pat) => { fn foo() { let $ i; } } - } -"#, - ) - .assert_expand_items("foo! { (a, b) }", "fn foo () {let (a , b) ;}"); -} - -#[test] -fn test_stmt() { - parse_macro( - r#" - macro_rules! foo { - ($ i:stmt) => ( - fn bar() { $ i; } - ) - } -"#, - ) - .assert_expand_items("foo! { 2 }", "fn bar () {2 ;}") - .assert_expand_items("foo! { let a = 0 }", "fn bar () {let a = 0 ;}"); -} - -#[test] -fn test_single_item() { - parse_macro( - r#" - macro_rules! foo { - ($ i:item) => ( - $ i - ) - } -"#, - ) - .assert_expand_items("foo! {mod c {}}", "mod c {}"); -} - #[test] fn test_all_items() { parse_macro( From 2510eaa9b2acc65d0395ae81296197a9e4c9bdfd Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:16:25 +0300 Subject: [PATCH 3/9] test formatting --- crates/hir_def/src/macro_expansion_tests.rs | 1 + crates/hir_def/src/macro_expansion_tests/mbe.rs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/hir_def/src/macro_expansion_tests.rs b/crates/hir_def/src/macro_expansion_tests.rs index e892ab52686f..3cc3d34cb083 100644 --- a/crates/hir_def/src/macro_expansion_tests.rs +++ b/crates/hir_def/src/macro_expansion_tests.rs @@ -128,6 +128,7 @@ fn pretty_print_macro_expansion(expn: SyntaxNode) -> String { (T![>], _) if curr_kind.is_keyword() => " ", (T![->], _) | (_, T![->]) => " ", (T![&&], _) | (_, T![&&]) => " ", + (T![,], _) => " ", _ => "", }; diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 1cabce70fec8..d7ff87844c7c 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -835,7 +835,7 @@ macro_rules! m { ($p:pat) => { fn foo() { let $p; } } } fn foo() { - let(a,b); + let(a, b); } "#]], ); From b0a104cbd1482d0d108217075fae85e0349b54af Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:22:12 +0300 Subject: [PATCH 4/9] test formatting --- crates/hir_def/src/macro_expansion_tests.rs | 6 ++++-- crates/hir_def/src/macro_expansion_tests/mbe.rs | 4 ++-- .../src/macro_expansion_tests/mbe/tt_conversion.rs | 10 +++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests.rs b/crates/hir_def/src/macro_expansion_tests.rs index 3cc3d34cb083..c3fb6fc647e9 100644 --- a/crates/hir_def/src/macro_expansion_tests.rs +++ b/crates/hir_def/src/macro_expansion_tests.rs @@ -20,7 +20,7 @@ use stdx::format_to; use syntax::{ ast::{self, edit::IndentLevel}, AstNode, - SyntaxKind::{self, IDENT, LIFETIME_IDENT}, + SyntaxKind::{EOF, IDENT, LIFETIME_IDENT}, SyntaxNode, T, }; @@ -109,7 +109,7 @@ fn reindent(indent: IndentLevel, pp: String) -> String { fn pretty_print_macro_expansion(expn: SyntaxNode) -> String { let mut res = String::new(); - let mut prev_kind = SyntaxKind::EOF; + let mut prev_kind = EOF; let mut indent_level = 0; for token in iter::successors(expn.first_token(), |t| t.next_token()) { let curr_kind = token.kind(); @@ -129,6 +129,8 @@ fn pretty_print_macro_expansion(expn: SyntaxNode) -> String { (T![->], _) | (_, T![->]) => " ", (T![&&], _) | (_, T![&&]) => " ", (T![,], _) => " ", + (T![fn], T!['(']) => "", + _ if prev_kind.is_keyword() => " ", _ => "", }; diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index d7ff87844c7c..9954544e91b7 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -816,7 +816,7 @@ macro_rules! m { fn bar() -> & 'a Baz {} -fn bar() -> extern"Rust"fn() -> Ret {} +fn bar() -> extern "Rust"fn() -> Ret {} "#]], ); } @@ -835,7 +835,7 @@ macro_rules! m { ($p:pat) => { fn foo() { let $p; } } } fn foo() { - let(a, b); + let (a, b); } "#]], ); diff --git a/crates/hir_def/src/macro_expansion_tests/mbe/tt_conversion.rs b/crates/hir_def/src/macro_expansion_tests/mbe/tt_conversion.rs index 3450cda3fda2..291f99330f1e 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe/tt_conversion.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe/tt_conversion.rs @@ -53,11 +53,11 @@ macro_rules! m { } } fn f() { - let_ = 'c'; - let_ = 1000; - let_ = 12E+99_f64; - let_ = "rust1"; - let_ = -92; + let _ = 'c'; + let _ = 1000; + let _ = 12E+99_f64; + let _ = "rust1"; + let _ = -92; } "#]], ); From 408475a59329c32766b4e4ad8296b6726e17bfec Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:26:18 +0300 Subject: [PATCH 5/9] move test --- .../hir_def/src/macro_expansion_tests/mbe.rs | 58 +++++++++++++++++++ crates/mbe/src/tests/expand.rs | 45 -------------- 2 files changed, 58 insertions(+), 45 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 9954544e91b7..b4b4ad10ae08 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -878,3 +878,61 @@ mod c {} "#]], ) } + +#[test] +fn test_all_items() { + check( + r#" +macro_rules! m { ($($i:item)*) => ($($i )*) } +m! { + extern crate a; + mod b; + mod c {} + use d; + const E: i32 = 0; + static F: i32 = 0; + impl G {} + struct H; + enum I { Foo } + trait J {} + fn h() {} + extern {} + type T = u8; +} +"#, + expect![[r#" +macro_rules! m { ($($i:item)*) => ($($i )*) } +extern crate a; +mod b; +mod c {} +use d; +const E:i32 = 0; +static F:i32 = 0; +impl G {} +struct H; +enum I { + Foo +} +trait J {} +fn h() {} +extern {} +type T = u8; +"#]], + ); +} + +#[test] +fn test_block() { + check( + r#" +macro_rules! m { ($b:block) => { fn foo() $b } } +m! { { 1; } } +"#, + expect![[r#" +macro_rules! m { ($b:block) => { fn foo() $b } } +fn foo() { + 1; +} +"#]], + ); +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 2cb0fc4aad0f..8fee2420760a 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,51 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_all_items() { - parse_macro( - r#" - macro_rules! foo { - ($ ($ i:item)*) => ($ ( - $ i - )*) - } -"#, - ). - assert_expand_items( - r#" - foo! { - extern crate a; - mod b; - mod c {} - use d; - const E: i32 = 0; - static F: i32 = 0; - impl G {} - struct H; - enum I { Foo } - trait J {} - fn h() {} - extern {} - type T = u8; - } -"#, - r#"extern crate a ; mod b ; mod c {} use d ; const E : i32 = 0 ; static F : i32 = 0 ; impl G {} struct H ; enum I {Foo} trait J {} fn h () {} extern {} type T = u8 ;"#, - ); -} - -#[test] -fn test_block() { - parse_macro( - r#" - macro_rules! foo { - ($ i:block) => { fn foo() $ i } - } -"#, - ) - .assert_expand_statements("foo! { { 1; } }", "fn foo () {1 ;}"); -} - #[test] fn test_meta() { parse_macro( From 7e53a3ce23c2ad9c0b92fbc3f5c3a025fa3be6a6 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:29:26 +0300 Subject: [PATCH 6/9] move test --- crates/hir_def/src/macro_expansion_tests.rs | 1 + .../hir_def/src/macro_expansion_tests/mbe.rs | 20 +++++++++++++++++++ crates/mbe/src/tests/expand.rs | 19 ------------------ 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests.rs b/crates/hir_def/src/macro_expansion_tests.rs index c3fb6fc647e9..5c0894419c79 100644 --- a/crates/hir_def/src/macro_expansion_tests.rs +++ b/crates/hir_def/src/macro_expansion_tests.rs @@ -130,6 +130,7 @@ fn pretty_print_macro_expansion(expn: SyntaxNode) -> String { (T![&&], _) | (_, T![&&]) => " ", (T![,], _) => " ", (T![fn], T!['(']) => "", + (T![']'], _) if curr_kind.is_keyword() => " ", _ if prev_kind.is_keyword() => " ", _ => "", }; diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index b4b4ad10ae08..2fe70e9f4fc9 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -936,3 +936,23 @@ fn foo() { "#]], ); } + +#[test] +fn test_meta() { + check( + r#" +macro_rules! m { + ($m:meta) => ( #[$m] fn bar() {} ) +} +m! { cfg(target_os = "windows") } +m! { hello::world } +"#, + expect![[r##" +macro_rules! m { + ($m:meta) => ( #[$m] fn bar() {} ) +} +#[cfg(target_os = "windows")] fn bar() {} +#[hello::world] fn bar() {} +"##]], + ); +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 8fee2420760a..792998944295 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,25 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_meta() { - parse_macro( - r#" - macro_rules! foo { - ($ i:meta) => ( - #[$ i] - fn bar() {} - ) - } -"#, - ) - .assert_expand_items( - r#"foo! { cfg(target_os = "windows") }"#, - r#"# [cfg (target_os = "windows")] fn bar () {}"#, - ) - .assert_expand_items(r#"foo! { hello::world }"#, r#"# [hello :: world] fn bar () {}"#); -} - #[test] fn test_meta_doc_comments() { parse_macro( From a3470a8114eb3db2e67a4876b04c70fb8f7ba712 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:39:08 +0300 Subject: [PATCH 7/9] move tests --- crates/hir_def/src/macro_expansion_tests.rs | 1 + .../hir_def/src/macro_expansion_tests/mbe.rs | 87 +++++++++++++++++++ crates/mbe/src/syntax_bridge.rs | 1 + crates/mbe/src/tests/expand.rs | 84 ------------------ 4 files changed, 89 insertions(+), 84 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests.rs b/crates/hir_def/src/macro_expansion_tests.rs index 5c0894419c79..66874a674d82 100644 --- a/crates/hir_def/src/macro_expansion_tests.rs +++ b/crates/hir_def/src/macro_expansion_tests.rs @@ -131,6 +131,7 @@ fn pretty_print_macro_expansion(expn: SyntaxNode) -> String { (T![,], _) => " ", (T![fn], T!['(']) => "", (T![']'], _) if curr_kind.is_keyword() => " ", + (T![']'], T![#]) => "\n", _ if prev_kind.is_keyword() => " ", _ => "", }; diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 2fe70e9f4fc9..d17c9131da75 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -956,3 +956,90 @@ macro_rules! m { "##]], ); } + +#[test] +fn test_meta_doc_comments() { + cov_mark::check!(test_meta_doc_comments); + check( + r#" +macro_rules! m { + ($(#[$m:meta])+) => ( $(#[$m])+ fn bar() {} ) +} +m! { + /// Single Line Doc 1 + /** + MultiLines Doc + */ +} +"#, + expect![[r##" +macro_rules! m { + ($(#[$m:meta])+) => ( $(#[$m])+ fn bar() {} ) +} +#[doc = " Single Line Doc 1"] +#[doc = "\n MultiLines Doc\n "] fn bar() {} +"##]], + ); +} + +#[test] +fn test_meta_extended_key_value_attributes() { + check( + r#" +macro_rules! m { + (#[$m:meta]) => ( #[$m] fn bar() {} ) +} +m! { #[doc = concat!("The `", "bla", "` lang item.")] } +"#, + expect![[r##" +macro_rules! m { + (#[$m:meta]) => ( #[$m] fn bar() {} ) +} +#[doc = concat!("The `", "bla", "` lang item.")] fn bar() {} +"##]], + ); +} + +#[test] +fn test_meta_doc_comments_non_latin() { + check( + r#" +macro_rules! m { + ($(#[$ m:meta])+) => ( $(#[$m])+ fn bar() {} ) +} +m! { + /// 錦瑟無端五十弦,一弦一柱思華年。 + /** + 莊生曉夢迷蝴蝶,望帝春心託杜鵑。 + */ +} +"#, + expect![[r##" +macro_rules! m { + ($(#[$ m:meta])+) => ( $(#[$m])+ fn bar() {} ) +} +#[doc = " 錦瑟無端五十弦,一弦一柱思華年。"] +#[doc = "\n 莊生曉夢迷蝴蝶,望帝春心託杜鵑。\n "] fn bar() {} +"##]], + ); +} + +#[test] +fn test_meta_doc_comments_escaped_characters() { + check( + r#" +macro_rules! m { + ($(#[$m:meta])+) => ( $(#[$m])+ fn bar() {} ) +} +m! { + /// \ " ' +} +"#, + expect![[r##" +macro_rules! m { + ($(#[$m:meta])+) => ( $(#[$m])+ fn bar() {} ) +} +#[doc = " \\ \" \'"] fn bar() {} +"##]], + ); +} diff --git a/crates/mbe/src/syntax_bridge.rs b/crates/mbe/src/syntax_bridge.rs index f3c9af1ccb4b..6bd57bb568bf 100644 --- a/crates/mbe/src/syntax_bridge.rs +++ b/crates/mbe/src/syntax_bridge.rs @@ -307,6 +307,7 @@ fn doc_comment_text(comment: &ast::Comment) -> SmolStr { } fn convert_doc_comment(token: &syntax::SyntaxToken) -> Option> { + cov_mark::hit!(test_meta_doc_comments); let comment = ast::Comment::cast(token.clone())?; let doc = comment.kind().doc?; diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 792998944295..2ff85740f5c4 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,90 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_meta_doc_comments() { - parse_macro( - r#" - macro_rules! foo { - ($(#[$ i:meta])+) => ( - $(#[$ i])+ - fn bar() {} - ) - } -"#, - ). - assert_expand_items( - r#"foo! { - /// Single Line Doc 1 - /** - MultiLines Doc - */ - }"#, - "# [doc = \" Single Line Doc 1\"] # [doc = \"\\n MultiLines Doc\\n \"] fn bar () {}", - ); -} - -#[test] -fn test_meta_extended_key_value_attributes() { - parse_macro( - r#" -macro_rules! foo { - (#[$i:meta]) => ( - #[$ i] - fn bar() {} - ) -} -"#, - ) - .assert_expand_items( - r#"foo! { #[doc = concat!("The `", "bla", "` lang item.")] }"#, - r#"# [doc = concat ! ("The `" , "bla" , "` lang item.")] fn bar () {}"#, - ); -} - -#[test] -fn test_meta_doc_comments_non_latin() { - parse_macro( - r#" - macro_rules! foo { - ($(#[$ i:meta])+) => ( - $(#[$ i])+ - fn bar() {} - ) - } -"#, - ). - assert_expand_items( - r#"foo! { - /// 錦瑟無端五十弦,一弦一柱思華年。 - /** - 莊生曉夢迷蝴蝶,望帝春心託杜鵑。 - */ - }"#, - "# [doc = \" 錦瑟無端五十弦,一弦一柱思華年。\"] # [doc = \"\\n 莊生曉夢迷蝴蝶,望帝春心託杜鵑。\\n \"] fn bar () {}", - ); -} - -#[test] -fn test_meta_doc_comments_escaped_characters() { - parse_macro( - r#" - macro_rules! foo { - ($(#[$ i:meta])+) => ( - $(#[$ i])+ - fn bar() {} - ) - } -"#, - ) - .assert_expand_items( - r#"foo! { - /// \ " ' - }"#, - r#"# [doc = " \\ \" \'"] fn bar () {}"#, - ); -} - #[test] fn test_tt_block() { parse_macro( From c88cda04db13c5d471bd5c17462e58048e06e6ec Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:44:46 +0300 Subject: [PATCH 8/9] move some tests --- .../hir_def/src/macro_expansion_tests/mbe.rs | 76 +++++++++++++++++ crates/mbe/src/tests/expand.rs | 83 ------------------- 2 files changed, 76 insertions(+), 83 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index d17c9131da75..86110017a97f 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -1043,3 +1043,79 @@ macro_rules! m { "##]], ); } + +#[test] +fn test_tt_block() { + check( + r#" +macro_rules! m { ($tt:tt) => { fn foo() $tt } } +m! { { 1; } } +"#, + expect![[r#" +macro_rules! m { ($tt:tt) => { fn foo() $tt } } +fn foo() { + 1; +} +"#]], + ); +} + +#[test] +fn test_tt_group() { + check( + r#" +macro_rules! m { ($($tt:tt)*) => { $($tt)* } } +m! { fn foo() {} }" +"#, + expect![[r#" +macro_rules! m { ($($tt:tt)*) => { $($tt)* } } +fn foo() {}" +"#]], + ); +} + +#[test] +fn test_tt_composite() { + check( + r#" +macro_rules! m { ($tt:tt) => { ok!(); } } +m! { => } +m! { = > } +"#, + expect![[r#" +macro_rules! m { ($tt:tt) => { ok!(); } } +ok!(); +/* error: leftover tokens */ok!(); +"#]], + ); +} + +#[test] +fn test_tt_composite2() { + check( + r#" +macro_rules! m { ($($tt:tt)*) => { abs!(=> $($tt)*); } } +m! {#} +"#, + expect![[r##" +macro_rules! m { ($($tt:tt)*) => { abs!(=> $($tt)*); } } +abs!( = > #); +"##]], + ); +} + +#[test] +fn test_tt_with_composite_without_space() { + // Test macro input without any spaces + // See https://github.com/rust-analyzer/rust-analyzer/issues/6692 + check( + r#" +macro_rules! m { ($ op:tt, $j:path) => ( ok!(); ) } +m!(==,Foo::Bool) +"#, + expect![[r#" +macro_rules! m { ($ op:tt, $j:path) => ( ok!(); ) } +ok!(); +"#]], + ); +} diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs index 2ff85740f5c4..15a718402911 100644 --- a/crates/mbe/src/tests/expand.rs +++ b/crates/mbe/src/tests/expand.rs @@ -101,89 +101,6 @@ fn test_attr_to_token_tree() { ); } -#[test] -fn test_tt_block() { - parse_macro( - r#" - macro_rules! foo { - ($ i:tt) => { fn foo() $ i } - } - "#, - ) - .assert_expand_items(r#"foo! { { 1; } }"#, r#"fn foo () {1 ;}"#); -} - -#[test] -fn test_tt_group() { - parse_macro( - r#" - macro_rules! foo { - ($($ i:tt)*) => { $($ i)* } - } - "#, - ) - .assert_expand_items(r#"foo! { fn foo() {} }"#, r#"fn foo () {}"#); -} - -#[test] -fn test_tt_composite() { - parse_macro( - r#" - macro_rules! foo { - ($i:tt) => { 0 } - } - "#, - ) - .assert_expand_items(r#"foo! { => }"#, r#"0"#); -} - -#[test] -fn test_tt_composite2() { - let node = parse_macro( - r#" - macro_rules! foo { - ($($tt:tt)*) => { abs!(=> $($tt)*) } - } - "#, - ) - .expand_items(r#"foo!{#}"#); - - let res = format!("{:#?}", &node); - assert_eq_text!( - r###"MACRO_ITEMS@0..10 - MACRO_CALL@0..10 - PATH@0..3 - PATH_SEGMENT@0..3 - NAME_REF@0..3 - IDENT@0..3 "abs" - BANG@3..4 "!" - TOKEN_TREE@4..10 - L_PAREN@4..5 "(" - EQ@5..6 "=" - R_ANGLE@6..7 ">" - WHITESPACE@7..8 " " - POUND@8..9 "#" - R_PAREN@9..10 ")""###, - res.trim() - ); -} - -#[test] -fn test_tt_with_composite_without_space() { - parse_macro( - r#" - macro_rules! foo { - ($ op:tt, $j:path) => ( - 0 - ) - } -"#, - ) - // Test macro input without any spaces - // See https://github.com/rust-analyzer/rust-analyzer/issues/6692 - .assert_expand_items("foo!(==,Foo::Bool)", "0"); -} - #[test] fn test_underscore() { parse_macro( From 3c9dda6ca9471bb6a42accbf23226595782c0fb9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 10 Oct 2021 11:45:05 +0300 Subject: [PATCH 9/9] internal: consistently use `ok!();` for succesfull macro expansion --- crates/hir_def/src/macro_expansion_tests/mbe.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs index 86110017a97f..df93298a3561 100644 --- a/crates/hir_def/src/macro_expansion_tests/mbe.rs +++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs @@ -403,15 +403,15 @@ fn test_match_group_in_group() { check( r#" macro_rules! m { - [ $( ( $($i:ident)* ) )* ] => [ x![$( ( $($i)* ) )*]; ] + [ $( ( $($i:ident)* ) )* ] => [ ok![$( ( $($i)* ) )*]; ] } m! ( (a b) ); "#, expect![[r#" macro_rules! m { - [ $( ( $($i:ident)* ) )* ] => [ x![$( ( $($i)* ) )*]; ] + [ $( ( $($i:ident)* ) )* ] => [ ok![$( ( $($i)* ) )*]; ] } -x![(a b)]; +ok![(a b)]; "#]], ) } @@ -769,12 +769,12 @@ fn f() { fn test_expr_with_attr() { check( r#" -macro_rules! m { ($a:expr) => { x!(); } } +macro_rules! m { ($a:expr) => { ok!(); } } m!(#[allow(a)]()); "#, expect![[r#" -macro_rules! m { ($a:expr) => { x!(); } } -x!(); +macro_rules! m { ($a:expr) => { ok!(); } } +ok!(); "#]], ) }