aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/expr
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-09-12 18:39:10 +0100
committerAleksey Kladov <[email protected]>2019-09-12 19:34:22 +0100
commit63e1e63a9160d28597a8d77fd83c43a2c90d3f6b (patch)
tree381f2d4a92db5cdfd35c9e76d5c6b11bcb247c41 /crates/ra_hir/src/expr
parent5c09c5949a94012b5ae95735dc8c086efd5039e4 (diff)
start cleaning up the resolution
Nameres related types, like `PerNs<Resolution>`, can represent unreasonable situations, like a local in a type namespace. We should clean this up, by requiring that call-site specifies the kind of resolution it expects.
Diffstat (limited to 'crates/ra_hir/src/expr')
-rw-r--r--crates/ra_hir/src/expr/validation.rs11
1 files changed, 5 insertions, 6 deletions
diff --git a/crates/ra_hir/src/expr/validation.rs b/crates/ra_hir/src/expr/validation.rs
index 6a22e1318..c985dbdad 100644
--- a/crates/ra_hir/src/expr/validation.rs
+++ b/crates/ra_hir/src/expr/validation.rs
@@ -11,7 +11,7 @@ use crate::{
11 name, 11 name,
12 path::{PathKind, PathSegment}, 12 path::{PathKind, PathSegment},
13 ty::{ApplicationTy, InferenceResult, Ty, TypeCtor}, 13 ty::{ApplicationTy, InferenceResult, Ty, TypeCtor},
14 Function, ModuleDef, Name, Path, PerNs, Resolution, 14 Function, Name, Path,
15}; 15};
16 16
17use super::{Expr, ExprId, RecordLitField}; 17use super::{Expr, ExprId, RecordLitField};
@@ -119,11 +119,10 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
119 }; 119 };
120 120
121 let resolver = self.func.resolver(db); 121 let resolver = self.func.resolver(db);
122 let std_result_enum = 122 let std_result_enum = match resolver.resolve_known_enum(db, &std_result_path) {
123 match resolver.resolve_path_segments(db, &std_result_path).into_fully_resolved() { 123 Some(it) => it,
124 PerNs { types: Some(Resolution::Def(ModuleDef::Enum(e))), .. } => e, 124 _ => return,
125 _ => return, 125 };
126 };
127 126
128 let std_result_ctor = TypeCtor::Adt(AdtDef::Enum(std_result_enum)); 127 let std_result_ctor = TypeCtor::Adt(AdtDef::Enum(std_result_enum));
129 let params = match &mismatch.expected { 128 let params = match &mismatch.expected {