aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/infer
Commit message (Collapse)AuthorAgeFilesLines
* Fix a common false-positive type mismatchFlorian Diebold2020-02-291-4/+4
| | | | | | | | | E.g. for `&{ some_string() }` in a context where a `&str` is expected, we reported a mismatch inside the block. The problem is that we're passing an expectation of `str` down, but the expectation is more of a hint in this case. There's a long comment in rustc about this, which I just copied. Also, fix reported location for type mismatches in macros.
* Fix handling of binders in canonicalizationFlorian Diebold2020-02-221-64/+35
| | | | I'm looking forward to getting rid of this in favor of Chalk's implementation.
* Implement unsize coercion using proper trait solvingFlorian Diebold2020-02-221-179/+26
|
* Fix handling of const patternsFlorian Diebold2020-02-211-1/+3
| | | | | | | | | E.g. in `match x { None => ... }`, `None` is a path pattern (resolving to the option variant), not a binding. To determine this, we need to try to resolve the name during lowering. This isn't too hard since we already need to resolve names for macro expansion anyway (though maybe a bit hacky). Fixes #1618.
* Normalize associated types in types coming from ChalkFlorian Diebold2020-02-211-1/+4
| | | | Fixes #3232.
* More manual clippy fixesKirill Bulatov2020-02-183-18/+10
|
* Run cargo +nightly fix --clippy -Z unstable-optionsKirill Bulatov2020-02-184-42/+35
|
* Fix coercion of &T to itselfFlorian Diebold2020-02-161-0/+2
| | | | | The autoderef coercion logic did not handle matching placeholders. This led to some type mismatches.
* Don't let unknown match arms fall back to !Florian Diebold2020-02-111-1/+5
|
* Add or- and parenthesized-patternsMatthew Jasper2020-02-092-3/+13
|
* Fix some TODOsFlorian Diebold2020-02-071-1/+0
|
* Deal better with implicit type parameters and argument listsFlorian Diebold2020-02-071-3/+5
|
* FormattingFlorian Diebold2020-02-073-12/+5
|
* Clean up RPIT a bitFlorian Diebold2020-02-071-1/+0
|
* Use variables in predicates as wellFlorian Diebold2020-02-071-2/+2
|
* Comment fixes / todosFlorian Diebold2020-02-071-0/+1
|
* Change Ty::Param to contain param IDFlorian Diebold2020-02-073-15/+13
|
* Fix another testFlorian Diebold2020-02-071-5/+1
|
* Lower impl trait to variables, move away from using placeholders where they ↵Florian Diebold2020-02-072-41/+20
| | | | don't belong
* wip lower impl trait to type argsFlorian Diebold2020-02-071-2/+2
|
* Add impl trait lowering modeFlorian Diebold2020-02-071-5/+24
|
* Introduce TyLoweringContextFlorian Diebold2020-02-071-14/+11
|
* Fix inference for shift operatorsFlorian Diebold2020-01-171-2/+2
| | | | Fixes #2602.
* Push resolver further upAleksey Kladov2020-01-142-8/+20
|
* Coerce closures to fn pointersFlorian Diebold2019-12-201-0/+4
| | | | E.g. `let x: fn(A) -> B = |x| { y };`
* Fix coercion of last expression in function bodyFlorian Diebold2019-12-201-1/+1
|
* Handle closure return typesFlorian Diebold2019-12-201-3/+14
| | | | Fixes #2547.
* Merge #2592bors[bot]2019-12-201-4/+8
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2592: Add std::ops::Index support for infering r=edwin0cheng a=edwin0cheng see also #2534 Seem like this can't fix #2534 for this case: ```rust fn foo3(bar: [usize; 2]) { let baz = bar[1]; // <--- baz is still unknown ? println!("{}", baz); } ``` Co-authored-by: Edwin Cheng <[email protected]>
| * Add std::ops::Index support for inferingEdwin Cheng2019-12-191-4/+8
| |
* | Introduce `ContainerId`Aleksey Kladov2019-12-201-1/+1
| |
* | Rename ContainerId -> AssocContainerIdAleksey Kladov2019-12-202-6/+6
| |
* | Add body as a possible container for itemsAleksey Kladov2019-12-191-1/+1
| |
* | Forbid <T>::foo syntax in mod pathsAleksey Kladov2019-12-181-2/+2
|/
* Handle impl Trait more correctlyFlorian Diebold2019-12-151-0/+1
| | | | | | | When calling a function, argument-position impl Trait is transparent; same for return-position impl Trait when inside the function. So in these cases, we need to represent that type not by `Ty::Opaque`, but by a type variable that can be unified with whatever flows into there.
* Use different types for path with and without genericsAleksey Kladov2019-12-141-12/+13
|
* Rename N! to name!Florian Diebold2019-12-131-2/+2
|
* Add macros for known names and pathsFlorian Diebold2019-12-131-2/+2
|
* Correctly infer - and ! using std::ops::{Neg,Not}Emil Lauridsen2019-12-131-21/+26
|
* Add helper for resolving associated type of trait in inferEmil Lauridsen2019-12-131-47/+7
|
* Fix coercion from &Foo to an inference variable in a referenceFlorian Diebold2019-12-081-1/+5
| | | | We didn't try to unify within the reference, but we should.
* Refactor parameter count trackingAleksey Kladov2019-12-071-10/+8
|
* Remove idx and parent generics from genericsAleksey Kladov2019-12-071-11/+13
| | | | | This makes `hir_def::GenericParams` flatter. The logic for re-numbering the params is moved to hir instead.
* Store GenericParams in arenaAleksey Kladov2019-12-071-1/+1
|
* Don't unify within a referenceFlorian Diebold2019-12-061-11/+10
| | | | | | | If we are expecting a `&Foo` and get a `&something`, when checking the `something`, we are *expecting* a `Foo`, but we shouldn't try to unify whatever we get with that expectation, because it could actually be a `&Foo`, and `&&Foo` coerces to `&Foo`. So this fixes quite a few false type mismatches.
* Fix #2467Florian Diebold2019-12-032-3/+14
| | | | | 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)...
* Refactor a bitFlorian Diebold2019-12-021-35/+3
|
* Check receiver type properlyFlorian Diebold2019-12-022-9/+13
|
* Extract unification code to unify moduleFlorian Diebold2019-12-025-30/+290
|
* Handle cycles in impl types betterFlorian Diebold2019-11-302-6/+3
| | | | | | - 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
* Reduce variants of Exproxalica2019-11-291-39/+37
|