aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* | | Merge #3050bors[bot]2020-02-0924-614/+1174
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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]>
| * | | Add two more testsFlorian Diebold2020-02-071-0/+51
| | | |
| * | | Fix some TODOsFlorian Diebold2020-02-073-11/+17
| | | |
| * | | Fix add_new assist (kind of)Florian Diebold2020-02-071-5/+10
| | | |
| * | | Don't print implicit type args from impl TraitFlorian Diebold2020-02-072-14/+21
| | | |
| * | | Deal better with implicit type parameters and argument listsFlorian Diebold2020-02-074-26/+138
| | | |
| * | | FormattingFlorian Diebold2020-02-0712-53/+98
| | | |
| * | | Clean up RPIT a bitFlorian Diebold2020-02-075-41/+14
| | | |
| * | | Fix compilation of other cratesFlorian Diebold2020-02-073-14/+25
| | | |
| * | | Use variables in predicates as wellFlorian Diebold2020-02-075-63/+52
| | | |
| * | | Comment fixes / todosFlorian Diebold2020-02-073-6/+8
| | | |
| * | | Fix APIT some moreFlorian Diebold2020-02-074-101/+115
| | | |
| * | | Fix APITFlorian Diebold2020-02-071-0/+2
| | | |
| * | | Change Ty::Param to contain param IDFlorian Diebold2020-02-0711-127/+136
| | | |
| * | | WIP use params for APITFlorian Diebold2020-02-073-1/+64
| | | |
| * | | Fix assoc type selectionFlorian Diebold2020-02-072-32/+43
| | | |
| * | | Fix another testFlorian Diebold2020-02-072-7/+3
| | | |
| * | | First stab at desugaring bounds for APITFlorian Diebold2020-02-073-10/+56
| | | |
| * | | Fix crashFlorian Diebold2020-02-071-4/+7
| | | |
| * | | Fix enum constructorsFlorian Diebold2020-02-073-11/+9
| | | |
| * | | Fix printing of function typesFlorian Diebold2020-02-077-72/+73
| | | |
| * | | Lower impl trait to variables, move away from using placeholders where they ↵Florian Diebold2020-02-079-188/+220
| | | | | | | | | | | | | | | | don't belong
| * | | wip lower impl trait to type argsFlorian Diebold2020-02-078-14/+97
| | | |
| * | | wip implement lowering modeFlorian Diebold2020-02-072-26/+34
| | | |
| * | | Add impl trait lowering modeFlorian Diebold2020-02-076-40/+141
| | | |
| * | | Introduce TyLoweringContextFlorian Diebold2020-02-076-152/+144
| |/ /
* | | Merge #3065bors[bot]2020-02-092-9/+1
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3065: Remove ImportResolver-related stubs r=matklad a=SomeoneToIgnore A follow-up for https://github.com/rust-analyzer/rust-analyzer/pull/3063/, removes the FIXME added during the https://github.com/rust-analyzer/rust-analyzer/pull/2982#issuecomment-581130028 changes. Co-authored-by: Kirill Bulatov <[email protected]>
| * | | Remove ImportResolver-related stubsKirill Bulatov2020-02-092-9/+1
|/ / /
* | | Merge #3063bors[bot]2020-02-091-128/+3
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3063: Remove hard-coded auto-import during completion r=matklad a=matklad We now have a real auto-import system, so we can do a proper thing. Co-authored-by: Aleksey Kladov <[email protected]>
| * | | Remove hard-coded auto-import during completionAleksey Kladov2020-02-091-128/+3
|/ / / | | | | | | | | | We now have a real auto-import system, so we can do a proper thing.
* | | Merge #3052bors[bot]2020-02-099-104/+96
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | 3052: Rename add import assist r=matklad a=SomeoneToIgnore Based on the https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/2.20assists.20with.20the.20same.20action.20name/near/187655643 and the related discussion. Co-authored-by: Kirill Bulatov <[email protected]>
| * | Rename add import assistKirill Bulatov2020-02-079-104/+96
| |/
* | Merge #3054bors[bot]2020-02-083-313/+12
|\ \ | |/ |/| | | | | | | | | | | 3054: Move emacs support to emacs-lsp r=flodiebold a=flodiebold emacs-lsp has integrated most of the support code (https://github.com/emacs-lsp/lsp-mode/pull/1395 will remove the last differences, as far as I can tell), so remove rust-analyzer.el here and update the documentation. Co-authored-by: Florian Diebold <[email protected]>
| * Docs cleanupsFlorian Diebold2020-02-082-18/+12
| |
| * Remove rust-analyzer.elFlorian Diebold2020-02-081-295/+0
|/ | | | The support has been moved to emacs-lsp.
* Merge #3049bors[bot]2020-02-0730-109/+97
|\ | | | | | | | | | | | | | | 3049: Introduce assists utils r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * Introduce assists utilsAleksey Kladov2020-02-075-26/+32
| |
| * Name assist handlersAleksey Kladov2020-02-0729-35/+19
| |
| * 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
| |
* | Merge #3048bors[bot]2020-02-077-71/+45
|\ \ | |/ |/| | | | | | | | | | | 3048: Remove irrelevant distinction r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * RenameAleksey Kladov2020-02-076-23/+23
| |
| * Remove irrelevant distinctionAleksey Kladov2020-02-076-48/+22
| |
* | Merge #3047bors[bot]2020-02-075-20/+20
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3047: Update async unsafe fn ordering in parser r=matklad a=kiljacken As of rust-lang/rust#61319 the correct order for functions that are both unsafe and async is: `async unsafe fn` and not `unsafe async fn`. This commit updates the parser tests to reflect this, and corrects parsing behavior to accept the correct ordering. Fixes #3025 Co-authored-by: Emil Lauridsen <[email protected]>
| * | Update async unsafe fn ordering.Emil Lauridsen2020-02-075-20/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As of rust-lang/rust#61319 the correct order for functions that are both unsafe and async is: `async unsafe fn` and not `unsafe async fn`. This commit updates the parser tests to reflect this, and corrects parsing behavior to accept the correct ordering. Fixes #3025
* | | Merge #3040bors[bot]2020-02-0719-259/+686
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3040: Rework value parameter parsing r=matklad a=tobz1000 Fixes #2847. - `Fn__(...)` parameters with idents/patterns no longer parse - Trait function parameters with arbitrary patterns parse - Trait function parameters without idents/patterns no longer parse - `fn(...)` parameters no longer parse with patterns other than a single ident __Question__: The pre-existing test `param_list_opt_patterns` has been kept as-is, although the name no longer makes sense (it's testing `Fn__(...)` params, which aren't allowed patterns any more). What would be best to do about this? Co-authored-by: Toby Dimmick <[email protected]>
| * | PR tweaksToby Dimmick2020-02-073-21/+18
| | |