Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-ssr/src/resolving.rs')
-rw-r--r--crates/ide-ssr/src/resolving.rs61
1 files changed, 27 insertions, 34 deletions
diff --git a/crates/ide-ssr/src/resolving.rs b/crates/ide-ssr/src/resolving.rs
index 8f28a1cd3a..a4e2cfbaee 100644
--- a/crates/ide-ssr/src/resolving.rs
+++ b/crates/ide-ssr/src/resolving.rs
@@ -83,21 +83,17 @@ impl<'db> Resolver<'_, 'db> {
let ufcs_function_calls = resolved_paths
.iter()
.filter_map(|(path_node, resolved)| {
- if let Some(grandparent) = path_node.parent().and_then(|parent| parent.parent()) {
- if let Some(call_expr) = ast::CallExpr::cast(grandparent.clone()) {
- if let hir::PathResolution::Def(hir::ModuleDef::Function(function)) =
- resolved.resolution
- {
- if function.as_assoc_item(self.resolution_scope.scope.db).is_some() {
- let qualifier_type =
- self.resolution_scope.qualifier_type(path_node);
- return Some((
- grandparent,
- UfcsCallInfo { call_expr, function, qualifier_type },
- ));
- }
- }
- }
+ if let Some(grandparent) = path_node.parent().and_then(|parent| parent.parent())
+ && let Some(call_expr) = ast::CallExpr::cast(grandparent.clone())
+ && let hir::PathResolution::Def(hir::ModuleDef::Function(function)) =
+ resolved.resolution
+ && function.as_assoc_item(self.resolution_scope.scope.db).is_some()
+ {
+ let qualifier_type = self.resolution_scope.qualifier_type(path_node);
+ return Some((
+ grandparent,
+ UfcsCallInfo { call_expr, function, qualifier_type },
+ ));
}
None
})
@@ -153,12 +149,11 @@ impl<'db> Resolver<'_, 'db> {
/// Returns whether `path` contains a placeholder, but ignores any placeholders within type
/// arguments.
fn path_contains_placeholder(&self, path: &ast::Path) -> bool {
- if let Some(segment) = path.segment() {
- if let Some(name_ref) = segment.name_ref() {
- if self.placeholders_by_stand_in.contains_key(name_ref.text().as_str()) {
- return true;
- }
- }
+ if let Some(segment) = path.segment()
+ && let Some(name_ref) = segment.name_ref()
+ && self.placeholders_by_stand_in.contains_key(name_ref.text().as_str())
+ {
+ return true;
}
if let Some(qualifier) = path.qualifier() {
return self.path_contains_placeholder(&qualifier);
@@ -252,14 +247,12 @@ impl<'db> ResolutionScope<'db> {
fn qualifier_type(&self, path: &SyntaxNode) -> Option<hir::Type<'db>> {
use syntax::ast::AstNode;
- if let Some(path) = ast::Path::cast(path.clone()) {
- if let Some(qualifier) = path.qualifier() {
- if let Some(hir::PathResolution::Def(hir::ModuleDef::Adt(adt))) =
- self.resolve_path(&qualifier)
- {
- return Some(adt.ty(self.scope.db));
- }
- }
+ if let Some(path) = ast::Path::cast(path.clone())
+ && let Some(qualifier) = path.qualifier()
+ && let Some(hir::PathResolution::Def(hir::ModuleDef::Adt(adt))) =
+ self.resolve_path(&qualifier)
+ {
+ return Some(adt.ty(self.scope.db));
}
None
}
@@ -299,11 +292,11 @@ fn pick_node_for_resolution(node: SyntaxNode) -> SyntaxNode {
/// Returns whether `path` or any of its qualifiers contains type arguments.
fn path_contains_type_arguments(path: Option<ast::Path>) -> bool {
if let Some(path) = path {
- if let Some(segment) = path.segment() {
- if segment.generic_arg_list().is_some() {
- cov_mark::hit!(type_arguments_within_path);
- return true;
- }
+ if let Some(segment) = path.segment()
+ && segment.generic_arg_list().is_some()
+ {
+ cov_mark::hit!(type_arguments_within_path);
+ return true;
}
return path_contains_type_arguments(path.qualifier());
}