Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/tests.rs')
-rw-r--r--crates/hir-ty/src/tests.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/crates/hir-ty/src/tests.rs b/crates/hir-ty/src/tests.rs
index 5e159236f4..1cae8eaeac 100644
--- a/crates/hir-ty/src/tests.rs
+++ b/crates/hir-ty/src/tests.rs
@@ -293,20 +293,29 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
let mut types: Vec<(InFile<SyntaxNode>, &Ty)> = Vec::new();
let mut mismatches: Vec<(InFile<SyntaxNode>, &TypeMismatch)> = Vec::new();
+ if let Some(self_param) = body.self_param {
+ let ty = &inference_result.type_of_binding[self_param];
+ if let Some(syntax_ptr) = body_source_map.self_param_syntax() {
+ let root = db.parse_or_expand(syntax_ptr.file_id);
+ let node = syntax_ptr.map(|ptr| ptr.to_node(&root).syntax().clone());
+ types.push((node.clone(), ty));
+ }
+ }
+
for (pat, mut ty) in inference_result.type_of_pat.iter() {
if let Pat::Bind { id, .. } = body.pats[pat] {
ty = &inference_result.type_of_binding[id];
}
- let syntax_ptr = match body_source_map.pat_syntax(pat) {
+ let node = match body_source_map.pat_syntax(pat) {
Ok(sp) => {
let root = db.parse_or_expand(sp.file_id);
sp.map(|ptr| ptr.to_node(&root).syntax().clone())
}
Err(SyntheticSyntax) => continue,
};
- types.push((syntax_ptr.clone(), ty));
+ types.push((node.clone(), ty));
if let Some(mismatch) = inference_result.type_mismatch_for_pat(pat) {
- mismatches.push((syntax_ptr, mismatch));
+ mismatches.push((node, mismatch));
}
}