Skip to content

Commit d610adf

Browse files
committed
Employ early return pattern more
1 parent 4034ea9 commit d610adf

File tree

2 files changed

+27
-25
lines changed

2 files changed

+27
-25
lines changed

crates/ra_hir/src/source_binder.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -428,20 +428,18 @@ impl SourceAnalyzer {
428428
let std_future_trait =
429429
match self.resolver.resolve_path_segments(db, &std_future_path).into_fully_resolved() {
430430
PerNs { types: Some(Resolution::Def(ModuleDef::Trait(trait_))), .. } => {
431-
Some(trait_)
431+
trait_
432432
}
433-
_ => None,
433+
_ => return false,
434434
};
435435

436-
let krate = self.resolver.krate();
437-
if let Some(krate) = krate {
438-
if let Some(trait_) = std_future_trait {
439-
let canonical_ty = crate::ty::Canonical { value: ty, num_vars: 0 };
440-
return implements_trait(&canonical_ty, db, &self.resolver, krate, trait_);
441-
}
442-
}
436+
let krate = match self.resolver.krate() {
437+
Some(krate) => krate,
438+
_ => return false,
439+
};
443440

444-
false
441+
let canonical_ty = crate::ty::Canonical { value: ty, num_vars: 0 };
442+
return implements_trait(&canonical_ty, db, &self.resolver, krate, std_future_trait);
445443
}
446444

447445
#[cfg(test)]

crates/ra_ide_api/src/completion/complete_dot.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,27 @@ use rustc_hash::FxHashSet;
99

1010
/// Complete dot accesses, i.e. fields or methods (and .await syntax).
1111
pub(super) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) {
12-
if let Some(dot_receiver) = &ctx.dot_receiver {
13-
let receiver_ty = ctx.analyzer.type_of(ctx.db, &dot_receiver);
12+
let dot_receiver = match &ctx.dot_receiver {
13+
Some(expr) => expr,
14+
_ => return,
15+
};
1416

15-
if let Some(receiver_ty) = receiver_ty {
16-
if !ctx.is_call {
17-
complete_fields(acc, ctx, receiver_ty.clone());
18-
}
19-
complete_methods(acc, ctx, receiver_ty.clone());
17+
let receiver_ty = match ctx.analyzer.type_of(ctx.db, &dot_receiver) {
18+
Some(ty) => ty,
19+
_ => return,
20+
};
2021

21-
// Suggest .await syntax for types that implement Future trait
22-
if ctx.analyzer.impls_future(ctx.db, receiver_ty) {
23-
CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), "await")
24-
.detail("expr.await")
25-
.insert_text("await")
26-
.add_to(acc);
27-
}
28-
}
22+
if !ctx.is_call {
23+
complete_fields(acc, ctx, receiver_ty.clone());
24+
}
25+
complete_methods(acc, ctx, receiver_ty.clone());
26+
27+
// Suggest .await syntax for types that implement Future trait
28+
if ctx.analyzer.impls_future(ctx.db, receiver_ty) {
29+
CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), "await")
30+
.detail("expr.await")
31+
.insert_text("await")
32+
.add_to(acc);
2933
}
3034
}
3135

0 commit comments

Comments
 (0)