aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/handlers
Commit message (Collapse)AuthorAgeFilesLines
...
* 'Fill match arms' should work with existing match armsSteffen Lyngbaek2020-03-191-25/+281
| | | | | | | | | | | | | | | | | | | | | | | | | | | Addresses #3039 This essentially adds missing match arms. The algorithm for this can get complicated rather quickly so bail in certain conditions and rely on a PlaceholderPat. The algorighm works as such: - Iterate through the Enum Def Variants - Attempt to see if the variant already exists as a match arm - If yes, skip the enum variant. If no, include it. - If it becomes complicated, rather than exhaustively deal with every branch, mark it as a "partial match" and simply include the placeholder. Conditions for "complication": - The match arm contains a match guard - Any kind of nested destrucuring Order the resulting merged match branches as such: 1. Provided match arms 2. Missing enum variant branch arms 3. End with Placeholder if required - Add extra tests
* Cleanup importsAleksey Kladov2020-03-196-13/+17
|
* Merge nested use treesAleksey Kladov2020-03-191-20/+52
|
* GeneralizeAleksey Kladov2020-03-192-13/+10
|
* Use match_astAleksey Kladov2020-03-181-10/+13
|
* Merge imports assistAleksey Kladov2020-03-183-25/+162
| | | | Work towards #2220
* SimplifyAleksey Kladov2020-03-131-2/+2
|
* Don't use generic DB where a concrete one will doAleksey Kladov2020-03-131-6/+2
|
* Rerail split_import API onto ASTAleksey Kladov2020-03-061-19/+33
| | | | | The code is more verbose and less efficient now, but should be reusable in add_import context as well
* Unfold groups with single assists into plain assistsKirill Bulatov2020-03-051-6/+1
|
* Remove old find refs infraAleksey Kladov2020-03-041-11/+18
|
* Highlight assist testsAleksey Kladov2020-03-031-46/+46
|
* Fix applicability of inline localAleksey Kladov2020-03-031-4/+26
|
* Rename ast::ImplBlock -> ast::ImplDefAleksey Kladov2020-02-293-12/+12
|
* Fix typoAleksey Kladov2020-02-292-2/+2
|
* More orthogonal API for building pathsAleksey Kladov2020-02-292-11/+18
|
* SimplifyAleksey Kladov2020-02-282-16/+1
|
* Move insert_use util to utilsAleksey Kladov2020-02-282-532/+20
|
* introduce const visibility assistDouglas Campos2020-02-281-4/+9
|
* Refactor string literalsAleksey Kladov2020-02-271-1/+2
|
* Refactor primary IDE APIAleksey Kladov2020-02-266-74/+39
| | | | | | | | | | This introduces the new type -- Semantics. Semantics maps SyntaxNodes to various semantic info, such as type, name resolution or macro expansions. To do so, Semantics maintains a HashMap which maps every node it saw to the file from which the node originated. This is enough to get all the necessary hir bits just from syntax.
* Remove code duplication in testsAleksey Kladov2020-02-261-36/+24
|
* Add `remove_mut` assistAleksey Kladov2020-02-191-0/+32
|
* More manual clippy fixesKirill Bulatov2020-02-182-5/+5
|
* Run cargo +nightly fix --clippy -Z unstable-optionsKirill Bulatov2020-02-183-4/+4
|
* Merge #3108bors[bot]2020-02-171-33/+14
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 3108: Magic Completion for `impl Trait for` Associated Items r=matklad a=kdelorey # Summary This PR adds a set of magic completions to auto complete associated trait items (functions/consts/types). ![Associated Trait Impl](https://user-images.githubusercontent.com/2295721/74493144-d8f1af00-4e96-11ea-93a4-82725bf89646.gif) ## Notes Since the assist and completion share the same logic when figuring out the associated items that are missing, a shared utility was created in the `ra_assists::utils` module. Resolves #1046 As this is my first PR to the rust-analyzer project, I'm new to the codebase, feedback welcomed! Co-authored-by: Kevin DeLorey <[email protected]>
| * Formatted changes.Kevin DeLorey2020-02-111-2/+2
| |
| * Fixed warning generated after refactoring.Kevin DeLorey2020-02-111-1/+1
| |
| * Updated the `add_missing_impl_members` to use the shared utility.Kevin DeLorey2020-02-111-33/+14
| |
* | Do not collect all traitsKirill Bulatov2020-02-121-102/+53
| |
* | Support associated constsKirill Bulatov2020-02-121-18/+133
| |
* | Also consider associated constantsKirill Bulatov2020-02-121-8/+8
| |
* | Fix post-rebase issuesKirill Bulatov2020-02-121-14/+13
| |
* | Refactor the codeKirill Bulatov2020-02-121-96/+93
| |
* | Adjust the assist group nameKirill Bulatov2020-02-121-9/+25
| |
* | Add profilingKirill Bulatov2020-02-121-0/+3
| |
* | Support trait method call autoimportsKirill Bulatov2020-02-121-100/+206
| |
* | Trait location draftKirill Bulatov2020-02-121-9/+120
| |
* | Refactor path for imports extractionKirill Bulatov2020-02-121-20/+92
| |
* | Add method testsKirill Bulatov2020-02-121-3/+116
| |
* | Resolve methods and functions betterKirill Bulatov2020-02-121-3/+20
| |
* | Introduce AttrKindKirill Bulatov2020-02-121-2/+1
| |
* | Do not add imports before inner attributesKirill Bulatov2020-02-121-1/+29
| |
* | Add or- and parenthesized-patternsMatthew Jasper2020-02-093-10/+10
|/
* Fix rebase leftoversKirill Bulatov2020-02-091-2/+2
|
* Do not import anything if first segment of FQN resolvesKirill Bulatov2020-02-091-12/+36
|
* Set auto-import targetAleksey Kladov2020-02-091-1/+17
| | | | closes #3067
* Slightly simpler API for groupsAleksey Kladov2020-02-091-19/+14
|
* 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
| |