2
0
Fork 0
mirror of https://github.com/rust-lang/rust-analyzer synced 2025-02-15 21:49:20 +00:00
No description
Find a file
bors 1ee88db412 Auto merge of - lowr:feat/text-edits-for-inlay-hints, r=Veykril
feat: make inlay hints insertable

Part of 

This PR implements text edit for inlay hints. When an inlay hint contain text edit, user can "accept" it (e.g. by double-clicking in VS Code) to make the hint actual code (effectively deprecating the hint itself).

This PR does not implement auto import despite the original request; text edits only insert qualified types along with necessary punctuation. I feel there are some missing pieces to implement efficient auto import (in particular, type traversal function with early exit) so left it for future work. Even without it, user can use `replace_qualified_name_with_use` assist after accepting the edit to achieve the same result.

I implemented for the following inlay hints:
- top-level identifier pattern in let statements
- top-level identifier pattern in closure parameters
- closure return type when its has block body

One somewhat strange interaction can be observed when top-level identifier pattern has subpattern: text edit inserts type annotation in different place than the inlay hint. Do we want to allow it or should we not provide text edits for these cases at all?

```rust
let a /* inlay hint shown here */ @ (b, c) = foo();
let a @ (b, c) /* text edit inserts types here */ = foo();
```
2023-04-12 14:11:20 +00:00
.cargo Add CARGO_WORKSPACE_DIR env var in .cargo/config.toml 2022-07-19 13:02:16 +02:00
.github Fix visibilities 2023-03-29 11:32:36 +02:00
.vscode ⬆️ rust-analyzer 2022-08-16 11:24:50 +03:00
assets Automatically change text color in logo based on dark mode 2022-03-06 23:06:53 +11:00
bench_data internal: Rename AstDatabase to ExpandDatabase 2023-03-13 16:35:41 +01:00
crates Implement text edits for inlay hints 2023-04-12 19:03:57 +09:00
docs Compute closure captures 2023-04-10 23:04:34 +03:30
editors/code Auto merge of - davidbarsky:davidbarsky/use-parent-folder-for-discovery-cwd, r=Veykril 2023-04-11 07:22:40 +00:00
lib Switch crate graph to use an Arena instead of a hashmap 2023-04-05 10:32:02 +02:00
xtask Add version placeholder to changelog template 2023-02-12 10:55:49 +02:00
.editorconfig prettier config 2022-05-17 18:12:49 +01:00
.git-blame-ignore-revs add prettier format commit to ignored revisions 2022-05-17 18:15:51 +01:00
.gitattributes Fix .gitattributes for test_data 2022-07-24 14:05:35 +02:00
.gitignore internal: add "Shuffle Crate Graph" command 2021-12-07 16:37:19 +01:00
Cargo.lock Bump smol-str 2023-04-11 14:39:19 +02:00
Cargo.toml Bump smol-str 2023-04-11 14:39:19 +02:00
LICENSE-APACHE Licenses 2018-01-10 22:47:04 +03:00
LICENSE-MIT Licenses 2018-01-10 22:47:04 +03:00
PRIVACY.md Update privacy note 2021-12-23 14:04:15 +02:00
README.md ⬆️ rust-analyzer 2022-08-09 07:23:57 +03:00
rustfmt.toml Remove forcing \n via rustfmt 2019-11-02 22:19:59 +03:00
triagebot.toml ⬆️ rust-analyzer 2022-11-09 21:49:10 +02:00

rust-analyzer logo

rust-analyzer is a modular compiler frontend for the Rust language. It is a part of a larger rls-2.0 effort to create excellent IDE support for Rust.

Quick Start

https://rust-analyzer.github.io/manual.html#installation

Documentation

If you want to contribute to rust-analyzer or are just curious about how things work under the hood, check the ./docs/dev folder.

If you want to use rust-analyzer's language server with your editor of choice, check the manual folder. It also contains some tips & tricks to help you be more productive when using rust-analyzer.

Security and Privacy

See the corresponding sections of the manual.

Communication

For usage and troubleshooting requests, please use "IDEs and Editors" category of the Rust forum:

https://users.rust-lang.org/c/ide/14

For questions about development and implementation, join rust-analyzer working group on Zulip:

https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer

License

rust-analyzer is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.