aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/lib.rs
Commit message (Collapse)AuthorAgeFilesLines
* Remove TypeCtor interningFlorian Diebold2020-07-151-7/+1
| | | | Our TypeCtor and Chalk's TypeName match now!
* Thread varargs through r-aJonas Schievink2020-07-141-8/+11
|
* Consolidate hir diagnostics code in one placeAleksey Kladov2020-07-141-3/+0
|
* Don't copy-paste `impl_froms` into every crateAleksey Kladov2020-07-131-19/+0
|
* Reorder importsAleksey Kladov2020-07-131-7/+6
|
* Clippy perf warningskjeremy2020-07-061-1/+1
| | | | Removes redundant clones
* Implement Chalk variable kindsFlorian Diebold2020-07-011-4/+18
| | | | | | | | | This means we need to keep track of the kinds (general/int/float) of variables in `Canonical`, which requires some more ceremony. (It also exposes some places where we're not really dealing with canonicalization correctly -- another thing to be cleaned up when we switch to using Chalk's types directly.) Should fix the last remaining issue of #2534.
* Simlify with matches!()Veetaha2020-06-281-8/+2
|
* Add HighlightTag::Operator, use it for unsafe deref. Move unsafe validation ↵Paul Daniel Faria2020-06-271-0/+1
| | | | to its own file
* Apply suggestions from code reviewvsrs2020-06-181-28/+25
|
* Add Type::walk methodvsrs2020-06-181-0/+52
|
* Add `Go to Type Definition` hover action.vsrs2020-06-181-3/+3
|
* Clean up handling of int/float literal typesFlorian Diebold2020-06-061-3/+3
| | | | | | 'Unknown' int/float types actually never exist as such, they get replaced by type variables immediately. So the whole `Uncertain<IntTy>` thing was unnecessary and just led to a bunch of match branches that were never hit.
* Implement return position impl trait / opaque type supportFlorian Diebold2020-06-051-9/+89
| | | | | | | | | | | | | This is working, but I'm not that happy with how the lowering works. We might need an additional representation between `TypeRef` and `Ty` where names are resolved and `impl Trait` bounds are separated out, but things like inference variables don't exist and `impl Trait` is always represented the same way. Also note that this doesn't implement correct handling of RPIT *inside* the function (which involves turning the `impl Trait`s into variables and creating obligations for them). That intermediate representation might help there as well.
* Support raw_ref_op's raw reference operatorrobojumper2020-05-281-2/+16
|
* Use Chalk's built-in representation of function item typesFlorian Diebold2020-05-221-0/+6
|
* Use TypeCtorId as AdtId directly, and rename the type alias StructId -> AdtIdFlorian Diebold2020-05-221-1/+1
|
* Switch to new magic marksAleksey Kladov2020-05-201-1/+0
|
* Allow calling dyn trait super trait methods without the super trait in scopeFlorian Diebold2020-05-161-8/+6
| | | | | This also removes some vestiges of the old impl trait support which I think aren't currently in use.
* Adds a param_idx helperFedor Sakharov2020-05-141-0/+5
|
* Handle coercing function types to function pointers in matchFlorian Diebold2020-05-081-0/+6
| | | | | | | | | | | | E.g. in ```rust match x { 1 => function1, 2 => function2, } ``` we need to try coercing both to pointers. Turns out this is a special case in rustc as well (see the link in the comment).
* Use matches!Florian Diebold2020-05-081-4/+1
|
* Implement better handling of divergenceFlorian Diebold2020-05-081-0/+7
| | | | | | | | Divergence here means that for some reason, the end of a block will not be reached. We tried to model this just using the never type, but that doesn't work fully (e.g. in `let x = { loop {}; "foo" };` x should still have type `&str`); so this introduces a `diverges` flag that the type checker keeps track of, like rustc does.
* Rename to associated_type_shorthand_candidatesJonas Schievink2020-04-291-2/+2
|
* Complete assoc. items on type parametersJonas Schievink2020-04-291-1/+2
|
* For associated type shorthand (T::Item), use the substs from the where clauseFlorian Diebold2020-04-261-0/+12
| | | | | So e.g. if we have `fn foo<T: SomeTrait<u32>>() -> T::Item`, we want to lower that to `<T as SomeTrait<u32>>::Item` and not `<T as SomeTrait<_>>::Item`.
* Fix wrong substitution codeFlorian Diebold2020-04-231-1/+1
| | | | | | | We need to shift in when we're substituting inside a binder. This should fix #4053 (it doesn't fix the occasional overflow that also occurs on the Diesel codebase though).
* Fix another crash from wrong bindersFlorian Diebold2020-04-171-2/+2
| | | | | | | Basically, if we had something like `dyn Trait<T>` (where `T` is a type parameter) in an impl we lowered that to `dyn Trait<^0.0>`, when it should be `dyn Trait<^1.0>` because the `dyn` introduces a new binder. With one type parameter, that's just wrong, with two, it'll lead to crashes.
* fix false positive for enum with no variantsJosh Mcguigan2020-04-161-0/+10
|
* missing match arms diagnosticJosh Mcguigan2020-04-071-0/+1
|
* Fix Chalk panicFlorian Diebold2020-04-061-1/+2
| | | | | Fixes #3865. Basically I forgot to shift 'back' when we got `dyn Trait`s back from Chalk, so after going through Chalk a few times, the panic happened.
* Check for eprintln on CIAleksey Kladov2020-04-061-0/+5
|
* Upgrade Chalk againFlorian Diebold2020-04-051-30/+73
| | | | | | | The big change here is counting binders, not variables (https://github.com/rust-lang/chalk/pull/360). We have to adapt to the same scheme for our `Ty::Bound`. It's mostly fine though, even makes some things more clear.
* Use `dyn Trait` for working with databseAleksey Kladov2020-03-161-17/+19
| | | | | | | 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).
* Normalize waiting queries namesAleksey Kladov2020-03-061-2/+2
|
* Fix #3373Florian Diebold2020-03-011-0/+4
| | | | | | | 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.
* Rework find_super_trait_path to protect against cyclesFlorian Diebold2020-02-221-7/+10
|
* Fix shift_bound_varsFlorian Diebold2020-02-221-3/+3
| | | | It should only shift free vars (maybe the name isn't the best...)
* Add &dyn Trait -> &dyn SuperTrait coercion, and fix &T -> &dyn TraitFlorian Diebold2020-02-221-0/+20
|
* Implement dyn Trait unsizing as wellFlorian Diebold2020-02-221-0/+11
|
* More manual clippy fixesKirill Bulatov2020-02-181-3/+2
|
* Run cargo +nightly fix --clippy -Z unstable-optionsKirill Bulatov2020-02-181-2/+2
|
* Move hir_fmt code to display moduleFlorian Diebold2020-02-141-371/+4
|
* Rename Ty::Param => Ty::PlaceholderFlorian Diebold2020-02-141-5/+5
| | | | This aligns more with Chalk.
* Fix some TODOsFlorian Diebold2020-02-071-7/+10
|
* Don't print implicit type args from impl TraitFlorian Diebold2020-02-071-3/+10
|
* FormattingFlorian Diebold2020-02-071-1/+4
|
* Fix compilation of other cratesFlorian Diebold2020-02-071-2/+8
|
* Use variables in predicates as wellFlorian Diebold2020-02-071-24/+4
|
* Comment fixes / todosFlorian Diebold2020-02-071-0/+2
|