From f1350dd93c92fa5e71b6c5d7f703fe19c2511e06 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Sat, 13 Mar 2021 20:14:21 +0800 Subject: add expand log --- crates/hir_expand/src/db.rs | 2 ++ crates/tt/src/lib.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/crates/hir_expand/src/db.rs b/crates/hir_expand/src/db.rs index cb6e23320..9086e6c17 100644 --- a/crates/hir_expand/src/db.rs +++ b/crates/hir_expand/src/db.rs @@ -340,6 +340,8 @@ fn parse_macro_with_arg( None => return ExpandResult { value: None, err: result.err }, }; + log::debug!("expanded = {}", tt.as_debug_string()); + let fragment_kind = to_fragment_kind(db, macro_call_id); let (parse, rev_token_map) = match mbe::token_tree_to_syntax_node(&tt, fragment_kind) { diff --git a/crates/tt/src/lib.rs b/crates/tt/src/lib.rs index 8301dc28a..9d9a01e30 100644 --- a/crates/tt/src/lib.rs +++ b/crates/tt/src/lib.rs @@ -227,6 +227,53 @@ impl Subtree { } } +impl Subtree { + /// A simple line string used for debugging + pub fn as_debug_string(&self) -> String { + let delim = match self.delimiter_kind() { + Some(DelimiterKind::Brace) => ("{", "}"), + Some(DelimiterKind::Bracket) => ("[", "]"), + Some(DelimiterKind::Parenthesis) => ("(", ")"), + None => (" ", " "), + }; + + let mut res = String::new(); + res.push_str(delim.0); + let mut iter = self.token_trees.iter(); + let mut last = None; + while let Some(child) = iter.next() { + let s = match child { + TokenTree::Leaf(it) => { + let s = match it { + Leaf::Literal(it) => it.text.to_string(), + Leaf::Punct(it) => it.char.to_string(), + Leaf::Ident(it) => it.text.to_string(), + }; + match (it, last) { + (Leaf::Ident(_), Some(&TokenTree::Leaf(Leaf::Ident(_)))) => { + " ".to_string() + &s + } + (Leaf::Punct(_), Some(&TokenTree::Leaf(Leaf::Punct(punct)))) => { + if punct.spacing == Spacing::Alone { + " ".to_string() + &s + } else { + s + } + } + _ => s, + } + } + TokenTree::Subtree(it) => it.as_debug_string(), + }; + res.push_str(&s); + last = Some(child); + } + + res.push_str(delim.1); + res + } +} + pub mod buffer; #[derive(Debug, PartialEq, Eq, Clone)] -- cgit v1.2.3