Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/mbe/src/subtree_source.rs')
| -rw-r--r-- | crates/mbe/src/subtree_source.rs | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/crates/mbe/src/subtree_source.rs b/crates/mbe/src/subtree_source.rs index 247616aa1b..6bdd787e30 100644 --- a/crates/mbe/src/subtree_source.rs +++ b/crates/mbe/src/subtree_source.rs @@ -52,17 +52,20 @@ impl<'a> SubtreeTokenSource { cursor.bump() } Some(tt::buffer::TokenTreeRef::Subtree(subtree, _)) => { - cached.push(convert_delim(subtree.delimiter_kind(), false)); + if let Some(d) = subtree.delimiter_kind() { + cached.push(convert_delim(d, false)); + } cursor.subtree().unwrap() } - None => { - if let Some(subtree) = cursor.end() { - cached.push(convert_delim(subtree.delimiter_kind(), true)); + None => match cursor.end() { + Some(subtree) => { + if let Some(d) = subtree.delimiter_kind() { + cached.push(convert_delim(d, true)); + } cursor.bump() - } else { - continue; } - } + None => continue, + }, }; } @@ -109,17 +112,16 @@ impl<'a> TokenSource for SubtreeTokenSource { } } -fn convert_delim(d: Option<tt::DelimiterKind>, closing: bool) -> TtToken { +fn convert_delim(d: tt::DelimiterKind, closing: bool) -> TtToken { let (kinds, texts) = match d { - Some(tt::DelimiterKind::Parenthesis) => ([T!['('], T![')']], "()"), - Some(tt::DelimiterKind::Brace) => ([T!['{'], T!['}']], "{}"), - Some(tt::DelimiterKind::Bracket) => ([T!['['], T![']']], "[]"), - None => ([L_DOLLAR, R_DOLLAR], ""), + tt::DelimiterKind::Parenthesis => ([T!['('], T![')']], "()"), + tt::DelimiterKind::Brace => ([T!['{'], T!['}']], "{}"), + tt::DelimiterKind::Bracket => ([T!['['], T![']']], "[]"), }; let idx = closing as usize; let kind = kinds[idx]; - let text = if !texts.is_empty() { &texts[idx..texts.len() - (1 - idx)] } else { "" }; + let text = &texts[idx..texts.len() - (1 - idx)]; TtToken { tt: Token { kind, is_jointed_to_next: false }, text: SmolStr::new(text) } } |