aboutsummaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | | | Make it possible to retrieve `hir::Function`'s return typeArnaud2021-01-041-0/+23
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | This is done by adding a `ret_type` method to `hir::Function`. I followed `assoc_fn_params` convention by creating a new `RetType` type, that contains the actual return type accessible via a `ty` method.
* | | | | Merge #7147bors[bot]2021-01-042-3/+60
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7147: ssr: Allow replacing expressions with statements r=davidlattimore a=MarijnS95 Depends on #6587 Until that is merged, the diff is https://github.com/MarijnS95/rust-analyzer/compare/stmt..replace-expr-with-stmt --- Now that statements can be matched and replaced (#6587) some usecases require expressions to be replaced with statements as well. This happens when something that can ambiguously be an expression or statement like `if` and loop blocks appear in the last position of a block, as trailing expression. In this case a replacement pattern of the form `if foo(){$a();}==>>$a();` will only substitute `if` blocks in the list of statements but not if they (implicitly) end up in the trailing expression, where they are not wrapped by an EXPR_STMT (but the pattern and template are, as parsing only succeeds for the `stmt ==>> stmt` case). Instead of adding two rules that match an expression - and emit duplicate matching errors - allow the template for expressions to be a statement if it fails to parse as an expression. --- Another gross change that does not seem to break any tests currently, but perhaps a safeguard should be added to only allow this kind of replacement in blocks by "pushing" the replacement template to the statement list and clearing the trailing expression? CC @davidlattimore Co-authored-by: Marijn Suijten <[email protected]>
| * | | | ssr: Allow replacing expressions with statementsMarijn Suijten2021-01-042-3/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now that statements can be matched and replaced (#6587) some usecases require expressions to be replaced with statements as well. This happens when something that can ambiguously be an expression or statement like `if` and loop blocks appear in the last position of a block, as trailing expression. In this case a replacement pattern of the form `if foo(){$a();}==>>$a();` will only substitute `if` blocks in the list of statements but not if they (implicitly) end up in the trailing expression, where they are not wrapped by an EXPR_STMT (but the pattern and template are, as parsing only succeeds for the `stmt ==>> stmt` case). Instead of adding two rules that match an expression - and emit duplicate matching errors - allow the template for expressions to be a statement if it fails to parse as an expression.
* | | | | Merge #7159bors[bot]2021-01-045-152/+172
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7159: Refactor mbe to reduce clone and copying r=edwin0cheng a=edwin0cheng bors r+ Co-authored-by: Edwin Cheng <[email protected]>
| * | | | | Simplify SubtreeTokenSourceEdwin Cheng2021-01-041-88/+60
| | | | | |
| * | | | | Refactor TokenBuffer for reduc cloningEdwin Cheng2021-01-045-53/+99
| | | | | |
| * | | | | Reduce string copyingEdwin Cheng2021-01-041-14/+16
| | |/ / / | |/| | |
* | | | | Update crateskjeremy2021-01-042-4/+4
| |_|/ / |/| | |
* | | | Merge #7154bors[bot]2021-01-042-45/+150
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7154: Show goto type actions for Const and TypeParams r=matklad a=Veykril Shows goto type actions for type parameters: ![Code_6hn3rowu9M](https://user-images.githubusercontent.com/3757771/103547890-42aaeb00-4ea5-11eb-8ac7-f166869af5f8.png) Shows goto type actions for const parameters: ![Code_8UFCcbZL3z](https://user-images.githubusercontent.com/3757771/103547891-43438180-4ea5-11eb-91e8-50681e4d831e.png) Also shows implementations for `Self`: ![Code_eQj1pWfser](https://user-images.githubusercontent.com/3757771/103547892-43438180-4ea5-11eb-9122-461f2e0fdd01.png) Co-authored-by: Lukas Wirth <[email protected]>
| * | | | Show GotoTypeAction for TypeParamLukas Wirth2021-01-042-17/+66
| | | | |
| * | | | Show GotoTypeAction for ConstParamLukas Wirth2021-01-042-37/+72
| | | | |
| * | | | Show implementations when hovering over SelfTypeLukas Wirth2021-01-041-8/+29
| | | | |
* | | | | Merge #7153bors[bot]2021-01-043-60/+60
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7153: rename exrtract_assignment -> pull r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | rename exrtract_assignment -> pullAleksey Kladov2021-01-043-60/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Vertical code motions are conventionally called "pull up" / "push down". "extract" is used for introducing new names.
* | | | | Fix HoverAction::Implementation typoLukas Wirth2021-01-042-11/+12
| | | | |
* | | | | Implement hover for ConstParamLukas Wirth2021-01-042-4/+29
|/ / / /
* | | | Merge #7149bors[bot]2021-01-043-7/+67
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7149: Implement hovering for TypeParams r=matklad a=Veykril Co-authored-by: Lukas Wirth <[email protected]>
| * | | | Impl hovering for TypeParamsLukas Wirth2021-01-043-7/+67
| |/ / /
* | | | Merge #6587bors[bot]2021-01-0434-0/+278
|\ \ \ \ | |/ / / |/| / / | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 6587: SSR: Support statement matching and replacing r=davidlattimore a=MarijnS95 For #3186 Hi! This is a smaller initial patchset that came up while working on support for statement lists (and my first time working on RA :grin:). It has me stuck on trailing semicolons for which I hope to receive some feedback. Matching (and replacing) `let` bindings with a trailing semicolon works fine, but trying to omit these (to make patterns more ergonomic) turns out more complex than expected. The "optional trailing semicolon solution" implemented in this PR is ugly because `Matcher::attempt_match_token` should only consume a trailing `;` when parsing `let` bindings to prevent other code from breaking. That at the same time has a nasty side-effect of `;` ending up in the matched code: any replacements on that should include the trailing semicolon as well even if it was not in the pattern. A better example is in the tests: https://github.com/rust-analyzer/rust-analyzer/blob/3ae1649c24a689473b874c331f5f176e5839978e/crates/ssr/src/tests.rs#L178-L184 The end result to achieve is (I guess) allowing replacement of let bindings without trailing semicolon like `let x = $a ==>> let x = 1` (but including them on both sides is still fine), and should make replacement in a macro call (where `foo!(let a = 2;)` for a `$x:stmt` is invalid syntax) possible as well. That should allow to enable/fix these tests: https://github.com/rust-analyzer/rust-analyzer/blob/3ae1649c24a689473b874c331f5f176e5839978e/crates/ssr/src/tests.rs#L201-L214 A possible MVP of this PR might be to drop this optional `;' handling entirely and only allow an SSR pattern/template with semicolons on either side. Co-authored-by: Marijn Suijten <[email protected]>
| * | ssr: Add tests for raw LetStmt matchingMarijn Suijten2021-01-031-0/+44
| | |
| * | parser,syntax: Add separate parser for stmt with optional semicolonMarijn Suijten2021-01-0315-5/+72
| | | | | | | | | | | | | | | Adjusting `grammar::fragments::stmt` to Optional or Yes will break original functionality and tests.
| * | syntax,ssr: Implement statement parsingMarijn Suijten2021-01-0331-0/+167
| | |
* | | Merge #7113bors[bot]2021-01-031-0/+4
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7113: Manual updates r=matklad a=tekul Add some details on how to build the manual and some clarification on how to deal with "proc macro2 warnings. For context, this arose from [this question](https://users.rust-lang.org/t/how-to-disable-rust-analyzer-proc-macro-warnings-in-neovim/53150) on users.rust-lang.org. Co-authored-by: Luke Taylor <[email protected]>
| * | | Expand doc on dealing with "proc macro not expanded"Luke Taylor2021-01-011-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | Added the error message to the doc for the UnresolvedProcMacro diagnostic, explaining that either enabling the procMacro setting or disabling this diagnostic should make the warnings go away.
* | | | Merge #7138bors[bot]2021-01-031-14/+89
|\ \ \ \ | |_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | 7138: Support assignment to FieldExpr for extract_assignment assist r=matklad a=Jesse-Bakker Co-authored-by: Jesse Bakker <[email protected]>
| * | | Support assignment to FieldExpr for extract_assignment assistJesse Bakker2021-01-031-14/+89
| | | |
* | | | Upgrade expect-test to 1.1Jesse Bakker2021-01-039-9/+9
|/ / /
* | / Revert "Proper handling $crate and local_inner_macros"Jonas Schievink2021-01-037-176/+52
| |/ |/|
* | Merge #7136bors[bot]2021-01-032-0/+52
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 7136: Fixed nested eager macro bug r=edwin0cheng a=edwin0cheng fixes #7126 bors r+ Co-authored-by: Edwin Cheng <[email protected]>
| * | Fixed nested eager macro bugEdwin Cheng2021-01-032-0/+52
| | |
* | | Merge #7068bors[bot]2021-01-036-1/+63
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7068: Add VSCode command to view the hir of a function body r=theotherphil a=theotherphil Will fix https://github.com/rust-analyzer/rust-analyzer/issues/7061. Very rough initial version just to work out where I needed to wire everything up. @matklad would you be happy merging a hir visualiser of some kind? If so, do you have any thoughts on what you'd like it show, and how? I've spent very little time on this thus far, so I'm fine with throwing away the contents of this PR, but I want to avoid taking the time to make this more polished/interactive/useful only to discover that no-one else has any interest in this functionality. ![image](https://user-images.githubusercontent.com/1974256/103236081-bb58f700-493b-11eb-9d12-55ae1b870f8f.png) Co-authored-by: Phil Ellison <[email protected]>
| * | | Use stdx::format_to instead of writelnPhil Ellison2021-01-031-4/+4
| | | |
| * | | Address review suggestion, fix tidy testsPhil Ellison2021-01-012-22/+20
| | | |
| * | | Initial implementation of view-hir commandPhil Ellison2020-12-286-1/+65
| | | |
* | | | Merge #7115bors[bot]2021-01-0320-225/+239
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 7115: Migrate HasSource::source to return Option r=matklad a=nick96 I've made a start on fixing #6913 based on the provided work plan, migrating `HasSource::source` to return an `Option`. The simple cases are migrated but there are a few that I'm unsure exactly how they should be handled: - Logging the processing of functions in `AnalysisStatsCmd::run`: In verbose mode it includes the path to the module containing the function and the syntax range. I've handled this with an if-let but would it be better to blow up here with `expect`? I'm not 100% on the code paths but if we're processing a function definition then the source should exist. I've handled `source()` in all code paths as `None` being a valid return value but are there some cases where we should just blow up? Also, all I've done is bubble up the returned `None`s, there may be some places where we can recover and still provide something. Co-authored-by: Nick Spain <[email protected]> Co-authored-by: Nick Spain <[email protected]>
| * | | | Fix ConstParam HasSource impl and implement TryToNav not NavNick Spain2021-01-022-8/+8
| | | | |
| * | | | Remove old_source now we've fully migratedNick Spain2021-01-021-68/+0
| | | | | | | | | | | | | | | | | | | | Fixes #6913
| * | | | Handle case where detail doesn't exist without giving up on completionNick Spain2021-01-021-1/+1
| | | | | | | | | | | | | | | Co-authored-by: Aleksey Kladov <[email protected]>
| * | | | Remove source_old from adding const and function implsNick Spain2021-01-021-23/+26
| | | | |
| * | | | Make the result of Const, FunctionRender and TypeAliasRender constructors ↵Nick Spain2021-01-025-20/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | optional They use source() which now returns an Option so they need to too.
| * | | | Move impls of ToNav that use source() to TryToNavNick Spain2021-01-025-69/+64
| | | | |
| * | | | Handle missing source in target_data_for_defNick Spain2021-01-021-13/+12
| | | | |
| * | | | Handle missing source in filter_assoc_itemsNick Spain2021-01-021-7/+8
| | | | |
| * | | | Go back to use of source_old() in offset_target_and_file_id as it's not as ↵Nick Spain2021-01-021-1/+2
| | | | | | | | | | | | | | | | | | | | simple as I thought
| * | | | Fix type error with .and_thenNick Spain2021-01-021-15/+14
| | | | |
| * | | | Handle not finding range in Definition::search_scopeNick Spain2021-01-021-12/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `LifetimeParam` and `Local` variants use `source()` to find their range. Now that `source()` returns an `Option` we need to handle the `None` case.
| * | | | source_old -> source for cases that can be handled by simple bubblingNick Spain2021-01-025-13/+10
| | | | |
| * | | | Only log path and syntax range when processing function if source existsNick Spain2021-01-021-6/+6
| | | | |
| * | | | HasSource::source_old -> HasSource::source for places where proc-macros were ↵Nick Spain2021-01-024-42/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | special cased In #6901 some special case handling for proc-macros was introduced to prevent panicing as they have no AST. Now the new HasSource::source method is used that returns an option. Generally this was a pretty trivial change, the only thing of much interest is that `hir::MacroDef` now implements `TryToNav` not `ToNav` as this allows us to handle `HasSource::source` now returning an option.
| * | | | Mark HasSource::source_old as deprecated but allow at all call sitesNick Spain2021-01-0215-4/+35
| | | | |