Employ early return pattern more

This commit is contained in:
Evgenii P 2019-08-04 08:03:17 +07:00
parent 4034ea9e4e
commit d610adfc2b
2 changed files with 27 additions and 25 deletions

View file

@ -428,20 +428,18 @@ impl SourceAnalyzer {
let std_future_trait = let std_future_trait =
match self.resolver.resolve_path_segments(db, &std_future_path).into_fully_resolved() { match self.resolver.resolve_path_segments(db, &std_future_path).into_fully_resolved() {
PerNs { types: Some(Resolution::Def(ModuleDef::Trait(trait_))), .. } => { PerNs { types: Some(Resolution::Def(ModuleDef::Trait(trait_))), .. } => {
Some(trait_) trait_
} }
_ => None, _ => return false,
}; };
let krate = self.resolver.krate(); let krate = match self.resolver.krate() {
if let Some(krate) = krate { Some(krate) => krate,
if let Some(trait_) = std_future_trait { _ => return false,
let canonical_ty = crate::ty::Canonical { value: ty, num_vars: 0 }; };
return implements_trait(&canonical_ty, db, &self.resolver, krate, trait_);
}
}
false let canonical_ty = crate::ty::Canonical { value: ty, num_vars: 0 };
return implements_trait(&canonical_ty, db, &self.resolver, krate, std_future_trait);
} }
#[cfg(test)] #[cfg(test)]

View file

@ -9,10 +9,16 @@ use rustc_hash::FxHashSet;
/// Complete dot accesses, i.e. fields or methods (and .await syntax). /// Complete dot accesses, i.e. fields or methods (and .await syntax).
pub(super) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) { pub(super) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) {
if let Some(dot_receiver) = &ctx.dot_receiver { let dot_receiver = match &ctx.dot_receiver {
let receiver_ty = ctx.analyzer.type_of(ctx.db, &dot_receiver); Some(expr) => expr,
_ => return,
};
let receiver_ty = match ctx.analyzer.type_of(ctx.db, &dot_receiver) {
Some(ty) => ty,
_ => return,
};
if let Some(receiver_ty) = receiver_ty {
if !ctx.is_call { if !ctx.is_call {
complete_fields(acc, ctx, receiver_ty.clone()); complete_fields(acc, ctx, receiver_ty.clone());
} }
@ -25,8 +31,6 @@ pub(super) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) {
.insert_text("await") .insert_text("await")
.add_to(acc); .add_to(acc);
} }
}
}
} }
fn complete_fields(acc: &mut Completions, ctx: &CompletionContext, receiver: Ty) { fn complete_fields(acc: &mut Completions, ctx: &CompletionContext, receiver: Ty) {