Jonas Schievink
d568e7686a
Support if let
match guards
2021-08-13 00:25:14 +02:00
bors[bot]
baf1494374
Merge #9807
...
9807: Implicit `Sized` bounds r=iDawer a=iDawer
This should close #8984
`hir_ty`:
- Type parameters, associated types and `impl Trait` are `Sized` by deafault except `Self` in a trait.
- Implicit `Sized` bound is added to end of predicate list. It does not check if such bound is present already. Also it does not track the bound is implicit.
- Allowed ambiguous unsize coercion if Chalk returns definite guidance.
- Allowed ambiguous autoderef if Chalk returns definite guidance.
`hir_def`:
- `ItemTree` pretty printing shows `?Sized` bounds.
`HirDisplay`:
- `impl Trait` with weird bounds rendered correctly.
- `Sized`/`?Sized` bounds are not shown if they are default.
### Perf
`./target/rust-analyzer-baseline_8a843113 -q analysis-stats --memory-usage .`
```
Database loaded: 1.63s, 287minstr, 91mb
crates: 38, mods: 741, decls: 15914, fns: 11835
Item Collection: 26.80s, 73ginstr, 338mb
exprs: 318994, ??ty: 398 (0%), ?ty: 435 (0%), !ty: 174
Inference: 50.28s, 116ginstr, 516mb
Total: 77.08s, 189ginstr, 855mb
```
`./target/rust-analyzer-sized-fixed_ambig_coercion-de074fe6 -q analysis-stats --memory-usage .`
```
Database loaded: 1.63s, 287minstr, 91mb
crates: 38, mods: 741, decls: 15914, fns: 11835
Item Collection: 26.95s, 73ginstr, 338mb
exprs: 318994, ??ty: 398 (0%), ?ty: 435 (0%), !ty: 166
Inference: 96.39s, 234ginstr, 543mb
Total: 123.33s, 307ginstr, 881mb
```
Co-authored-by: Dawer <7803845+iDawer@users.noreply.github.com>
2021-08-12 17:55:29 +00:00
Dawer
6c366ade00
Clean up
2021-08-12 21:20:28 +05:00
Ryan Levick
a5c46e5a88
Factor out return type handling for both function and method
2021-08-12 16:05:32 +02:00
Ryan Levick
0834e05045
Always fall back to focusing on generated function body
2021-08-12 14:56:39 +02:00
Ryan Levick
e8de34b6b3
Use term on label for generating method impl
2021-08-12 14:01:15 +02:00
bors[bot]
1376ece497
Merge #9863
...
9863: feat: Generate default trait fn impl when generating `PartialEq` r=yoshuawuyts a=yoshuawuyts
Implements a default trait function body when generating the `PartialEq` trait for a type. Thanks!
r? `@veykril`
Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2021-08-12 10:18:02 +00:00
Yoshua Wuyts
97ec6a27ec
add make::ext::path_from_idents
2021-08-12 12:17:09 +02:00
Yoshua Wuyts
df19895ba6
implement feedback from review
2021-08-12 11:50:01 +02:00
Yoshua Wuyts
8ed24029c1
rm remaining todo comment
2021-08-11 23:30:00 +02:00
Yoshua Wuyts
2fff019b6b
improve codegen
2021-08-11 20:33:13 +02:00
Yoshua Wuyts
6c4a94b03a
finishing touches
2021-08-11 20:04:05 +02:00
Yoshua Wuyts
c4e10c81b9
gen partialeq for tuple enums
2021-08-11 20:01:19 +02:00
Yoshua Wuyts
741e27b414
dedup PartialEq for Record enums
2021-08-11 19:40:47 +02:00
Lukas Wirth
6045059916
extract_variable handles selection ranges better
2021-08-11 17:52:09 +02:00
Yoshua Wuyts
fc17eb482d
gen PartialEq for Record enums
...
Co-Authored-By: Ryan Levick <rylev@users.noreply.github.com>
2021-08-11 17:15:12 +02:00
bors[bot]
f438dbb100
Merge #9860
...
9860: fix: Fix extract_function tagging params as mut unnecessarily r=Veykril a=Veykril
Fixes #9822
bors r+
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-08-11 15:10:26 +00:00
Lukas Wirth
6d960ab032
Fix extract_function tagging params as mut unnecessarily
2021-08-11 17:09:51 +02:00
Aleksey Kladov
629c68e80d
internal: document that ascription is preferred to a turbo fish
2021-08-11 14:16:15 +03:00
Yoshua Wuyts
1cf7af7032
wip enum record/tuple generation
2021-08-10 22:08:14 +02:00
Yoshua Wuyts
65ce87cad8
gen PartialEq for basic enums
2021-08-10 21:05:23 +02:00
Yoshua Wuyts
f8a64c044a
gen PartialEq for structs
2021-08-10 19:49:06 +02:00
Yoshua Wuyts
3cad2c4feb
add partial_eq gen tests
2021-08-10 19:48:50 +02:00
bors[bot]
e1dcec0e02
Merge #9846
...
9846: feat: Generate default trait fn impl when generating `Clone` r=Veykril a=yoshuawuyts
Implements a default trait function body when generating the `Clone` trait for a type. Thanks!
r? `@\veykril`
Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2021-08-10 13:18:09 +00:00
Yoshua Wuyts
2f866974d9
gen clone for tuple enums
2021-08-10 15:07:13 +02:00
Yoshua Wuyts
e0adb39de3
gen clone for record enums
2021-08-10 14:43:20 +02:00
Lukas Wirth
7e6eb67f0d
Substitute generic types in inline_call
2021-08-10 14:39:56 +02:00
Yoshua Wuyts
7ddc26aea1
add clone generation for structs and bare enums
2021-08-10 13:55:26 +02:00
Yoshua Wuyts
7d7a50daf7
Add clone generation tests
2021-08-10 13:20:24 +02:00
Lukas Wirth
b7d7dd6163
Implement bool_then_to_if
assist
2021-08-10 13:17:45 +02:00
Yoshua Wuyts
4b5139e8a5
impl gen hash for structs
2021-08-10 12:37:10 +02:00
Yoshua Wuyts
ec2535e9ce
impl gen hash for enums
2021-08-10 12:37:10 +02:00
Yoshua Wuyts
326890753c
implement feedback from review
2021-08-10 12:21:48 +02:00
Yoshua Wuyts
d6b788a9ee
Add trait codegen to add_missing_impl_members
assist
2021-08-10 10:27:52 +02:00
Yoshua Wuyts
4d2e25a034
move trait body gen code to utils
2021-08-09 21:47:44 +02:00
bors[bot]
8e4fb4f518
Merge #9804
...
9804: Generate method from call r=matklad a=mahdi-frms
Needs a bit of refactoring. Tests also should be added.
Co-authored-by: mahdi-frms <mahdif1380@outlook.com>
2021-08-09 17:09:13 +00:00
bors[bot]
63427afb69
Merge #9825
...
9825: Generate default impl when converting #[derive(Default)] to manual impl r=Veykril a=yoshuawuyts
Similar to https://github.com/rust-analyzer/rust-analyzer/pull/9814 , but for `#[derive(Default)]`. Thanks!
## Follow-up steps
I've added the tests inside `handlers/replace_derive_with_manual_impl.rs` again, but I'm planning a follow-up PR to extract these to `utils/` so we can share them between assists - and maybe even add another assist just for the purpose of testing these impls (e.g. `generate_default_trait_body`).
The step after _that_ is likely to fill out the remaining traits, so we can make it so whenever RA auto-completes a trait which also can be derived, we provide a default function body.
Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2021-08-09 16:59:10 +00:00
mahdi-frms
05a789c09d
refactor method generation assist
2021-08-09 21:06:24 +04:30
mahdi-frms
9217f6dcf7
method gen assist usable in all of expression
2021-08-09 21:06:24 +04:30
mahdi-frms
311dc5b04f
add test for method generation assist
2021-08-09 21:06:24 +04:30
mahdi-frms
3c31f3831d
One assist for function and method generation
2021-08-09 21:06:24 +04:30
mahdi-frms
02f5b5e0e2
method generation assist: store owned ast nodes
2021-08-09 21:06:24 +04:30
mahdi-frms
6240b2dae2
generate method adds pub keyword
2021-08-09 21:06:24 +04:30
mahdi-frms
d38f36e5af
generate method assist uses existing impl blocks
2021-08-09 21:06:24 +04:30
mahdi-frms
99570f32d8
refactor: use single next space
2021-08-09 21:06:24 +04:30
mahdi-frms
b777e498fe
refactor: use single fn_args
2021-08-09 21:06:24 +04:30
mahdi-frms
9ca73528ee
generate method assist
2021-08-09 21:06:24 +04:30
Yoshua Wuyts
13749e782e
move code around
2021-08-09 18:27:01 +02:00
Yoshua Wuyts
457eede795
Add gen default for tuple structs
2021-08-09 17:40:50 +02:00
Yoshua Wuyts
423860cd7e
Add default body when implementing Default by hand
2021-08-09 17:12:18 +02:00
bors[bot]
caac771439
Merge #9735
...
9735: Add assist to sort members alphabetically. r=matklad a=vsrs
Supports traits, impls, structs, unions and enums (including inner struct variants). Does not support modules yet.
```rust
en┃um Animal {
Dog(String, f64),
Cat { weight: f64, name: String },
}
```
->
```rust
enum Animal {
Cat { weight: f64, name: String },
Dog(String, f64),
}
```
---
```rust
enum Animal {
Dog(String, f64),
Cat {┃ weight: f64, name: String },
}
```
->
```rust
enum Animal {
Dog(String, f64),
Cat { name: String, weight: f64 },
}
```
---
More samples in docs 0b7835619a/crates/ide_assists/src/handlers/sort_items.rs (L12-L83)
.
Relates #6110
Co-authored-by: vsrs <vit@conrlab.com>
2021-08-09 10:21:14 +00:00
bors[bot]
5664a2b0b3
Merge #9814
...
9814: Generate default impl when converting `#[derive(Debug)]` to manual impl r=yoshuawuyts a=yoshuawuyts
This patch makes it so when you convert `#[derive(Debug)]` to a manual impl, a default body is provided that's equivalent to the original output of `#[derive(Debug)]`. This should make it drastically easier to write custom `Debug` impls, especially when all you want to do is quickly omit a single field which is `!Debug`.
This is implemented for enums, record structs, tuple structs, empty structs - and it sets us up to implement variations on this in the future for other traits (like `PartialEq` and `Hash`).
Thanks!
## Codegen diff
This is the difference in codegen for record structs with this patch:
```diff
struct Foo {
bar: String,
}
impl fmt::Debug for Foo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- todo!();
+ f.debug_struct("Foo").field("bar", &self.bar).finish()
}
}
```
Co-authored-by: Irina Shestak <shestak.irina@gmail.com>
Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
Co-authored-by: Yoshua Wuyts <yoshuawuyts+github@gmail.com>
2021-08-08 22:30:37 +00:00
Yoshua Wuyts
59cdb51ef3
Remove unwraps
2021-08-09 00:29:38 +02:00
Yoshua Wuyts
f64aacc0c1
Use minicore
2021-08-08 18:58:42 +02:00
Lukas Wirth
3b7c713af3
Implement if_to_bool_then assist
2021-08-08 17:56:34 +02:00
Yoshua Wuyts
dcbf385ffc
use make::name_ref
2021-08-08 16:31:28 +02:00
Yoshua Wuyts
e26ba72333
Update replace_derive_with_manual_impl.rs
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
a2e5fc659d
Improve naming and add comments
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
720508a2df
dedup struct debug impl code
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
cc3ff1b486
Fix enum debug indent level
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
4b7ae9fedc
generate Debug for enums
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
a1f2c7adcd
rename variables
...
According to https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/dev/style.md#variable-naming
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
aa09141a8a
finish debug_struct impls
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
fd7236c791
debug for record field structs
2021-08-08 16:26:25 +02:00
Yoshua Wuyts
e2ab2e12a0
wip
2021-08-08 16:24:54 +02:00
Irina Shestak
f2e547d587
impl Debug def from trait
2021-08-08 16:24:54 +02:00
Lukas Wirth
c4a119f433
Simplify
2021-08-07 22:16:15 +02:00
Lukas Wirth
b6d574642d
extract_type_alias extracts generics correctly
2021-08-05 02:54:06 +02:00
Lukas Wirth
01413dd7d4
extract_function does not move locals defined outside of loops
2021-08-04 20:00:45 +02:00
Dawer
0f6621fbfa
Fix tests.
2021-08-04 20:20:14 +05:00
Lukas Wirth
29c4ae6f9a
extract_assist
is aware of the expression owner
2021-08-03 20:47:51 +02:00
Lukas Wirth
9edaf0cad8
extract_function is const
aware
2021-08-03 18:43:28 +02:00
Lukas Wirth
e62ce6f61a
Reorganize functions in extract_function assist
2021-08-03 18:24:33 +02:00
Lukas Wirth
027a99fc70
Do no tear comments apart in extract_function assist
2021-08-03 17:39:49 +02:00
Lukas Wirth
b96f1adf5c
Give TypeInfo fields and methods more appropriate names
2021-08-03 17:28:51 +02:00
Lukas Wirth
8afa2722b2
Revise TypeInfo::ty usage
2021-08-03 17:24:43 +02:00
Lukas Wirth
25ff7171c4
Introduce TypeInfo
2021-08-03 16:41:53 +02:00
vsrs
cc33b0dc82
Update the docs
2021-08-02 20:24:18 +03:00
vsrs
6031dee145
Enable assist only if an item is selected
2021-08-02 19:58:41 +03:00
vsrs
e71b239d37
fix generated tests
2021-08-02 19:49:36 +03:00
vsrs
0088f84c88
Allow several samples in "// Assist:" comments.
2021-08-02 19:49:36 +03:00
vsrs
580e5e277a
Some comment tests
2021-08-02 19:49:36 +03:00
vsrs
4fa66f1e1e
Sort struct enum variant fields
2021-08-02 19:49:36 +03:00
vsrs
6f8888cfe7
Sort enums
2021-08-02 19:49:36 +03:00
vsrs
2c7e99b209
Sort unions
2021-08-02 19:49:36 +03:00
vsrs
b31bf74c13
cargo fmt
2021-08-02 19:49:36 +03:00
vsrs
0694f18636
Sort struct fields
2021-08-02 19:49:36 +03:00
vsrs
643f3931f7
Sort trait and impl methods
2021-08-02 19:49:36 +03:00
Lukas Wirth
432bb222c3
Simplify inline_local_variable assist
2021-08-02 15:27:47 +02:00
bors[bot]
93873b0ce1
Merge #9739
...
9739: generate function assist favors deref cmpt types r=matklad a=mahdi-frms
Fixes #9713
Although that's still not relying on sematic info.
Co-authored-by: mahdi-frms <mahdif1380@outlook.com>
2021-07-31 15:08:29 +00:00
Lukas Wirth
b363755901
Fix hover range for derive inputs
2021-07-31 14:59:31 +02:00
Lukas Wirth
7c7c4543da
Replace useless types
2021-07-31 14:29:15 +02:00
Lukas Wirth
778e6e8ba8
add_explicit_type is applicable for closure parameters
2021-07-31 14:04:34 +02:00
mahdi-frms
a5edf6de79
generate function assist favors deref cmpt types
2021-07-31 16:34:09 +04:30
bors[bot]
1f817833e7
Merge #9727
...
9727: internal: Simplify extract_function assist r=Veykril a=Veykril
also fixes #7839(blocked on #9728 )
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-07-30 14:56:50 +00:00
Lukas Wirth
3e351cc0ba
Add trailing comma when extracting match arm expressions into functions
2021-07-30 16:48:13 +02:00
bors[bot]
4cc961007f
Merge #9731
...
9731: feat: Add `replace_char_with_string` assist r=Veykril a=Veykril
Adds the counterpart for the `replace_string_with_char` assist and fixes the assist not escaping the `'` in the string `"'"` when transforming that to a char.
bors r+
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-07-30 14:47:38 +00:00
Lukas Wirth
17a47a830b
Add replace_char_with_string assist
2021-07-30 16:46:06 +02:00
bors[bot]
0a3ac7a96c
Merge #9728
...
9728: fix: Attach comma token to MATCH_ARM instead of MATCH_ARM_LIST r=Veykril a=Veykril
bors r+
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-07-30 14:11:37 +00:00
Lukas Wirth
82c1e61887
Fix assists assuming comma belonging to MATCH_ARM_LIST
2021-07-30 16:01:26 +02:00