rust-analyzer/crates
bors[bot] c518fe7f6c
Merge #6130 #6135
6130: Items case quick fix (snake_case / UPPER_SNAKE_CASE / CamelCase) r=matklad a=popzxc

Resolves #4598.

After a third try, it finally works. Boy, it appeared tougher than it seemed.

Initially I thought like "Ha, `rustc` already tells us where idents are named incorrectly. It shouldn't be that hard, should it?".

Well, the problems with the information provided by `rustc` appeared shortly:

- `rustc` warnings are `flycheck` warnings, which are slightly aside from our diagnostics with fixes.
  When we map flycheck diagnostic to LSP, we can convert it into a fix, but only if it's marked as `Applicability::MachineApplicable`.
  Name case fix is marked `Applicability::MaybeIncorrect`, and for a reason: it only suggest to rename symbol under cursor, without tracking any references.
- Warning spawned by `rustc` are identified by string labels rather than enum. It means that if one day the diagnostic will be renamed in `rustc`, `rust-analyzer` code will still compile, but won't find the required diagnostic by name anymore. If by chance this will happen when some unlucky guy will decide to create their first pull request, they'll be confused by suddenly failing tests  (likely) not related to their changes.
- Even if we'll try to build fixes atop of `rustc` warnings, we'll have to do it in the `rust_analyzer::diagnostics::to_proto` module, which is far less
  convenient for that matter than `ide` crate.

That's why I decided that it's worth a separate `rust-analyzer` diagnostic, which will implement `DiagnosticWithFix` trait.

After that, I discovered that currently `hir_ty::diagnostics` only check `DefWithBody` types, like function bodies. I had to add support for diagnostics
which look at any `ModuleDef`.

And of course, since I'd added a lot of new functionality, it required extensive testing.

That explains why the diff is so big for a (looking) relatively small feature.

I hope that this PR doesn't only add a small feature, but also creates a base for building another features.

## Example:

![case_quick_fix](https://user-images.githubusercontent.com/12111581/95008475-e07ee780-0622-11eb-9978-62a9ea0e7782.gif)

P.S. My eyes were bleeding when I had to write the code for the example...


6135: when generating new function, focus on return type instead of body r=matklad a=bnjjj

I made a little change when we use the assist to generate a new function, instead of focusing on the function body, it will focus on return type

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>
Co-authored-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
2020-10-12 16:00:13 +00:00
..
arena Add TBD description to arena 2020-08-24 13:29:10 +02:00
assists Merge #6130 #6135 2020-10-12 16:00:13 +00:00
base_db Improve prime_caches and display its progress 2020-10-12 13:35:01 +02:00
cfg Add description for crates that will be published 2020-08-24 13:07:22 +02:00
flycheck Spawn a flycheck instance per workspace 2020-09-27 19:41:54 +02:00
hir Merge #6130 #6135 2020-10-12 16:00:13 +00:00
hir_def Merge #6130 #6135 2020-10-12 16:00:13 +00:00
hir_expand Shorten type hints for std::iter Iterators 2020-10-06 19:20:42 +02:00
hir_ty Keep SyntaxNodePtr::range private 2020-10-12 11:05:00 +03:00
ide Merge #6130 #6135 2020-10-12 16:00:13 +00:00
ide_db Treat ast::Name in field patterns as use 2020-10-09 19:56:54 +02:00
mbe Cleanup 2020-10-07 11:55:20 +02:00
parser Rename record_field_pat to record_pat_field 2020-09-10 18:56:04 +02:00
paths Add description for crates that will be published 2020-08-24 13:07:22 +02:00
proc_macro_api Add description for crates that will be published 2020-08-24 13:07:22 +02:00
proc_macro_srv Add track_env_var to the proc macro server 2020-10-08 17:06:20 +03:00
proc_macro_test Add description for crates that will be published 2020-08-24 13:07:22 +02:00
profile Bump rustc_lexer, cfg-if to 1.0 and add new license to check 2020-10-08 10:39:02 -04:00
project_model Update crates/project_model/src/sysroot.rs 2020-10-09 16:17:05 +02:00
rust-analyzer Improve prime_caches and display its progress 2020-10-12 13:35:01 +02:00
ssr Minor clippy performance suggestions 2020-09-30 15:22:49 -04:00
stdx Add to_upper_snake_case function to stdx 2020-10-12 11:05:00 +03:00
syntax Keep SyntaxNodePtr::range private 2020-10-12 11:05:00 +03:00
test_utils Add description for crates that will be published 2020-08-24 13:07:22 +02:00
text_edit Actually assert disjointness 2020-09-03 13:37:36 +02:00
toolchain Add description for crates that will be published 2020-08-24 13:07:22 +02:00
tt Add description for crates that will be published 2020-08-24 13:07:22 +02:00
vfs Rename the method to avoid false promises 2020-09-10 01:45:49 +03:00
vfs-notify Add description for crates that will be published 2020-08-24 13:07:22 +02:00