aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src
Commit message (Collapse)AuthorAgeFilesLines
...
* Slightly simpler API for groupsAleksey Kladov2020-02-092-48/+77
|
* Merge #3050bors[bot]2020-02-091-4/+10
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3050: Refactor type parameters, implement argument position impl trait r=matklad a=flodiebold I wanted to implement APIT by lowering to type parameters because we need to do that anyway for correctness and don't need Chalk support for it; this grew into some more wide-ranging refactoring of how type parameters are handled :sweat_smile: - use Ty::Bound instead of Ty::Param to represent polymorphism, and explicitly count binders. This gets us closer to Chalk's way of doing things, and means that we now only use Param as a placeholder for an unknown type, e.g. within a generic function. I.e. we're never using Param in a situation where we want to substitute it, and the method to do that is gone; `subst` now always works on bound variables. (This changes how the types of generic functions print; previously, you'd get something like `fn identity<i32>(T) -> T`, but now we display the substituted signature `fn identity<i32>(i32) -> i32`, which I think makes more sense.) - once we do this, it's more natural to represent `Param` by a globally unique ID; the use of indices was mostly to make substituting easier. This also means we fix the bug where `Param` loses its name when going through Chalk. - I would actually like to rename `Param` to `Placeholder` to better reflect its use and get closer to Chalk, but I'll leave that to a follow-up. - introduce a context for type lowering, to allow lowering `impl Trait` to different things depending on where we are. And since we have that, we can also lower type parameters directly to variables instead of placeholders. Also, we'll be able to use this later to collect diagnostics. - implement argument position impl trait by lowering it to type parameters. I've realized that this is necessary to correctly implement it; e.g. consider `fn foo(impl Display) -> impl Something`. It's observable that the return type of e.g. `foo(1u32)` unifies with itself, but doesn't unify with e.g. `foo(1i32)`; so the return type needs to be parameterized by the argument type. This fixes a few bugs as well: - type parameters 'losing' their name when they go through Chalk, as mentioned above (i.e. getting `[missing name]` somewhere) - impl trait not being considered as implementing the super traits (very noticeable for the `db` in RA) - the fact that argument impl trait was only turned into variables when the function got called caused type mismatches when the function was used as a value (fixes a few type mismatches in RA) The one thing I'm not so happy with here is how we're lowering `impl Trait` types to variables; since `TypeRef`s don't have an identity currently, we just count how many of them we have seen while going through the function signature. That's quite fragile though, since we have to do it while desugaring generics and while lowering the type signature, and in the exact same order in both cases. We could consider either giving only `TypeRef::ImplTrait` a local id, or maybe just giving all `TypeRef`s an identity after all (we talked about this before)... Follow-up tasks: - handle return position impl trait; we basically need to create a variable and some trait obligations for that variable - rename `Param` to `Placeholder` Co-authored-by: Florian Diebold <[email protected]> Co-authored-by: Florian Diebold <[email protected]>
| * Fix add_new assist (kind of)Florian Diebold2020-02-071-5/+10
| |
| * Clean up RPIT a bitFlorian Diebold2020-02-071-0/+1
| |
* | Rename add import assistKirill Bulatov2020-02-074-79/+77
|/
* Introduce assists utilsAleksey Kladov2020-02-075-26/+32
|
* Name assist handlersAleksey Kladov2020-02-0727-33/+17
|
* CleanupsAleksey Kladov2020-02-071-2/+5
|
* Cleanup importsAleksey Kladov2020-02-071-1/+1
|
* CleanupAleksey Kladov2020-02-072-4/+11
|
* CleanupAleksey Kladov2020-02-071-3/+4
|
* SimplifyAleksey Kladov2020-02-072-42/+29
|
* Cleanup early return assistAleksey Kladov2020-02-071-3/+8
|
* Generalize invert_if to just always workAleksey Kladov2020-02-072-17/+30
|
* A tiny bit more consistent APIAleksey Kladov2020-02-061-1/+1
|
* Minor renameAleksey Kladov2020-02-062-7/+9
|
* Remove the leftovers after ImportLocator removalKirill Bulatov2020-02-061-2/+2
|
* Doctest autoimportAleksey Kladov2020-02-063-10/+8
|
* Fix testsAleksey Kladov2020-02-061-12/+23
|
* Mostly remove ImoportLocator infraAleksey Kladov2020-02-062-177/+20
|
* Assists are not genericAleksey Kladov2020-02-0627-84/+59
|
* Remove assists TestDBAleksey Kladov2020-02-062-47/+0
|
* Start switching assists to a root databaseAleksey Kladov2020-02-063-39/+42
|
* Make assists use ImportsLocator directlyAleksey Kladov2020-02-061-9/+9
|
* Add profiling around add_impl_membersAleksey Kladov2020-02-061-0/+1
| | | | | | | | | This intention is pretty slow for `impl Interator`, because it has a ton of default methods which need to be substituted. The proper fix here is to not compute the actual edit until the user triggers the action, but that's awkward to do in the LSP right now, so let's just put a profiling code for now.
* Refactor if-let -> match assist to use ast::makeAleksey Kladov2020-02-051-27/+22
|
* Better cursor placement when merging armsAleksey Kladov2020-02-051-4/+17
|
* Merge match arms works with many armsAleksey Kladov2020-02-051-29/+70
|
* CleanupAleksey Kladov2020-02-051-11/+12
|
* Merge #2948bors[bot]2020-02-041-6/+48
|\ | | | | | | | | | | | | | | 2948: Allow add_explicit_type to replace a placeholder type r=matklad a=lnicola Co-authored-by: Laurențiu Nicola <[email protected]>
| * Allow add_explicit_type to replace a placeholder typeLaurențiu Nicola2020-02-031-6/+48
| |
* | Use proper import name in the labelKirill Bulatov2020-02-031-10/+6
| |
* | Simplify paths searchesKirill Bulatov2020-02-031-4/+3
| |
* | Use name only when searching for an import candidateKirill Bulatov2020-02-021-6/+16
|/
* Merge #2982bors[bot]2020-02-022-15/+36
|\ | | | | | | | | | | | | | | 2982: Merge imports when auto importing r=flodiebold a=SomeoneToIgnore Co-authored-by: Kirill Bulatov <[email protected]>
| * Remove obsolete rustdocKirill Bulatov2020-02-021-1/+0
| |
| * Require ModPath for importingKirill Bulatov2020-02-022-10/+8
| |
| * Merge imports when auto importingKirill Bulatov2020-02-021-6/+30
| |
* | Auto import functionsKirill Bulatov2020-02-011-0/+24
|/
* Improve auto import messageLaurențiu Nicola2020-01-311-6/+10
|
* Properly select a target for auto importingKirill Bulatov2020-01-291-29/+17
|
* Code review fixesKirill Bulatov2020-01-272-7/+8
|
* Enforce alphabetical import sortingKirill Bulatov2020-01-261-2/+3
|
* Adjust the testsKirill Bulatov2020-01-262-61/+149
|
* Have a better trait interfaceKirill Bulatov2020-01-262-17/+19
|
* Remove unnecessary lifetime parameterKirill Bulatov2020-01-262-8/+8
|
* Initial auto import action implementationKirill Bulatov2020-01-265-15/+317
|
* fixed inline_local_variable bugTomáš2020-01-251-0/+15
|
* added eq_token() method to LetStmtTomasKralCZ2020-01-191-2/+1
|
* fix 'add_explicit_type' assist rangeTomasKralCZ2020-01-191-1/+26
|