diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-03-16 13:14:48 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2021-03-16 13:14:48 +0000 |
commit | c49b5b7468a9954af86fd1724276261f396aba5d (patch) | |
tree | f9b9126cd0cc9a2829de3cdb20f681b354fbe67b /crates/ide_completion/src/context.rs | |
parent | 1a82af3527e476d52410ff4dfd2fb4c57466abcb (diff) | |
parent | f5a81ec4683613bd62624811733345d627f2127b (diff) |
Merge #7498
7498: Clone for update r=matklad a=matklad
rowan counterpart https://github.com/rust-analyzer/rowan/pull/93
#6857
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ide_completion/src/context.rs')
-rw-r--r-- | crates/ide_completion/src/context.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/crates/ide_completion/src/context.rs b/crates/ide_completion/src/context.rs index e6cc6329c..8cbbdb477 100644 --- a/crates/ide_completion/src/context.rs +++ b/crates/ide_completion/src/context.rs | |||
@@ -120,7 +120,7 @@ impl<'a> CompletionContext<'a> { | |||
120 | let original_token = | 120 | let original_token = |
121 | original_file.syntax().token_at_offset(position.offset).left_biased()?; | 121 | original_file.syntax().token_at_offset(position.offset).left_biased()?; |
122 | let token = sema.descend_into_macros(original_token.clone()); | 122 | let token = sema.descend_into_macros(original_token.clone()); |
123 | let scope = sema.scope_at_offset(&token.parent(), position.offset); | 123 | let scope = sema.scope_at_offset(&token, position.offset); |
124 | let mut locals = vec![]; | 124 | let mut locals = vec![]; |
125 | scope.process_all_names(&mut |name, scope| { | 125 | scope.process_all_names(&mut |name, scope| { |
126 | if let ScopeDef::Local(local) = scope { | 126 | if let ScopeDef::Local(local) = scope { |
@@ -281,7 +281,7 @@ impl<'a> CompletionContext<'a> { | |||
281 | fn fill_impl_def(&mut self) { | 281 | fn fill_impl_def(&mut self) { |
282 | self.impl_def = self | 282 | self.impl_def = self |
283 | .sema | 283 | .sema |
284 | .ancestors_with_macros(self.token.parent()) | 284 | .token_ancestors_with_macros(self.token.clone()) |
285 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) | 285 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) |
286 | .find_map(ast::Impl::cast); | 286 | .find_map(ast::Impl::cast); |
287 | } | 287 | } |
@@ -293,7 +293,10 @@ impl<'a> CompletionContext<'a> { | |||
293 | offset: TextSize, | 293 | offset: TextSize, |
294 | ) { | 294 | ) { |
295 | let expected = { | 295 | let expected = { |
296 | let mut node = self.token.parent(); | 296 | let mut node = match self.token.parent() { |
297 | Some(it) => it, | ||
298 | None => return, | ||
299 | }; | ||
297 | loop { | 300 | loop { |
298 | let ret = match_ast! { | 301 | let ret = match_ast! { |
299 | match node { | 302 | match node { |
@@ -474,17 +477,17 @@ impl<'a> CompletionContext<'a> { | |||
474 | } | 477 | } |
475 | 478 | ||
476 | self.use_item_syntax = | 479 | self.use_item_syntax = |
477 | self.sema.ancestors_with_macros(self.token.parent()).find_map(ast::Use::cast); | 480 | self.sema.token_ancestors_with_macros(self.token.clone()).find_map(ast::Use::cast); |
478 | 481 | ||
479 | self.function_syntax = self | 482 | self.function_syntax = self |
480 | .sema | 483 | .sema |
481 | .ancestors_with_macros(self.token.parent()) | 484 | .token_ancestors_with_macros(self.token.clone()) |
482 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) | 485 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) |
483 | .find_map(ast::Fn::cast); | 486 | .find_map(ast::Fn::cast); |
484 | 487 | ||
485 | self.record_field_syntax = self | 488 | self.record_field_syntax = self |
486 | .sema | 489 | .sema |
487 | .ancestors_with_macros(self.token.parent()) | 490 | .token_ancestors_with_macros(self.token.clone()) |
488 | .take_while(|it| { | 491 | .take_while(|it| { |
489 | it.kind() != SOURCE_FILE && it.kind() != MODULE && it.kind() != CALL_EXPR | 492 | it.kind() != SOURCE_FILE && it.kind() != MODULE && it.kind() != CALL_EXPR |
490 | }) | 493 | }) |