mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Fixed whitespace bug
This commit is contained in:
parent
028595548b
commit
6794d50a9b
2 changed files with 35 additions and 3 deletions
|
@ -388,11 +388,12 @@ impl<'a> TreeSink for TtTreeSink<'a> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut last = self.cursor;
|
||||||
for _ in 0..n_tokens {
|
for _ in 0..n_tokens {
|
||||||
if self.cursor.eof() {
|
if self.cursor.eof() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
last = self.cursor;
|
||||||
let text: SmolStr = match self.cursor.token_tree() {
|
let text: SmolStr = match self.cursor.token_tree() {
|
||||||
Some(tt::TokenTree::Leaf(leaf)) => {
|
Some(tt::TokenTree::Leaf(leaf)) => {
|
||||||
// Mark the range if needed
|
// Mark the range if needed
|
||||||
|
@ -441,11 +442,11 @@ impl<'a> TreeSink for TtTreeSink<'a> {
|
||||||
self.inner.token(kind, text);
|
self.inner.token(kind, text);
|
||||||
|
|
||||||
// Add whitespace between adjoint puncts
|
// Add whitespace between adjoint puncts
|
||||||
let next = self.cursor.bump();
|
let next = last.bump();
|
||||||
if let (
|
if let (
|
||||||
Some(tt::TokenTree::Leaf(tt::Leaf::Punct(curr))),
|
Some(tt::TokenTree::Leaf(tt::Leaf::Punct(curr))),
|
||||||
Some(tt::TokenTree::Leaf(tt::Leaf::Punct(_))),
|
Some(tt::TokenTree::Leaf(tt::Leaf::Punct(_))),
|
||||||
) = (self.cursor.token_tree(), next.token_tree())
|
) = (last.token_tree(), next.token_tree())
|
||||||
{
|
{
|
||||||
if curr.spacing == tt::Spacing::Alone {
|
if curr.spacing == tt::Spacing::Alone {
|
||||||
self.inner.token(WHITESPACE, " ".into());
|
self.inner.token(WHITESPACE, " ".into());
|
||||||
|
|
|
@ -838,6 +838,37 @@ fn test_tt_composite() {
|
||||||
.assert_expand_items(r#"foo! { => }"#, r#"0"#);
|
.assert_expand_items(r#"foo! { => }"#, r#"0"#);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_tt_composite2() {
|
||||||
|
let node = parse_macro(
|
||||||
|
r#"
|
||||||
|
macro_rules! foo {
|
||||||
|
($($tt:tt)*) => { abs!(=> $($tt)*) }
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.expand_items(r#"foo!{#}"#);
|
||||||
|
|
||||||
|
let res = format!("{:#?}", &node);
|
||||||
|
assert_eq_text!(
|
||||||
|
res.trim(),
|
||||||
|
r###"MACRO_ITEMS@[0; 10)
|
||||||
|
MACRO_CALL@[0; 10)
|
||||||
|
PATH@[0; 3)
|
||||||
|
PATH_SEGMENT@[0; 3)
|
||||||
|
NAME_REF@[0; 3)
|
||||||
|
IDENT@[0; 3) "abs"
|
||||||
|
EXCL@[3; 4) "!"
|
||||||
|
TOKEN_TREE@[4; 10)
|
||||||
|
L_PAREN@[4; 5) "("
|
||||||
|
EQ@[5; 6) "="
|
||||||
|
R_ANGLE@[6; 7) ">"
|
||||||
|
WHITESPACE@[7; 8) " "
|
||||||
|
POUND@[8; 9) "#"
|
||||||
|
R_PAREN@[9; 10) ")""###
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_lifetime() {
|
fn test_lifetime() {
|
||||||
parse_macro(
|
parse_macro(
|
||||||
|
|
Loading…
Reference in a new issue