Commit 073b325
committed
Auto merge of rust-lang#12556 - DorianListens:dscheidt/generic-extract, r=Veykril
fix: Support generics in extract_function assist
This change attempts to resolve issue rust-lang#7636: Extract into Function does not
create a generic function with constraints when extracting generic code.
In `FunctionBody::analyze_container`, we now traverse the `ancestors` in search
of `AnyHasGenericParams`, and attach any `GenericParamList`s and `WhereClause`s
we find to the `ContainerInfo`.
Later, in `format_function`, we collect all the `GenericParam`s and
`WherePred`s from the container, and filter them to keep only types matching
`TypeParam`s used within the newly extracted function body or param list. We
can then include the new `GenericParamList` and `WhereClause` in the new
function definition.
This change only impacts `TypeParam`s. `LifetimeParam`s and `ConstParam`s are
out of scope for this change.
I've never contributed to this project before, but I did try to follow the style guide. I believe that this change represents an improvement over the status quo, but I think it's also fair to argue that it doesn't fully "fix" the linked issue. I'm totally open to merging this as is, or going further to try to make a more complete solution. Also: if there are other unit or integration tests I should add, please let me know where to look!File tree
2 files changed
+467
-7
lines changed- crates
- hir/src
- ide-assists/src/handlers
2 files changed
+467
-7
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3307 | 3307 | | |
3308 | 3308 | | |
3309 | 3309 | | |
| 3310 | + | |
| 3311 | + | |
| 3312 | + | |
| 3313 | + | |
| 3314 | + | |
| 3315 | + | |
| 3316 | + | |
| 3317 | + | |
| 3318 | + | |
3310 | 3319 | | |
3311 | 3320 | | |
3312 | 3321 | | |
| |||
0 commit comments