Fix shift id for delim and other tokens

This commit is contained in:
Edwin Cheng 2019-12-14 03:37:04 +08:00
parent 320416d756
commit 325532d119

View File

@ -67,7 +67,15 @@ impl Shift {
.token_trees
.iter()
.filter_map(|tt| match tt {
tt::TokenTree::Subtree(subtree) => max_id(subtree),
tt::TokenTree::Subtree(subtree) => {
let tree_id = max_id(subtree);
match subtree.delimiter {
Some(it) if it.id != tt::TokenId::unspecified() => {
Some(tree_id.map_or(it.id.0, |t| t.max(it.id.0)))
}
_ => tree_id,
}
}
tt::TokenTree::Leaf(tt::Leaf::Ident(ident))
if ident.id != tt::TokenId::unspecified() =>
{
@ -85,9 +93,13 @@ impl Shift {
match t {
tt::TokenTree::Leaf(leaf) => match leaf {
tt::Leaf::Ident(ident) => ident.id = self.shift(ident.id),
_ => (),
tt::Leaf::Punct(punct) => punct.id = self.shift(punct.id),
tt::Leaf::Literal(lit) => lit.id = self.shift(lit.id),
},
tt::TokenTree::Subtree(tt) => self.shift_all(tt),
tt::TokenTree::Subtree(tt) => {
tt.delimiter.as_mut().map(|it: &mut Delimiter| it.id = self.shift(it.id));
self.shift_all(tt)
}
}
}
}