diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-06-08 19:41:35 +0100 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-06-08 19:41:35 +0100 |
commit | 9c92c05ca614fcded456153b1bc6717d17f0dafb (patch) | |
tree | 4cdbfe1ae67d0eae6ba85b19cf40126898f43ac5 /crates/ra_hir/src/ty/infer.rs | |
parent | bb55111c209a9d3a6249cab35308a506b7f22d53 (diff) | |
parent | caefa6982bc57195687de11137997f1d62d791fe (diff) |
Merge #1386
1386: Remove one of the two different algorithms for name resolution of macros :D r=edwin0cheng a=matklad
r? @edwin0cheng
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_hir/src/ty/infer.rs')
-rw-r--r-- | crates/ra_hir/src/ty/infer.rs | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/crates/ra_hir/src/ty/infer.rs b/crates/ra_hir/src/ty/infer.rs index 6cc5dbc6f..6aa727ea1 100644 --- a/crates/ra_hir/src/ty/infer.rs +++ b/crates/ra_hir/src/ty/infer.rs | |||
@@ -610,23 +610,26 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
610 | None => return (Ty::Unknown, None), | 610 | None => return (Ty::Unknown, None), |
611 | }; | 611 | }; |
612 | let resolver = &self.resolver; | 612 | let resolver = &self.resolver; |
613 | let typable: Option<TypableDef> = match resolver.resolve_path(self.db, &path).take_types() { | 613 | let typable: Option<TypableDef> = |
614 | Some(Resolution::Def(def)) => def.into(), | 614 | // FIXME: this should resolve assoc items as well, see this example: |
615 | Some(Resolution::LocalBinding(..)) => { | 615 | // https://play.rust-lang.org/?gist=087992e9e22495446c01c0d4e2d69521 |
616 | // this cannot happen | 616 | match resolver.resolve_path_without_assoc_items(self.db, &path).take_types() { |
617 | log::error!("path resolved to local binding in type ns"); | 617 | Some(Resolution::Def(def)) => def.into(), |
618 | return (Ty::Unknown, None); | 618 | Some(Resolution::LocalBinding(..)) => { |
619 | } | 619 | // this cannot happen |
620 | Some(Resolution::GenericParam(..)) => { | 620 | log::error!("path resolved to local binding in type ns"); |
621 | // generic params can't be used in struct literals | 621 | return (Ty::Unknown, None); |
622 | return (Ty::Unknown, None); | 622 | } |
623 | } | 623 | Some(Resolution::GenericParam(..)) => { |
624 | Some(Resolution::SelfType(..)) => { | 624 | // generic params can't be used in struct literals |
625 | // FIXME this is allowed in an impl for a struct, handle this | 625 | return (Ty::Unknown, None); |
626 | return (Ty::Unknown, None); | 626 | } |
627 | } | 627 | Some(Resolution::SelfType(..)) => { |
628 | None => return (Ty::Unknown, None), | 628 | // FIXME this is allowed in an impl for a struct, handle this |
629 | }; | 629 | return (Ty::Unknown, None); |
630 | } | ||
631 | None => return (Ty::Unknown, None), | ||
632 | }; | ||
630 | let def = match typable { | 633 | let def = match typable { |
631 | None => return (Ty::Unknown, None), | 634 | None => return (Ty::Unknown, None), |
632 | Some(it) => it, | 635 | Some(it) => it, |