aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_analysis/src/completion/completion_context.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_analysis/src/completion/completion_context.rs')
-rw-r--r--crates/ra_analysis/src/completion/completion_context.rs32
1 files changed, 16 insertions, 16 deletions
diff --git a/crates/ra_analysis/src/completion/completion_context.rs b/crates/ra_analysis/src/completion/completion_context.rs
index 4685c9328..4584f355d 100644
--- a/crates/ra_analysis/src/completion/completion_context.rs
+++ b/crates/ra_analysis/src/completion/completion_context.rs
@@ -148,24 +148,24 @@ impl<'a> CompletionContext<'a> {
148 if path.qualifier().is_none() { 148 if path.qualifier().is_none() {
149 self.is_trivial_path = true; 149 self.is_trivial_path = true;
150 150
151 self.can_be_stmt = match name_ref 151 // Find either enclosing expr statement (thing with `;`) or a
152 // block. If block, check that we are the last expr.
153 self.can_be_stmt = name_ref
152 .syntax() 154 .syntax()
153 .ancestors() 155 .ancestors()
154 .filter_map(ast::ExprStmt::cast) 156 .find_map(|node| {
155 .next() 157 if let Some(stmt) = ast::ExprStmt::cast(node) {
156 { 158 return Some(stmt.syntax().range() == name_ref.syntax().range());
157 None => { 159 }
158 name_ref 160 if let Some(block) = ast::Block::cast(node) {
159 .syntax() 161 return Some(
160 .ancestors() 162 block.expr().map(|e| e.syntax().range())
161 .filter_map(ast::Block::cast) 163 == Some(name_ref.syntax().range()),
162 .next() 164 );
163 .and_then(|block| block.expr()) 165 }
164 .map(|e| e.syntax().range()) 166 None
165 == Some(name_ref.syntax().range()) 167 })
166 } 168 .unwrap_or(false);
167 Some(expr_stmt) => expr_stmt.syntax().range() == name_ref.syntax().range(),
168 };
169 169
170 if let Some(off) = name_ref.syntax().range().start().checked_sub(2.into()) { 170 if let Some(off) = name_ref.syntax().range().start().checked_sub(2.into()) {
171 if let Some(if_expr) = 171 if let Some(if_expr) =