mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-19 08:40:24 +00:00
Respect coercions in inline_call
This commit is contained in:
parent
7e6f40b6f1
commit
9e1eb77f6b
5 changed files with 67 additions and 19 deletions
|
@ -21,7 +21,7 @@ use hir_def::{
|
|||
use hir_expand::{hygiene::Hygiene, name::AsName, HirFileId, InFile};
|
||||
use hir_ty::{
|
||||
diagnostics::{record_literal_missing_fields, record_pattern_missing_fields},
|
||||
InferenceResult, Interner, Substitution, TyExt, TyLoweringContext,
|
||||
InferenceResult, Interner, Substitution, Ty, TyExt, TyLoweringContext,
|
||||
};
|
||||
use syntax::{
|
||||
ast::{self, AstNode},
|
||||
|
@ -129,12 +129,12 @@ impl SourceAnalyzer {
|
|||
) -> Option<(Type, Option<Type>)> {
|
||||
let expr_id = self.expr_id(db, expr)?;
|
||||
let infer = self.infer.as_ref()?;
|
||||
let ty = infer
|
||||
let coerced = infer
|
||||
.expr_adjustments
|
||||
.get(&expr_id)
|
||||
.and_then(|adjusts| adjusts.last().map(|adjust| &adjust.target));
|
||||
let mk_ty = |ty: &hir_ty::Ty| Type::new_with_resolver(db, &self.resolver, ty.clone());
|
||||
mk_ty(&infer[expr_id]).map(|it| (it, ty.and_then(mk_ty)))
|
||||
let mk_ty = |ty: &Ty| Type::new_with_resolver(db, &self.resolver, ty.clone());
|
||||
mk_ty(&infer[expr_id]).map(|ty| (ty, coerced.and_then(mk_ty)))
|
||||
}
|
||||
|
||||
pub(crate) fn type_of_pat(&self, db: &dyn HirDatabase, pat: &ast::Pat) -> Option<Type> {
|
||||
|
@ -150,12 +150,12 @@ impl SourceAnalyzer {
|
|||
) -> Option<(Type, Option<Type>)> {
|
||||
let pat_id = self.pat_id(pat)?;
|
||||
let infer = self.infer.as_ref()?;
|
||||
let ty = infer
|
||||
let coerced = infer
|
||||
.pat_adjustments
|
||||
.get(&pat_id)
|
||||
.and_then(|adjusts| adjusts.last().map(|adjust| &adjust.target));
|
||||
let mk_ty = |ty: &hir_ty::Ty| Type::new_with_resolver(db, &self.resolver, ty.clone());
|
||||
mk_ty(&infer[pat_id]).map(|it| (it, ty.and_then(mk_ty)))
|
||||
let mk_ty = |ty: &Ty| Type::new_with_resolver(db, &self.resolver, ty.clone());
|
||||
mk_ty(&infer[pat_id]).map(|ty| (ty, coerced.and_then(mk_ty)))
|
||||
}
|
||||
|
||||
pub(crate) fn type_of_self(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue