diff options
Diffstat (limited to 'crates/ra_hir/src/source_analyzer.rs')
-rw-r--r-- | crates/ra_hir/src/source_analyzer.rs | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/crates/ra_hir/src/source_analyzer.rs b/crates/ra_hir/src/source_analyzer.rs index 86a47a9e5..d0cb62ef0 100644 --- a/crates/ra_hir/src/source_analyzer.rs +++ b/crates/ra_hir/src/source_analyzer.rs | |||
@@ -159,7 +159,7 @@ impl SourceAnalyzer { | |||
159 | pub(crate) fn resolve_record_field( | 159 | pub(crate) fn resolve_record_field( |
160 | &self, | 160 | &self, |
161 | db: &dyn HirDatabase, | 161 | db: &dyn HirDatabase, |
162 | field: &ast::RecordField, | 162 | field: &ast::RecordExprField, |
163 | ) -> Option<(Field, Option<Local>)> { | 163 | ) -> Option<(Field, Option<Local>)> { |
164 | let expr = field.expr()?; | 164 | let expr = field.expr()?; |
165 | let expr_id = self.expr_id(db, &expr)?; | 165 | let expr_id = self.expr_id(db, &expr)?; |
@@ -182,7 +182,7 @@ impl SourceAnalyzer { | |||
182 | pub(crate) fn resolve_record_field_pat( | 182 | pub(crate) fn resolve_record_field_pat( |
183 | &self, | 183 | &self, |
184 | _db: &dyn HirDatabase, | 184 | _db: &dyn HirDatabase, |
185 | field: &ast::RecordFieldPat, | 185 | field: &ast::RecordPatField, |
186 | ) -> Option<Field> { | 186 | ) -> Option<Field> { |
187 | let pat_id = self.pat_id(&field.pat()?)?; | 187 | let pat_id = self.pat_id(&field.pat()?)?; |
188 | let struct_field = self.infer.as_ref()?.record_field_pat_resolution(pat_id)?; | 188 | let struct_field = self.infer.as_ref()?.record_field_pat_resolution(pat_id)?; |
@@ -202,7 +202,7 @@ impl SourceAnalyzer { | |||
202 | pub(crate) fn resolve_bind_pat_to_const( | 202 | pub(crate) fn resolve_bind_pat_to_const( |
203 | &self, | 203 | &self, |
204 | db: &dyn HirDatabase, | 204 | db: &dyn HirDatabase, |
205 | pat: &ast::BindPat, | 205 | pat: &ast::IdentPat, |
206 | ) -> Option<ModuleDef> { | 206 | ) -> Option<ModuleDef> { |
207 | let pat_id = self.pat_id(&pat.clone().into())?; | 207 | let pat_id = self.pat_id(&pat.clone().into())?; |
208 | let body = self.body.as_ref()?; | 208 | let body = self.body.as_ref()?; |
@@ -246,7 +246,7 @@ impl SourceAnalyzer { | |||
246 | } | 246 | } |
247 | } | 247 | } |
248 | 248 | ||
249 | if let Some(rec_lit) = path.syntax().parent().and_then(ast::RecordLit::cast) { | 249 | if let Some(rec_lit) = path.syntax().parent().and_then(ast::RecordExpr::cast) { |
250 | let expr_id = self.expr_id(db, &rec_lit.into())?; | 250 | let expr_id = self.expr_id(db, &rec_lit.into())?; |
251 | if let Some(VariantId::EnumVariantId(variant)) = | 251 | if let Some(VariantId::EnumVariantId(variant)) = |
252 | self.infer.as_ref()?.variant_resolution_for_expr(expr_id) | 252 | self.infer.as_ref()?.variant_resolution_for_expr(expr_id) |
@@ -284,7 +284,7 @@ impl SourceAnalyzer { | |||
284 | pub(crate) fn record_literal_missing_fields( | 284 | pub(crate) fn record_literal_missing_fields( |
285 | &self, | 285 | &self, |
286 | db: &dyn HirDatabase, | 286 | db: &dyn HirDatabase, |
287 | literal: &ast::RecordLit, | 287 | literal: &ast::RecordExpr, |
288 | ) -> Option<Vec<(Field, Type)>> { | 288 | ) -> Option<Vec<(Field, Type)>> { |
289 | let krate = self.resolver.krate()?; | 289 | let krate = self.resolver.krate()?; |
290 | let body = self.body.as_ref()?; | 290 | let body = self.body.as_ref()?; |
@@ -358,7 +358,7 @@ impl SourceAnalyzer { | |||
358 | pub(crate) fn resolve_variant( | 358 | pub(crate) fn resolve_variant( |
359 | &self, | 359 | &self, |
360 | db: &dyn HirDatabase, | 360 | db: &dyn HirDatabase, |
361 | record_lit: ast::RecordLit, | 361 | record_lit: ast::RecordExpr, |
362 | ) -> Option<VariantId> { | 362 | ) -> Option<VariantId> { |
363 | let infer = self.infer.as_ref()?; | 363 | let infer = self.infer.as_ref()?; |
364 | let expr_id = self.expr_id(db, &record_lit.into())?; | 364 | let expr_id = self.expr_id(db, &record_lit.into())?; |
@@ -405,8 +405,7 @@ fn scope_for_offset( | |||
405 | ) | 405 | ) |
406 | }) | 406 | }) |
407 | .map(|(expr_range, scope)| { | 407 | .map(|(expr_range, scope)| { |
408 | adjust(db, scopes, source_map, expr_range, offset.file_id, offset.value) | 408 | adjust(db, scopes, source_map, expr_range, offset).unwrap_or(*scope) |
409 | .unwrap_or(*scope) | ||
410 | }) | 409 | }) |
411 | } | 410 | } |
412 | 411 | ||
@@ -417,8 +416,7 @@ fn adjust( | |||
417 | scopes: &ExprScopes, | 416 | scopes: &ExprScopes, |
418 | source_map: &BodySourceMap, | 417 | source_map: &BodySourceMap, |
419 | expr_range: TextRange, | 418 | expr_range: TextRange, |
420 | file_id: HirFileId, | 419 | offset: InFile<TextSize>, |
421 | offset: TextSize, | ||
422 | ) -> Option<ScopeId> { | 420 | ) -> Option<ScopeId> { |
423 | let child_scopes = scopes | 421 | let child_scopes = scopes |
424 | .scope_by_expr() | 422 | .scope_by_expr() |
@@ -426,7 +424,7 @@ fn adjust( | |||
426 | .filter_map(|(id, scope)| { | 424 | .filter_map(|(id, scope)| { |
427 | let source = source_map.expr_syntax(*id).ok()?; | 425 | let source = source_map.expr_syntax(*id).ok()?; |
428 | // FIXME: correctly handle macro expansion | 426 | // FIXME: correctly handle macro expansion |
429 | if source.file_id != file_id { | 427 | if source.file_id != offset.file_id { |
430 | return None; | 428 | return None; |
431 | } | 429 | } |
432 | let root = source.file_syntax(db.upcast()); | 430 | let root = source.file_syntax(db.upcast()); |
@@ -434,7 +432,7 @@ fn adjust( | |||
434 | Some((node.syntax().text_range(), scope)) | 432 | Some((node.syntax().text_range(), scope)) |
435 | }) | 433 | }) |
436 | .filter(|&(range, _)| { | 434 | .filter(|&(range, _)| { |
437 | range.start() <= offset && expr_range.contains_range(range) && range != expr_range | 435 | range.start() <= offset.value && expr_range.contains_range(range) && range != expr_range |
438 | }); | 436 | }); |
439 | 437 | ||
440 | child_scopes | 438 | child_scopes |