aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_mbe/src/subtree_source.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_mbe/src/subtree_source.rs')
-rw-r--r--crates/ra_mbe/src/subtree_source.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/ra_mbe/src/subtree_source.rs b/crates/ra_mbe/src/subtree_source.rs
index 6aa20057e..0a070b46a 100644
--- a/crates/ra_mbe/src/subtree_source.rs
+++ b/crates/ra_mbe/src/subtree_source.rs
@@ -109,6 +109,8 @@ impl<'a> SubTreeWalker<'a> {
109 self.cursor = match self.ts.get(0) { 109 self.cursor = match self.ts.get(0) {
110 DelimToken::Token(token) => match token { 110 DelimToken::Token(token) => match token {
111 tt::TokenTree::Subtree(subtree) => { 111 tt::TokenTree::Subtree(subtree) => {
112 let ts = TokenSeq::from(subtree);
113 self.stack.push((ts, 0));
112 WalkCursor::Token(0, convert_delim(subtree.delimiter, false)) 114 WalkCursor::Token(0, convert_delim(subtree.delimiter, false))
113 } 115 }
114 tt::TokenTree::Leaf(leaf) => { 116 tt::TokenTree::Leaf(leaf) => {
@@ -254,7 +256,7 @@ impl<'a> WalkerOwner<'a> {
254 } 256 }
255 } 257 }
256 } else if walker.stack.len() == 1 { 258 } else if walker.stack.len() == 1 {
257 if let DelimToken::Delim(_, is_end) = walker.ts.get(*u) { 259 if let DelimToken::Delim(_, is_end) = walker.top().get(*u) {
258 if !is_end { 260 if !is_end {
259 let (_, last_idx) = &walker.stack[0]; 261 let (_, last_idx) = &walker.stack[0];
260 if let DelimToken::Token(token) = walker.ts.get(*last_idx) { 262 if let DelimToken::Token(token) = walker.ts.get(*last_idx) {
@@ -310,10 +312,16 @@ impl<'a> TokenSource for SubtreeTokenSource<'a> {
310 } 312 }
311 } 313 }
312 fn is_token_joint_to_next(&self, pos: usize) -> bool { 314 fn is_token_joint_to_next(&self, pos: usize) -> bool {
313 self.walker.get(pos).unwrap().is_joint_to_next 315 match self.walker.get(pos) {
316 Some(t) => t.is_joint_to_next,
317 _ => false,
318 }
314 } 319 }
315 fn is_keyword(&self, pos: usize, kw: &str) -> bool { 320 fn is_keyword(&self, pos: usize, kw: &str) -> bool {
316 self.walker.get(pos).unwrap().text == *kw 321 match self.walker.get(pos) {
322 Some(t) => t.text == *kw,
323 _ => false,
324 }
317 } 325 }
318} 326}
319 327