Split test module for metavariable expressions
This commit is contained in:
parent
f6e3a87bf9
commit
9ebaa85d37
@ -4,6 +4,7 @@
|
|||||||
mod tt_conversion;
|
mod tt_conversion;
|
||||||
mod matching;
|
mod matching;
|
||||||
mod meta_syntax;
|
mod meta_syntax;
|
||||||
|
mod metavar_expr;
|
||||||
mod regression;
|
mod regression;
|
||||||
|
|
||||||
use expect_test::expect;
|
use expect_test::expect;
|
||||||
@ -1614,92 +1615,6 @@ struct Foo;
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_dollar_dollar() {
|
|
||||||
check(
|
|
||||||
r#"
|
|
||||||
macro_rules! register_struct { ($Struct:ident) => {
|
|
||||||
macro_rules! register_methods { ($$($method:ident),*) => {
|
|
||||||
macro_rules! implement_methods { ($$$$($$val:expr),*) => {
|
|
||||||
struct $Struct;
|
|
||||||
impl $Struct { $$(fn $method() -> &'static [u32] { &[$$$$($$$$val),*] })*}
|
|
||||||
}}
|
|
||||||
}}
|
|
||||||
}}
|
|
||||||
|
|
||||||
register_struct!(Foo);
|
|
||||||
register_methods!(alpha, beta);
|
|
||||||
implement_methods!(1, 2, 3);
|
|
||||||
"#,
|
|
||||||
expect![[r#"
|
|
||||||
macro_rules! register_struct { ($Struct:ident) => {
|
|
||||||
macro_rules! register_methods { ($$($method:ident),*) => {
|
|
||||||
macro_rules! implement_methods { ($$$$($$val:expr),*) => {
|
|
||||||
struct $Struct;
|
|
||||||
impl $Struct { $$(fn $method() -> &'static [u32] { &[$$$$($$$$val),*] })*}
|
|
||||||
}}
|
|
||||||
}}
|
|
||||||
}}
|
|
||||||
|
|
||||||
macro_rules !register_methods {
|
|
||||||
($($method: ident), *) = > {
|
|
||||||
macro_rules!implement_methods {
|
|
||||||
($$($val: expr), *) = > {
|
|
||||||
struct Foo;
|
|
||||||
impl Foo {
|
|
||||||
$(fn $method()-> &'static[u32] {
|
|
||||||
&[$$($$val), *]
|
|
||||||
}
|
|
||||||
)*
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
macro_rules !implement_methods {
|
|
||||||
($($val: expr), *) = > {
|
|
||||||
struct Foo;
|
|
||||||
impl Foo {
|
|
||||||
fn alpha()-> &'static[u32] {
|
|
||||||
&[$($val), *]
|
|
||||||
}
|
|
||||||
fn beta()-> &'static[u32] {
|
|
||||||
&[$($val), *]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
struct Foo;
|
|
||||||
impl Foo {
|
|
||||||
fn alpha() -> &'static[u32] {
|
|
||||||
&[1, 2, 3]
|
|
||||||
}
|
|
||||||
fn beta() -> &'static[u32] {
|
|
||||||
&[1, 2, 3]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"#]],
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_metavar_exprs() {
|
|
||||||
check(
|
|
||||||
r#"
|
|
||||||
macro_rules! m {
|
|
||||||
( $( $t:tt )* ) => ( $( ${ignore(t)} -${index()} )-* );
|
|
||||||
}
|
|
||||||
const _: i32 = m!(a b c);
|
|
||||||
"#,
|
|
||||||
expect![[r#"
|
|
||||||
macro_rules! m {
|
|
||||||
( $( $t:tt )* ) => ( $( ${ignore(t)} -${index()} )-* );
|
|
||||||
}
|
|
||||||
const _: i32 = -0--1--2;
|
|
||||||
"#]],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_punct_without_space() {
|
fn test_punct_without_space() {
|
||||||
// Puncts are "glued" greedily.
|
// Puncts are "glued" greedily.
|
||||||
|
91
crates/hir-def/src/macro_expansion_tests/mbe/metavar_expr.rs
Normal file
91
crates/hir-def/src/macro_expansion_tests/mbe/metavar_expr.rs
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
//! Tests for RFC 3086 metavariable expressions.
|
||||||
|
|
||||||
|
use expect_test::expect;
|
||||||
|
|
||||||
|
use crate::macro_expansion_tests::check;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_dollar_dollar() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
macro_rules! register_struct { ($Struct:ident) => {
|
||||||
|
macro_rules! register_methods { ($$($method:ident),*) => {
|
||||||
|
macro_rules! implement_methods { ($$$$($$val:expr),*) => {
|
||||||
|
struct $Struct;
|
||||||
|
impl $Struct { $$(fn $method() -> &'static [u32] { &[$$$$($$$$val),*] })*}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
|
||||||
|
register_struct!(Foo);
|
||||||
|
register_methods!(alpha, beta);
|
||||||
|
implement_methods!(1, 2, 3);
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
macro_rules! register_struct { ($Struct:ident) => {
|
||||||
|
macro_rules! register_methods { ($$($method:ident),*) => {
|
||||||
|
macro_rules! implement_methods { ($$$$($$val:expr),*) => {
|
||||||
|
struct $Struct;
|
||||||
|
impl $Struct { $$(fn $method() -> &'static [u32] { &[$$$$($$$$val),*] })*}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
|
||||||
|
macro_rules !register_methods {
|
||||||
|
($($method: ident), *) = > {
|
||||||
|
macro_rules!implement_methods {
|
||||||
|
($$($val: expr), *) = > {
|
||||||
|
struct Foo;
|
||||||
|
impl Foo {
|
||||||
|
$(fn $method()-> &'static[u32] {
|
||||||
|
&[$$($$val), *]
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
macro_rules !implement_methods {
|
||||||
|
($($val: expr), *) = > {
|
||||||
|
struct Foo;
|
||||||
|
impl Foo {
|
||||||
|
fn alpha()-> &'static[u32] {
|
||||||
|
&[$($val), *]
|
||||||
|
}
|
||||||
|
fn beta()-> &'static[u32] {
|
||||||
|
&[$($val), *]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
struct Foo;
|
||||||
|
impl Foo {
|
||||||
|
fn alpha() -> &'static[u32] {
|
||||||
|
&[1, 2, 3]
|
||||||
|
}
|
||||||
|
fn beta() -> &'static[u32] {
|
||||||
|
&[1, 2, 3]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#]],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_metavar_exprs() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
macro_rules! m {
|
||||||
|
( $( $t:tt )* ) => ( $( ${ignore(t)} -${index()} )-* );
|
||||||
|
}
|
||||||
|
const _: i32 = m!(a b c);
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
macro_rules! m {
|
||||||
|
( $( $t:tt )* ) => ( $( ${ignore(t)} -${index()} )-* );
|
||||||
|
}
|
||||||
|
const _: i32 = -0--1--2;
|
||||||
|
"#]],
|
||||||
|
);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user