indent macro output when pprinting

This commit is contained in:
Aleksey Kladov 2021-10-09 17:36:41 +03:00
parent a0d9e78ec3
commit 6407e2e789
2 changed files with 16 additions and 6 deletions
crates/hir_def/src
macro_expansion_tests.rs
macro_expansion_tests

@ -98,6 +98,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 indent_level = 0;
for token in iter::successors(expn.first_token(), |t| t.next_token()) {
let curr_kind = token.kind();
let space = match (prev_kind, curr_kind) {
@ -113,7 +114,16 @@ fn pretty_print_macro_expansion(expn: SyntaxNode) -> String {
_ => "",
};
match prev_kind {
T!['{'] => indent_level += 1,
T!['}'] => indent_level -= 1,
_ => (),
}
res.push_str(space);
if space == "\n" && curr_kind != T!['}'] {
res.push_str(&" ".repeat(indent_level));
}
prev_kind = curr_kind;
format_to!(res, "{}", token)
}

@ -174,8 +174,8 @@ macro_rules! m {
($($i:ident),*) => ( impl Bar { $(fn $i {})* } );
}
impl Bar {
fn foo {}
fn bar {}
fn foo {}
fn bar {}
}
"#]],
);
@ -195,8 +195,8 @@ macro_rules! m {
($($i:ident),*) => ( fn baz { $($i ();)* } );
}
fn baz {
foo();
bar();
foo();
bar();
}
"#]],
)
@ -216,8 +216,8 @@ macro_rules! m {
($($i:ident),*) => ( fn baz { $($i() );* } );
}
fn baz {
foo();
bar()
foo();
bar()
}
"#]],
)