mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 06:11:35 +00:00
Simplify checking return type, add new test
This commit is contained in:
parent
6a04e9ce14
commit
6620949cae
2 changed files with 32 additions and 23 deletions
|
@ -6,12 +6,11 @@ use ra_syntax::ast::{AstNode, RecordLit};
|
|||
use super::{Expr, ExprId, RecordLitField};
|
||||
use crate::{
|
||||
adt::AdtDef,
|
||||
code_model::Enum,
|
||||
diagnostics::{DiagnosticSink, MissingFields, MissingOkInTailExpr},
|
||||
expr::AstPtr,
|
||||
name,
|
||||
path::{PathKind, PathSegment},
|
||||
ty::{InferenceResult, Ty, TypeCtor},
|
||||
ty::{ApplicationTy, InferenceResult, Ty, TypeCtor},
|
||||
Function, HasSource, HirDatabase, ModuleDef, Name, Path, PerNs, Resolution,
|
||||
};
|
||||
use ra_syntax::ast;
|
||||
|
@ -120,28 +119,12 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
|
|||
_ => return,
|
||||
};
|
||||
|
||||
let std_result_type = std_result_enum.ty(db);
|
||||
|
||||
fn enum_from_type(ty: &Ty) -> Option<Enum> {
|
||||
match ty {
|
||||
Ty::Apply(t) => match t.ctor {
|
||||
TypeCtor::Adt(AdtDef::Enum(e)) => Some(e),
|
||||
_ => None,
|
||||
},
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
if enum_from_type(&mismatch.expected) != enum_from_type(&std_result_type) {
|
||||
return;
|
||||
}
|
||||
|
||||
let ret = match &mismatch.expected {
|
||||
Ty::Apply(t) => t,
|
||||
let std_result_ctor = TypeCtor::Adt(AdtDef::Enum(std_result_enum));
|
||||
let params = match &mismatch.expected {
|
||||
Ty::Apply(ApplicationTy { ctor, parameters }) if ctor == &std_result_ctor => parameters,
|
||||
_ => return,
|
||||
};
|
||||
|
||||
let params = &ret.parameters;
|
||||
if params.len() == 2 && ¶ms[0] == &mismatch.actual {
|
||||
let source_map = self.func.body_source_map(db);
|
||||
let file_id = self.func.source(db).file_id;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue