Commit graph

13913 commits

Author SHA1 Message Date
Laurențiu Nicola
8ad7c0439c Remove needless clones 2021-12-17 17:35:10 +02:00
Laurențiu Nicola
fb9529626d Spelling nits 2021-12-17 17:26:35 +02:00
Lukas Wirth
9fe0f0d1d9 Add a few default snippets for VSCode 2021-12-17 16:24:29 +01:00
Lukas Wirth
d3e538638a fix: Don't duplicate attribute completions 2021-12-17 15:22:53 +01:00
k-nasa
0e9095e42c manual run sourcegen_lint_completions 2021-12-17 08:46:17 +09:00
k-nasa
7643e08962 Add clippy lint group to attribute auto compleme 2021-12-17 08:34:08 +09:00
k-nasa
4e6e65dd71 List struct to clonable 2021-12-17 08:33:46 +09:00
Wang Ruochen
ee079561b1
Add comma for "move if to guard" 2021-12-15 15:26:24 -08:00
bors[bot]
4ec6bd6206
Merge #11017
11017: Support "move if to guard" with an else branch r=Veykril a=weirane

Support the assist `move_arm_cond_to_match_guard` when there is an else branch.

I have two questions:
1. How to indent the first line of a match arm? `matcharm.indent()` doesn't seem to work. so I hard coded four spaces here:
95a0de85d5/crates/ide_assists/src/handlers/move_guard.rs (L162-L163)

2. I find a little issue in the original implementation, this code
```rust
let y = match 92 {
    x => {
        if x == 0 {$0
            false
        }
    }
    _ => true,
};
```
will be transformed to
```rust
let y = match 92 {
    x if x == 0 => false
    _ => true,
};
```
a comma is missing after the `false`. Should I also fix that? Or this can go in a separate PR.

Closes #10997.

Co-authored-by: Wang Ruochen <wrc@ruo-chen.wang>
2021-12-15 23:04:51 +00:00
Wang Ruochen
e8d0742997
Add coverage marks 2021-12-15 14:44:47 -08:00
iDawer
676744be6e Bump MSRV (1.57) 2021-12-16 01:56:12 +05:00
Wang Ruochen
95a0de85d5
Support "move if to guard" with an else branch 2021-12-14 10:27:44 -08:00
bors[bot]
9efa355a62
Merge #11011
11011: minor: Simplify r=Veykril a=Veykril

bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-14 11:56:30 +00:00
Lukas Wirth
901c7c7277 match_ast! takes a pattern to allow underscore usage 2021-12-14 12:44:31 +01:00
Lukas Wirth
9915103c9e Simplify 2021-12-14 12:38:20 +01:00
Lukas Wirth
04a7fbbddb Move out doc-links tests into a separate module 2021-12-14 12:10:43 +01:00
zhoufan
c3ad945d9b fixes broken tests 2021-12-14 15:57:58 +08:00
zhoufan
7b952cb1aa infer associated method in local scope 2021-12-14 15:34:57 +08:00
bors[bot]
791722b70a
Merge #10998
10998: Add number representation assists r=Veykril a=errx

