aboutsummaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
* | Merge #7617bors[bot]2021-02-109-68/+603
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7617: Add getter/setter assists r=Veykril a=yoshuawuyts This patch makes progress towards the design outlined in https://github.com/rust-analyzer/rust-analyzer/issues/5943, and includes a small refactor which closes https://github.com/rust-analyzer/rust-analyzer/issues/7607. All together this patch does 4 things: - Adds a `generate_getter` assist. - Adds a `generate_getter_mut` assist. - Adds a `generate_setter` assist. - Moves the `generate_impl_text` function from `generate_new` into `utils` (which closes #7607). ## Design Notes I've chosen to follow the [Rust API guidelines on getters](https://rust-lang.github.io/api-guidelines/naming.html#getter-names-follow-rust-convention-c-getter) as closely as possible. This deliberately leaves "builder pattern"-style setters out of scope. Also, similar to https://github.com/rust-analyzer/rust-analyzer/pull/7570 this assist generates doc comments. I think this should work well in most cases, and for the few where it doesn't it's probably easily edited. This makes it slightly less correct than the #7570 implementation, but I think this is still useful enough to include for many of the same reasons. The reason why this PR contains 3 assists, rather than 1, is because each of them is so similar to the others that it felt more noisy to do them separately than all at once. The amount of code added does not necessarily reflect that, but hope that still makes sense. ## Examples **Input** ```rust struct Person { name: String, // <- cursor on "name" } ``` **generate getter** ```rust struct Person { name: String, } impl Person { /// Get a reference to the person's name. fn name(&self) -> &String { &self.name } } ``` **generate mut getter** ```rust struct Person { name: String, } impl Person { /// Get a mutable reference to the person's name. fn name_mut(&mut self) -> &mut String { &mut self.name } } ``` **generate setter** ```rust struct Person { name: String, } impl Person { /// Set the person's name. fn set_name(&mut self, name: String) { self.name = name; } } ``` Co-authored-by: Yoshua Wuyts <[email protected]>
| * | Add getter/setter assistsYoshua Wuyts2021-02-099-68/+603
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Finish implementing `generate_setter` assists Make `generate_impl_text` util generic generate getter methods Fix getter / setter naming It's now in-line with the Rust API naming guidelines: https://rust-lang.github.io/api-guidelines/naming.html#getter-names-follow-rust-convention-c-getter apply clippy Improve examples
| | |
| \ \
*-. \ \ Merge #7591 #7622bors[bot]2021-02-102-6/+34
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7591: Fix/no floating promises r=matklad a=sahandevs closes #3515 - added `@typescript-eslint/no-floating-promises: error` rule - changed `"no-console": ["error"]` to `"no-console": ["error", { allow: ["warn", "error"] }]` (we at least log the error messages of the floating promises) - fixed lint/compile errors 7622: Resolve TupleStructPat in SourceAnalyzer::resolve_path r=Veykril a=Veykril Closes #7594 bors r+ Co-authored-by: Sahandevs <[email protected]> Co-authored-by: Lukas Wirth <[email protected]>
| | * | | Resolve TupleStructPat in SourceAnalyzer::resolve_pathLukas Wirth2021-02-102-6/+34
| | | | |
* | | | | Add #[track_caller] to assist testsYoshua Wuyts2021-02-091-0/+4
| |/ / / |/| | |
* | | | Show qualified variant pattern completionsLukas Wirth2021-02-094-45/+95
| | | |
* | | | Merge #7616bors[bot]2021-02-093-6/+74
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7616: Show `Self` pattern and Self-prefixed enum-variant completions r=Veykril a=Veykril ![jDfQXNE0qZ](https://user-images.githubusercontent.com/3757771/107413514-1ff99b00-6b11-11eb-88b3-126cd106b514.gif) ![JpogVIgloq](https://user-images.githubusercontent.com/3757771/107413519-212ac800-6b11-11eb-8282-51115468dccc.gif) Variant pattern completions are to be done still. Closes #6549, at least that should address all that's left from that issue from what I can see. Co-authored-by: Lukas Wirth <[email protected]>
| * | | | Show Self pattern completions for Adts if inside implsLukas Wirth2021-02-093-6/+40
| | | | |
| * | | | Show completions for enum variant with self prefix if inside implLukas Wirth2021-02-091-1/+35
| | | | |
* | | | | Merge #7615bors[bot]2021-02-093-8/+66
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7615: Add parsing benchmark r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | | Add parsing benchmarkAleksey Kladov2021-02-093-8/+66
| | | | | |
* | | | | | Merge #7614bors[bot]2021-02-097-237/+333
|\ \ \ \ \ \ | |/ / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7614: Unleash inner item resolution to users r=jonas-schievink a=jonas-schievink ![Peek 2021-02-09 17-30](https://user-images.githubusercontent.com/1786438/107394800-8627f300-6afc-11eb-8662-ed07226bc58f.gif) Co-authored-by: Jonas Schievink <[email protected]>
| * | | | | Remove unneeded returnJonas Schievink2021-02-091-2/+2
| | | | | |
| * | | | | Remove `pub`Jonas Schievink2021-02-091-2/+2
| | | | | |
| * | | | | Use `block_def_map` in `Resolver`Jonas Schievink2021-02-091-118/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This required a few changes to not bail out immediately if a `ModuleScope` doesn't resolve a path. The `LocalItemsScope` hack is now removed.
| * | | | | Teach `find_path` about inner itemsJonas Schievink2021-02-091-10/+91
| | | | | |
| * | | | | Add another block def map testJonas Schievink2021-02-091-0/+27
| | | | | |
| * | | | | Make `with_ancestor_maps` publicJonas Schievink2021-02-091-1/+1
| | | | | |
| * | | | | Add `TestDB::module_at_position`Jonas Schievink2021-02-092-104/+99
| | | | | |
| * | | | | Add expression scopes for blocksJonas Schievink2021-02-091-4/+18
| |/ / / /
* / / / / Infra for "unit" benchmarkingAleksey Kladov2021-02-096-4001/+96
|/ / / /
* | | | restore accidentally deleted testAleksey Kladov2021-02-091-0/+13
| | | |
* | | | More precise navigation to parentAleksey Kladov2021-02-093-10/+13
| | | |
* | | | Cleanup testsAleksey Kladov2021-02-093-55/+53
| | | |
* | | | Cleanup testAleksey Kladov2021-02-091-20/+21
| | | |
* | | | Modernize testsAleksey Kladov2021-02-091-197/+169
| |/ / |/| |
* | | Merge #7602bors[bot]2021-02-082-11/+38
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7602: Check for dyn impls in method resolution r=flodiebold a=Veykril Fixes #6777 Co-authored-by: Lukas Wirth <[email protected]>
| * | | Check for dyn impls in method resolutionLukas Wirth2021-02-082-11/+38
| | | |
* | | | Update crateskjeremy2021-02-083-6/+7
| | | | | | | | | | | | | | | | Pulls in https://github.com/rust-lang/chalk/pull/682
* | | | Consolidate `fn load_cargo(…)` parameters into `struct LoadCargoConfig ↵Vincent Esche2021-02-085-31/+70
| | | | | | | | | | | | | | | | { … }`
* | | | Add `config: &CargoConfig` parameter to `fn load_cargo(…)`Vincent Esche2021-02-085-7/+18
| | | |
* | | | chore: swap order of placeholdersGowri2021-02-081-1/+1
| | | |
* | | | ci: update relevant test case expected valuesGowri2021-02-071-0/+7
| | | |
* | | | fix: add for keyword in completion #7588Gowri2021-02-071-0/+1
| |/ / |/| |
* | | AdtDef -> AdtAleksey Kladov2021-02-078-38/+38
| | |
* | | Add a semantic token type for char literalspetr-tik2021-02-052-1/+3
|/ / | | | | | | | | The LSP spec doesn't recognise character literals, so had to extend the suported types to our own custom type
* | Test `super` resolution tooJonas Schievink2021-02-051-0/+2
| |
* | Fix resolution of `self` module within blocksJonas Schievink2021-02-052-7/+17
| |
* | Merge #7572bors[bot]2021-02-053-29/+30
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7572: Add `find_or_create_impl_block` to assist utils r=matklad a=yoshuawuyts This is another continuation of https://github.com/rust-analyzer/rust-analyzer/pull/7562, introducing a small util to either find an `impl` block, or create a new one if none exists. I copied this code from the `generate_new` assist into https://github.com/rust-analyzer/rust-analyzer/pull/7562, and this unifies both into a helper. It doesn't feel super polished in its current state, but my hope is that this is enough of a starting point that it can be expanded on later. For example something that would be useful would be a flag which either returns the index of the start of the block, or the end of the block. Anyway, I hope this is useful. Thanks! Co-authored-by: Yoshua Wuyts <[email protected]>
| * | Add `find_or_create_impl_block` to assist utilsYoshua Wuyts2021-02-053-29/+30
| | |
* | | Merge #7574bors[bot]2021-02-057-17/+8
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7574: Remove various redundant clones r=kjeremy a=yoshuawuyts I noticed when running clippy through RA that there are a few instances where `clone` is called where it's not actually needed. I figured a small patch to remove these might be welcome here. Thanks! Co-authored-by: Yoshua Wuyts <[email protected]>
| * | | Remove redundant clonesYoshua Wuyts2021-02-057-17/+8
| |/ /
* | | Merge #7505bors[bot]2021-02-051-1/+1
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7505: Widen Highlights root range to covering element r=Veykril a=Veykril There have been a few issues about/containing spurious syntax highlighting panics, which all seem to come from the `rust_analyzer::handlers::handle_semantic_tokens_range` request, which I believe this to be the cause of as the text range we want to highlight here is currently potentially smaller than that of the covering element, so we might highlight something that is inside the covering element, but outside of the text range we wish to highlight causing the assert to fail. Unfortunately this isn't really easy to test since I have yet to find a reproducible cause(#7504 doesn't work for me cause I can't seem to checkout the given commit). See #7504, #7298, #7299 and #7416, all of those contain an assertion failure in syntax highlighting, but only in the range request. Co-authored-by: Lukas Wirth <[email protected]>
| * | | Increase Highlights highlight range to covering elementLukas Wirth2021-02-041-1/+1
| | | |
| | | |
| \ \ \
*-. \ \ \ Merge #7570 #7571bors[bot]2021-02-055-163/+162
|\ \ \ \ \ | |_|_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7570: Add doc gen to the `generate_enum_match_method` assist r=yoshuawuyts a=yoshuawuyts Implements a small extension to https://github.com/rust-analyzer/rust-analyzer/pull/7562, generating default comments. I wasn't sure if this would fit the goals of Rust-Analyzer, so I chose to split it into a separate PR. This is especially useful when writing code in a codebase which uses `#![warn(missing_docs)]` lint, as many production-grade libraries do. The comments we're generating here are similar to the ones found on [`Option::is_some`](https://doc.rust-lang.org/std/option/enum.Option.html#method.is_some) and [`Result::is_err`](https://doc.rust-lang.org/std/result/enum.Result.html#method.is_err). I briefly considered only generating these for `pub` types, but they seem small and unobtrusive enough that they're probably useful in the general case. Thanks! ## Example __input__ ```rust pub(crate) enum Variant { Undefined, Minor, // cursor here Major, } ``` __output__ ```rust pub(crate) enum Variant { Undefined, Minor, Major, } impl Variant { /// Returns `true` if the variant is [`Minor`]. pub(crate) fn is_minor(&self) -> bool { matches!(self, Self::Minor) } } ``` ## Future Directions This opens up the path to adding an assist for generating these comments on existing `is_` methods. This would make it both easy to document new code, and update existing code with documentation. 7571: Cleanup decl_check r=Veykril a=Veykril bors r+ Co-authored-by: Yoshua Wuyts <[email protected]> Co-authored-by: Lukas Wirth <[email protected]>
| | * | | Cleanup decl_checkLukas Wirth2021-02-053-162/+152
| | | | |
| * | | | Add doc gen to the `generate_enum_match_method` assistYoshua Wuyts2021-02-052-1/+10
| | | | |
* | | | | Merge #7562bors[bot]2021-02-055-64/+317
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7562: add `generate_enum_match` assist r=matklad a=yoshuawuyts This adds a `generate_enum_match` assist, which generates `is_` variants for enums (e.g. `Option::{is_none,is_some}` in std). This is my first attempt at contributing to Rust-Analyzer, so I'm not sure if I've gotten everything right. Thanks! ## Example **Input** ```rust pub(crate) enum Variant { Undefined, Minor, // cursor here Major, } ``` **Output** ```rust pub(crate) enum Variant { Undefined, Minor, Major, } impl Variant { pub(crate) fn is_minor(&self) -> bool { matches!(self, Self::Minor) } } ``` ## Future Directions I made this as a stepping stone for some of the more involved refactors (e.g. #5944). I'm not sure yet how to create, use, and test `window.showQuickPick`-based asssists in RA. But once that's possible, it'd probably be nice to be able to generate match methods in bulk through the quickpick UI rather than one-by-one: ``` [x] Select enum members to generate methods for. (3 selected) [ OK ] --------------------------------------------------------------------------- [x] Undefined [x] Minor [x] Major ``` Co-authored-by: Yoshua Wuyts <[email protected]> Co-authored-by: Yoshua Wuyts <[email protected]>
| * | | | Move `find_struct_impl` to assist utilsYoshua Wuyts2021-02-053-154/+85
| | | | |
| * | | | add `generate-enum-match` assistYoshua Wuyts2021-02-053-0/+322
| | | | |