Commit Graph

27 Commits

Author SHA1 Message Date
Aleksey Kladov
9faea2364d Use dyn Trait for working with databse
It improves compile time in `--release` mode quite a bit, it doesn't
really slow things down and, conceptually, it seems closer to what we
want the physical architecture to look like (we don't want to
monomorphise EVERYTHING in a single leaf crate).
2020-03-16 17:42:30 +01:00
Florian Diebold
adc7b8ea2d Fix completion with a partially unknown type
To test whether the receiver type matches for the impl, we unify the given self
type (in this case `HashSet<{unknown}>`) with the self type of the
impl (`HashSet<?0>`), but if the given self type contains Unknowns, they won't
be unified with the variables in those places. So we got a receiver type that
was different from the expected one, and concluded the impl doesn't match.

The fix is slightly hacky; if after the unification, our variables are still
there, we make them fall back to Unknown. This does make some sense though,
since we don't want to 'leak' the variables.

Fixes #3547.
2020-03-10 21:02:13 +01:00
Florian Diebold
336a3c6121 Fix #3373
Basically, we need to allow variables in the caller self type to unify with the
impl's declared self type. That requires some more contortions in the variable
handling. I'm looking forward to (hopefully) handling this in a cleaner way when
we switch to Chalk's types and unification code.
2020-03-01 14:31:35 +01:00
Florian Diebold
31171eed5e Do autoderef for indexing 2020-02-29 22:48:53 +01:00
Florian Diebold
e313efb992 Do array unsizing for method receivers
It turns out rustc actually only unsizes array method receivers, so we don't
need to do any trait solving for this (at least for now).

Fixes #2670.
2020-02-29 22:48:53 +01:00
Aleksey Kladov
a1e1869554 Rename ast::ImplBlock -> ast::ImplDef 2020-02-29 21:33:15 +01:00
Laurențiu Nicola
5b05209744 Exclude methods from non-parameter types introduced by generic constraints 2020-02-19 10:46:13 +02:00
Kirill Bulatov
b8ddcb0652 Run cargo +nightly fix --clippy -Z unstable-options 2020-02-18 16:03:08 +02:00
Florian Diebold
f47dc4de8d Check that impl self type matches up with expected self type in path mode
Fixes #3144.
2020-02-14 21:08:25 +01:00
Florian Diebold
ed25cf70d5 Change Ty::Param to contain param ID 2020-02-07 18:28:10 +01:00
Florian Diebold
16c6937447 Lower impl trait to variables, move away from using placeholders where they don't belong 2020-02-07 18:28:10 +01:00
Aleksey Kladov
21c5fd8b1b Push resolver further up 2020-01-14 14:24:03 +01:00
Aleksey Kladov
7ec62ea5e6 Push resolver up 2020-01-14 14:11:07 +01:00
Aleksey Kladov
52e7f67128 Move impls_future to Type, where it belongs 2020-01-14 11:29:43 +01:00
Aleksey Kladov
1b8ce5b37b Move impls to ItemScope 2019-12-20 16:52:02 +01:00
Aleksey Kladov
1234dda9ee Use generic ItemLoc for impls 2019-12-20 13:47:44 +01:00
Aleksey Kladov
94ad07af4b Introduce ContainerId 2019-12-20 12:07:23 +01:00
Aleksey Kladov
8fc20b6503 Rename ContainerId -> AssocContainerId 2019-12-20 12:00:05 +01:00
Aleksey Kladov
ba12e83c26 Add body as a possible container for items 2019-12-19 18:12:46 +01:00
Aleksey Kladov
7b0644d81e Switch to the new location for impls 2019-12-12 14:25:34 +01:00
Florian Diebold
e4add45951 Fix #2467
The stand-alone `unify` requires that the type doesn't contain any type
variables. So we can't share the code here for now (without more refactoring)...
2019-12-03 15:01:23 +01:00
Florian Diebold
cfa50df33e Refactor a bit 2019-12-02 19:33:13 +01:00
Florian Diebold
456d52fdfa Check receiver type properly 2019-12-02 19:33:13 +01:00
Florian Diebold
cbf262a1bc Change order of calls to get method candidate order correct 2019-12-02 19:33:13 +01:00
Florian Diebold
cf6809645e Handle cycles in impl types better
- impl Trait<Self> for S is allowed
 - impl Trait for S<Self> is an invalid cycle, but we can add cycle recovery for
   it in Salsa now
2019-11-30 12:57:32 +01:00
Aleksey Kladov
8d34696826 Memoize impl resolutions 2019-11-27 22:12:09 +03:00
Aleksey Kladov
a87579500a Move Ty 2019-11-27 21:16:00 +03:00