diff options
Diffstat (limited to 'crates/ra_hir/src/ty.rs')
-rw-r--r-- | crates/ra_hir/src/ty.rs | 39 |
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, |