aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty.rs')
-rw-r--r--crates/ra_hir/src/ty.rs39
1 files changed, 19 insertions, 20 deletions
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs
index b1f35ab1f..89e854dd7 100644
--- a/crates/ra_hir/src/ty.rs
+++ b/crates/ra_hir/src/ty.rs
@@ -370,7 +370,7 @@ impl Ty {
370 } 370 }
371 371
372 // Resolve the path (in type namespace) 372 // Resolve the path (in type namespace)
373 let resolution = resolver.resolve_path(db, path).into_per_ns().take_types(); 373 let resolution = resolver.resolve_path(db, path).take_types();
374 374
375 let def = match resolution { 375 let def = match resolution {
376 Some(Resolution::Def(def)) => def, 376 Some(Resolution::Def(def)) => def,
@@ -1172,7 +1172,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
1172 } 1172 }
1173 1173
1174 fn infer_path_expr(&mut self, resolver: &Resolver, path: &Path) -> Option<Ty> { 1174 fn infer_path_expr(&mut self, resolver: &Resolver, path: &Path) -> Option<Ty> {
1175 let resolved = resolver.resolve_path(self.db, &path); 1175 let resolved = resolver.resolve_path_segments(self.db, &path);
1176 1176
1177 let (def, remaining_index) = resolved.into_inner(); 1177 let (def, remaining_index) = resolved.into_inner();
1178 1178
@@ -1244,24 +1244,23 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
1244 None => return (Ty::Unknown, None), 1244 None => return (Ty::Unknown, None),
1245 }; 1245 };
1246 let resolver = &self.resolver; 1246 let resolver = &self.resolver;
1247 let typable: Option<TypableDef> = 1247 let typable: Option<TypableDef> = match resolver.resolve_path(self.db, &path).take_types() {
1248 match resolver.resolve_path(self.db, &path).into_per_ns().take_types() { 1248 Some(Resolution::Def(def)) => def.into(),
1249 Some(Resolution::Def(def)) => def.into(), 1249 Some(Resolution::LocalBinding(..)) => {
1250 Some(Resolution::LocalBinding(..)) => { 1250 // this cannot happen
1251 // this cannot happen 1251 log::error!("path resolved to local binding in type ns");
1252 log::error!("path resolved to local binding in type ns"); 1252 return (Ty::Unknown, None);
1253 return (Ty::Unknown, None); 1253 }
1254 } 1254 Some(Resolution::GenericParam(..)) => {
1255 Some(Resolution::GenericParam(..)) => { 1255 // generic params can't be used in struct literals
1256 // generic params can't be used in struct literals 1256 return (Ty::Unknown, None);
1257 return (Ty::Unknown, None); 1257 }
1258 } 1258 Some(Resolution::SelfType(..)) => {
1259 Some(Resolution::SelfType(..)) => { 1259 // TODO this is allowed in an impl for a struct, handle this
1260 // TODO this is allowed in an impl for a struct, handle this 1260 return (Ty::Unknown, None);
1261 return (Ty::Unknown, None); 1261 }
1262 } 1262 None => return (Ty::Unknown, None),
1263 None => return (Ty::Unknown, None), 1263 };
1264 };
1265 let def = match typable { 1264 let def = match typable {
1266 None => return (Ty::Unknown, None), 1265 None => return (Ty::Unknown, None),
1267 Some(it) => it, 1266 Some(it) => it,