mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
Fix spacing in proc-macro tokens to_string
This commit is contained in:
parent
bed7be9ed9
commit
1bd1830f50
1 changed files with 36 additions and 7 deletions
|
@ -204,17 +204,18 @@ pub mod token_stream {
|
||||||
let content = subtree
|
let content = subtree
|
||||||
.token_trees
|
.token_trees
|
||||||
.iter()
|
.iter()
|
||||||
.map(|tkn| {
|
.fold((String::new(), true), |(last, last_to_joint), tkn| {
|
||||||
let s = to_text(tkn);
|
let s = [last, to_text(tkn)].join(if last_to_joint { "" } else { " " });
|
||||||
|
let mut is_joint = false;
|
||||||
if let tt::TokenTree::Leaf(tt::Leaf::Punct(punct)) = tkn {
|
if let tt::TokenTree::Leaf(tt::Leaf::Punct(punct)) = tkn {
|
||||||
if punct.spacing == tt::Spacing::Alone {
|
if punct.spacing == tt::Spacing::Joint {
|
||||||
return s + " ";
|
is_joint = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s
|
(s, is_joint)
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.0;
|
||||||
.concat();
|
|
||||||
let (open, close) = match subtree.delimiter.map(|it| it.kind) {
|
let (open, close) = match subtree.delimiter.map(|it| it.kind) {
|
||||||
None => ("", ""),
|
None => ("", ""),
|
||||||
Some(tt::DelimiterKind::Brace) => ("{", "}"),
|
Some(tt::DelimiterKind::Brace) => ("{", "}"),
|
||||||
|
@ -710,4 +711,32 @@ mod tests {
|
||||||
assert_eq!(srv.character('c').text, "'c'");
|
assert_eq!(srv.character('c').text, "'c'");
|
||||||
assert_eq!(srv.byte_string(b"1234586\x88").text, "b\"1234586\\x88\"");
|
assert_eq!(srv.byte_string(b"1234586\x88").text, "b\"1234586\\x88\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_rustc_server_to_string() {
|
||||||
|
let s = TokenStream {
|
||||||
|
subtree: tt::Subtree {
|
||||||
|
delimiter: None,
|
||||||
|
token_trees: vec![
|
||||||
|
tt::TokenTree::Leaf(tt::Leaf::Ident(tt::Ident {
|
||||||
|
text: "struct".into(),
|
||||||
|
id: tt::TokenId::unspecified(),
|
||||||
|
})),
|
||||||
|
tt::TokenTree::Leaf(tt::Leaf::Ident(tt::Ident {
|
||||||
|
text: "T".into(),
|
||||||
|
id: tt::TokenId::unspecified(),
|
||||||
|
})),
|
||||||
|
tt::TokenTree::Subtree(tt::Subtree {
|
||||||
|
delimiter: Some(tt::Delimiter {
|
||||||
|
id: tt::TokenId::unspecified(),
|
||||||
|
kind: tt::DelimiterKind::Brace,
|
||||||
|
}),
|
||||||
|
token_trees: vec![],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(s.to_string(), "struct T {}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue