diff options
Diffstat (limited to 'crates/ra_mbe/src/subtree_source.rs')
-rw-r--r-- | crates/ra_mbe/src/subtree_source.rs | 14 |
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 | ||