From 8d5a8f085c966aec93cbde709ee9de8259a2b3e1 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 31 Jan 2019 15:22:55 +0300 Subject: binders boilerplate --- crates/ra_macros/src/mbe_expander.rs | 44 ++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'crates/ra_macros/src') diff --git a/crates/ra_macros/src/mbe_expander.rs b/crates/ra_macros/src/mbe_expander.rs index 545bd2002..f55c337da 100644 --- a/crates/ra_macros/src/mbe_expander.rs +++ b/crates/ra_macros/src/mbe_expander.rs @@ -14,11 +14,51 @@ fn expand_rule(rule: &mbe::Rule, input: &tt::Subtree) -> Option { #[derive(Debug, Default)] struct Bindings { - inner: FxHashMap, + inner: FxHashMap, } +#[derive(Debug)] +enum Binding { + Simple(tt::TokenTree), + Nested(Vec), +} + +/* + +macro_rules! impl_froms { + ($e:ident: $($v:ident),*) => { + $( + impl From<$v> for $e { + fn from(it: $v) -> $e { + $e::$v(it) + } + } + )* + } +} + +impl_froms! (Foo: Bar, Baz) + +*/ + fn match_lhs(pattern: &mbe::Subtree, input: &tt::Subtree) -> Option { - Some(Bindings::default()) + let mut res = Bindings::default(); + for pat in pattern.token_trees.iter() { + match pat { + mbe::TokenTree::Leaf(leaf) => match leaf { + mbe::Leaf::Var(mbe::Var { text, kind }) => { + let kind = kind.clone()?; + match kind.as_str() { + "ident" => (), + _ => return None, + } + } + _ => return None, + }, + _ => {} + } + } + Some(res) } fn expand_rhs(template: &mbe::Subtree, bindings: &Bindings) -> Option { -- cgit v1.2.3