diff --git a/crates/ra_hir/src/macros.rs b/crates/ra_hir/src/macros.rs index 5ad5cf51fa..6190b2c084 100644 --- a/crates/ra_hir/src/macros.rs +++ b/crates/ra_hir/src/macros.rs @@ -1,5 +1,7 @@ #[allow(unused)] mod tt; +#[allow(unused)] +mod mbe; /// Machinery for macro expansion. /// diff --git a/crates/ra_hir/src/macros/mbe.rs b/crates/ra_hir/src/macros/mbe.rs new file mode 100644 index 0000000000..5c1771a15d --- /dev/null +++ b/crates/ra_hir/src/macros/mbe.rs @@ -0,0 +1,50 @@ +use ra_syntax::SmolStr; + +struct MacroRules { + rules: Vec, +} + +struct Rule { + lhs: TokenTree, + rhs: TokenTree, +} + +enum TokenTree { + Leaf(Leaf), + Subtree(Subtree), +} + +enum Leaf { + Literal(Literal), + Punct(Punct), + Ident(Ident), + Var(Var), +} + +struct Subtree { + delimiter: Delimiter, + token_trees: Vec, +} + +enum Delimiter { + Parenthesis, + Brace, + Bracket, + None, +} + +struct Literal { + text: SmolStr, +} + +struct Punct { + char: char, +} + +struct Ident { + text: SmolStr, +} + +struct Var { + text: SmolStr, +}