Reimplemented assists from this PR https://github.com/rust-analyzer/rust-analyzer/pull/3683 with current APIs.
![image](https://user-images.githubusercontent.com/462486/145726792-47700215-26f2-4fdc-9520-63d1487901e5.png)
![image](https://user-images.githubusercontent.com/462486/145726802-f528a2f7-9159-41d3-b459-fc3fae033e60.png)


I've decided not to add options about size of the groups so behaviour is similar to clippy's. 
Minimal number length is also taken from clippy.


Co-authored-by: Oleg Matrokhin <matrokhin@gmail.com>
2021-12-13 18:49:06 +00:00
Oleg Matrokhin
60605a24d4 Reuse results from split_into_parts() 2021-12-13 21:16:04 +03:00
Oleg Matrokhin
8b03b41b7a Add number representation assists 2021-12-13 19:35:38 +03:00
bors[bot]
69500e8c6b
Merge #11002
11002: fix: Add support for v6 macro metadata format r=lnicola a=lnicola

CC https://github.com/rust-analyzer/rust-analyzer/issues/10894#issuecomment-991993824

bors r+

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2021-12-13 16:17:14 +00:00
Laurențiu Nicola
e6af1ca718 Add support for v6 macro metadata format 2021-12-13 18:15:22 +02:00
bors[bot]
e1f3982a5f
Merge #11001
11001: minor: fixup generate assist priorities r=Veykril a=Veykril

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/10996
bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-13 15:51:54 +00:00
bors[bot]
3f550d2e38
Merge #11000
11000: fix: insert whitespaces into assoc items for assist when macro generated r=Veykril a=Veykril

This is obviously only a temporary hack which still produces ugly looking items, but as long as the syntax is valid one can at least have rustfmt fix the formatting again. 
Fixes https://github.com/rust-analyzer/rust-analyzer/issues/6588
bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-13 15:43:12 +00:00
Lukas Wirth
1cef532c4d minor: fixup generate assist priorities 2021-12-13 16:42:21 +01:00
Lukas Wirth
749eeef3e7 fix: insert whitespaces into assoc items for assist when macro generated 2021-12-13 16:35:32 +01:00
Lukas Wirth
328419534d Move ws insert rendering for macro expansion into ide_db 2021-12-13 15:55:13 +01:00
Aleksey Kladov
3b5b988526 prettyfy 2021-12-12 19:36:14 +03:00
Aleksey Kladov
980dd56cdc consistency 2021-12-12 19:32:04 +03:00
Aleksey Kladov
6e4bb57014 simplify 2021-12-12 19:31:32 +03:00
Aleksey Kladov
57e6ef0bfb tighten up invariants 2021-12-12 19:22:37 +03:00
Aleksey Kladov
18d4737fb9 add cross-crate inlines 2021-12-12 19:17:04 +03:00
Aleksey Kladov
1055a6111a port mbe to soa tokens 2021-12-12 19:06:40 +03:00
Aleksey Kladov
965585748e more orthogonal interface 2021-12-12 18:38:49 +03:00
Aleksey Kladov
6ce587ba5a parser tests work 2021-12-12 18:31:05 +03:00
Aleksey Kladov
26bfd6023f Switch parser to use tokens 2021-12-12 16:54:09 +03:00
Aleksey Kladov
d5ad0f3ca0 use eof token pattenr 2021-12-12 16:54:09 +03:00
Aleksey Kladov
addfd8d9e8 start SOA parser interface 2021-12-12 16:54:09 +03:00
bors[bot]
fc628cfc89
Merge #10993
10993: minor: Bump deps r=lnicola a=lnicola

Gets `coutme 2.0`.

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2021-12-12 11:11:50 +00:00
Laurențiu Nicola
8782e8e704 Bump deps 2021-12-12 13:10:21 +02:00
bors[bot]
40159150aa
Merge #10951
10951: feat: assist to generate documentation templates r=Veykril a=numero-744

Closes #10878, #1915 and #4767

Full description is in #10878, better read [the tests](https://github.com/rust-analyzer/rust-analyzer/pull/10951/files#diff-7a64e2efb66b2625443340fcbc96d531baff12c17cc0aaf51885ea94f67de254R424) to understand what this feature does.

- [x] There is one remaining thing about non-`pub` functions, what do you think about it?
- [x] In this PR [empty examples are generated](https://github.com/rust-analyzer/rust-analyzer/pull/10951/files#diff-7a64e2efb66b2625443340fcbc96d531baff12c17cc0aaf51885ea94f67de254R99) for `trait` functions, but maybe no examples should be provided at all.
- [x] If there is already a documentation, add another one with a separator ([currently done](https://github.com/rust-analyzer/rust-analyzer/pull/10951/files#diff-7a64e2efb66b2625443340fcbc96d531baff12c17cc0aaf51885ea94f67de254R74)) or simply disable this assist?
- [x] I will check once more that the generated examples are correct (ie. they are easy to fill before that they are built and tested)

Comments appreciated 😄 

Co-authored-by: Côme ALLART <come.allart@etu.emse.fr>
2021-12-11 22:58:49 +00:00
Côme ALLART
0e89f2f346 feat: remove should_panic example generation 2021-12-11 22:46:54 +01:00
Côme ALLART
9e53db274b refactor: use hir to test if a value is returned 2021-12-11 20:52:14 +01:00
Côme ALLART
80a68685db refactor: use Itertools::intersperse 2021-12-11 20:41:23 +01:00
Côme ALLART
7266fdb5a4 refactor: use hir to compare returned and self types 2021-12-11 20:33:08 +01:00
Florian Diebold
d599f819e0 Fix expected type calculation in struct literal if followed by comma 2021-12-11 18:47:45 +01:00
bors[bot]
0eb6039e4e
Merge #10987
10987: fix: respect inner attributes for Structs and Enums r=lnicola a=rainy-me

fix: #10980 (the allow/deny issue is not fully resolved though.)

Co-authored-by: rainy-me <github@yue.coffee>
2021-12-11 17:20:14 +00:00
rainy-me
a0c52794bd fix: lookup upwards for struct and enum 2021-12-12 01:23:27 +09:00
bors[bot]
4f04d8477a
Merge #10965
10965: minor: Remove dead assists-related function r=Veykril a=lnicola

Unless I'm missing something, `assists_with_fixes` seems to be always used and ends up in the same code path.

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2021-12-11 15:06:52 +00:00
bors[bot]
48cd733c9e
Merge #10956 #10986
10956: minor: Bump deps r=Veykril a=lnicola

bors r+

10986: fix: Fix lint completions not working for unclosed attributes r=Veykril a=Veykril

Fixes #10682
Uses keywords and nested `TokenTree`s as a heuristic to figure out when to stop parsing in case the attribute is unclosed which should work pretty well as attributes are usually followed by either of those.
bors r+

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-11 14:58:07 +00:00
Lukas Wirth
0001a42570 fix: Fix lint completions not working for unclosed attributes 2021-12-11 15:55:25 +01:00
bors[bot]
9946def7e2
Merge #10877
10877: feat: make hightlighting linear r=matklad a=matklad

In https://youtu.be/qvIZZf5dmTE, we've noticed that AstIdMap does a
linear lookup when going from SyntaxNode to Id. This leads to
accidentally quadratic overall performance. Replace linear lookup with a
O(1) hashmap lookup.

Future work: don't duplicate `SyntaxNodePtr` in `AstIdMap` and switch to
"call site dependency injection" style storage (eg, store a
`HashSet<ErasedFileAstId>`).

See the explanation of the work here on YouTube :-)

As you can see from then benchmark results, this doesn't actually make analysis stats fastre. I am a bit mystified as to why this is happening to be honest. 

Baseline
```
Database loaded:     598.40ms, 304minstr, 118mb (metadata 390.57ms, 21minstr, 841kb; build 111.31ms, 8764kinstr, -214kb)
  crates: 39, mods: 824, decls: 18647, fns: 13910
Item Collection:     9.70s, 75ginstr, 377mb
  exprs: 382426, ??ty: 387 (0%), ?ty: 285 (0%), !ty: 145
Inference:           43.16s, 342ginstr, 641mb
Total:               52.86s, 417ginstr, 1018mb
```

This PR:
```
Database loaded:     626.34ms, 304minstr, 118mb (metadata 416.26ms, 21minstr, 841kb; build 113.67ms, 8750kinstr, -209kb)
  crates: 39, mods: 824, decls: 18647, fns: 13910
Item Collection:     10.16s, 75ginstr, 389mb
  exprs: 382426, ??ty: 387 (0%), ?ty: 285 (0%), !ty: 145
Inference:           44.51s, 342ginstr, 644mb
Total:               54.67s, 417ginstr, 1034mb
```

I think we probably should merge the first commit here, but not the second. 

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-12-11 14:49:29 +00:00
Aleksey Kladov
278e7c3311 more frugal map 2021-12-11 17:49:09 +03:00
bors[bot]
3137327182
Merge #10985
10985: minor: Remove unnecessary clones r=Veykril a=Veykril

bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-11 14:32:29 +00:00
Lukas Wirth
03f6d92ae4 minor: Remove unnecessary clones 2021-12-11 15:27:36 +01:00
bors[bot]
d97f2f6b9b
Merge #10976
10976: fix: Show case-insensitive exact matches instead of fuzzy flyimport for short paths r=Veykril a=Veykril

And raise the fuzzy trigger from 2 to 3 chars. This way we keep the ability of flyimporting short names like `Rc`.
Fixes https://github.com/rust-analyzer/rust-analyzer/issues/6917
bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-11 13:50:55 +00:00
Lukas Wirth
143a30aa51 Show case-insensitive exact matches instead of fuzzy flyimport for short paths 2021-12-11 14:47:11 +01:00
bors[bot]
d03397fe11
Merge #10978
10978: internal: Only prime direct dependencies of the workspace crates r=jonas-schievink a=lnicola

This reduces the number of primed crates on `self` from 177 to 105.

```text
# baseline
  86521 me   20   0 2939M  562M 14320 S  0.0  0.9  0:07.10   37 rust-analyzer

# pr
  99947 me   20   0 2935M  549M 14424 S  0.0  0.9  0:07.10   37 rust-analyzer
```

The RAM usage seems to vary a lot, so I'm not sure the improvement shown above is real.

We also drop the topological sorting, although it might still make sense to do the dependencies before the workspace crates. But since it's only used to make the progress reporting a bit more fine, it probably doesn't matter too much.

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2021-12-10 22:31:55 +00:00
Lukas Wirth
1bbc255ec5 Remove some allocations 2021-12-10 20:01:24 +01:00
Lukas Wirth
c81aa68afe Don't show trait flyimports for impl trait and placeholders 2021-12-10 19:18:21 +01:00
Lukas Wirth
a7fc2061ea Show enum completions for single variant enums in irrefutable patterns 2021-12-10 18:25:54 +01:00
Côme ALLART
9c0f9d02bf feat: trait fn: add panicking example only if default panicks 2021-12-10 15:53:43 +01:00
Laurențiu Nicola
d012a20f25 Only prime direct dependencies of the workspace crates 2021-12-10 16:24:07 +02:00
bors[bot]
bc8efca0c8
Merge #10977
10977: fix: fix `concat!` with captured expression r=jonas-schievink a=jonas-schievink

Adds another hack on top of https://github.com/rust-analyzer/rust-analyzer/pull/10623 to fix `concat!`.

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/10721

bors r+

Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
2021-12-10 14:19:51 +00:00
Jonas Schievink
95ddeaed8e Fix concat! with captured expression 2021-12-10 15:17:31 +01:00
Côme ALLART
f5e0998402 refactor: use hir to check if fn in trait/impl 2021-12-10 15:16:04 +01:00
Côme ALLART
c3d151ada6 fix: check correctly if function is exported 2021-12-10 14:42:31 +01:00
Lukas Wirth
c469f8abcb internal: Shrink TraitImpls and InherentImpls HashMaps 2021-12-09 18:39:46 +01:00
Lukas Wirth
e1a236d65e Simplify 2021-12-09 18:28:10 +01:00
Lukas Wirth
f9c59d3752 Use known names instead of string literals 2021-12-09 18:13:15 +01:00
Lukas Wirth
067d87e8a9 Remove some allocs 2021-12-09 18:04:32 +01:00
Jonas Schievink
58ce331baa Fix library target overriding sysroot deps 2021-12-08 17:05:00 +01:00
Laurențiu Nicola
f5968cfc84 Remove dead assists-related function 2021-12-08 16:55:25 +02:00
Jonas Schievink
c0a30ff21d Move synstructure hack out of ItemTree lowering 2021-12-08 15:44:52 +01:00
Côme ALLART
dc4e4c7daa fix: add mod files in path in generated examples 2021-12-07 23:34:53 +01:00
bors[bot]
77f2d34930
Merge #10950
10950: internal: completion: split out more PathKinds from ImmediateLocation r=Veykril a=Veykril

bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-07 21:57:59 +00:00
Lukas Wirth
ae0c7268f7 internal: completion: split out more PathKinds from ImmediateLocation 2021-12-07 22:49:42 +01:00
Côme ALLART
220137f1cf fix: disable assist for documented functions 2021-12-07 18:02:18 +01:00
Jonas Schievink
b365b6119c Treat extern blocks as item containers 2021-12-07 17:31:26 +01:00
bors[bot]
b7afb6fc6c
Merge #10958
10958: internal: add "Shuffle Crate Graph" command r=jonas-schievink a=jonas-schievink

May be useful for debugging issues like https://github.com/rust-analyzer/rust-analyzer/issues/10084

bors r+

Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
2021-12-07 15:44:05 +00:00
Jonas Schievink
deb5c1426d internal: add "Shuffle Crate Graph" command 2021-12-07 16:37:19 +01:00
bors[bot]
bf484d9d99 Merge #10957
10957: fix: Fix some TryToNav impls not upmapping ranges out of macros r=Veykril a=Veykril

bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-07 14:51:07 +00:00
Lukas Wirth
f781e599cc Adjust incorrect runnable tests 2021-12-07 15:42:54 +01:00
Lukas Wirth
e09d410dcd Simplify 2021-12-07 15:06:56 +01:00
Lukas Wirth
b66f181bc0 Fix some TryToNav impls not upmapping ranges out of macros 2021-12-07 15:02:22 +01:00
Laurențiu Nicola
9a624abc84 Bump deps 2021-12-07 13:15:14 +02:00
Côme ALLART
3a82548c5e fix: reduce assist scope: pub fn's in pub modules 2021-12-06 23:33:24 +01:00
Laurențiu Nicola
3678cbd12e Bump tracing 2021-12-06 20:54:45 +02:00
Côme ALLART
d55d3b63cb fix: format assist doc for sourcegen_assists_docs 2021-12-06 19:04:44 +01:00
Côme ALLART
998b91af9c feat: assist to generate documentation templates 2021-12-06 18:32:25 +01:00
Laurențiu Nicola
f5db6e0e95 Bump parser step limit a little 2021-12-06 11:47:36 +02:00
bors[bot]
7d6fcbc0be
Merge #10944
10944: internal: Prefer resolution of inert attributes r=Veykril a=Veykril

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/10942
bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-05 15:28:28 +00:00
Lukas Wirth
89e1d19ec5 internal: Prefer resolution of inert attributes 2021-12-05 16:28:08 +01:00
bors[bot]
6f84bbfa1e
Merge #10943
10943: feat: Enable completions for attributes r=Veykril a=Veykril



Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-05 15:14:10 +00:00
Lukas Wirth
1f254dd855 feat: Enable flyimport completions for attributes 2021-12-05 15:57:28 +01:00
Aleksey Kladov
4f3fc6fa1a try to optimize things unsuccessfully
Baseline
```
Database loaded:     598.40ms, 304minstr, 118mb (metadata 390.57ms, 21minstr, 841kb; build 111.31ms, 8764kinstr, -214kb)
  crates: 39, mods: 824, decls: 18647, fns: 13910
Item Collection:     9.70s, 75ginstr, 377mb
  exprs: 382426, ??ty: 387 (0%), ?ty: 285 (0%), !ty: 145
Inference:           43.16s, 342ginstr, 641mb
Total:               52.86s, 417ginstr, 1018mb
```

Eager
```
Database loaded:     625.86ms, 304minstr, 118mb (metadata 414.52ms, 21minstr, 841kb; build 113.81ms, 8764kinstr, -230kb)
  crates: 39, mods: 824, decls: 18647, fns: 13910
Item Collection:     10.09s, 75ginstr, 389mb
  exprs: 382426, ??ty: 387 (0%), ?ty: 285 (0%), !ty: 145
Inference:           43.27s, 341ginstr, 644mb
Total:               53.37s, 417ginstr, 1034mb
```

Lazy
```
Database loaded:     626.34ms, 304minstr, 118mb (metadata 416.26ms, 21minstr, 841kb; build 113.67ms, 8750kinstr, -209kb)
  crates: 39, mods: 824, decls: 18647, fns: 13910
Item Collection:     10.16s, 75ginstr, 389mb
  exprs: 382426, ??ty: 387 (0%), ?ty: 285 (0%), !ty: 145
Inference:           44.51s, 342ginstr, 644mb
Total:               54.67s, 417ginstr, 1034mb
```
2021-12-05 15:32:39 +03:00
Aleksey Kladov
c603b9043f feat: make hightlighting linear
In https://youtu.be/qvIZZf5dmTE, we've noticed that AstIdMap does a
linear lookup when going from SyntaxNode to Id. This leads to
accidentally quadratic overall performance. Replace linear lookup with a
O(1) hashmap lookup.

Future work: don't duplicate `SyntaxNodePtr` in `AstIdMap` and switch to
"call site dependency injection" style storage (eg, store a
`HashSet<ErasedFileAstId>`).

See the explanation of the work here on YouTube
https://youtu.be/wvEgymUm7cY :-)
2021-12-05 15:32:39 +03:00
Laurențiu Nicola
bff377c712 Clean up some unused cross-crate dependencies 2021-12-05 13:54:49 +02:00
bors[bot]
1cf1359c55
Merge #10937
10937: fix: Add highlighting hack back for unresolved attributes r=Veykril a=Veykril

cc https://github.com/rust-analyzer/rust-analyzer/issues/10935
bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-12-05 11:02:55 +00:00