Commit graph

9392 commits

Author SHA1 Message Date
Jonas Schievink
3cb7c8b548 Emit diagnostics for unresolved item-level macros 2021-01-05 15:42:43 +01:00
bors[bot]
c8d3d5694b
Merge #7168
7168: Rename expr -> tail_expr r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-01-05 12:51:38 +00:00
Aleksey Kladov
f9707cde68 Rename expr -> tail_expr 2021-01-05 15:51:13 +03:00
bors[bot]
d7013a5934
Merge #7140
7140: Store trait associated items in fst r=matklad a=SomeoneToIgnore

Store imported traits' associated function/methods and constants into `ImportMap.fst` and pefrorm the imports search on them.

This is a first step towards trait autoimport during completion functionality, the way I see it, after this PR, only a few major things are left to be done:

* store all traits' assoc items into fst, not only the ones in scope, as we do now. Any code pointers on how to do this are welcome 😄 
* adjust a few modules in completions crate (`dot.rs`, `qualified_path.rs` at least) to query the import map, reusing the `import_assets` logic heavily

==
With the current import and autoimport implementations, it looks like for a single query, we're either interested in either associated items lookup or in all other `fst` contents lookup, but never both simultaneously.
I would rather not split `fst` in two but add another `Query` parameter to separate those, but let me know if you have any ideas.

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2021-01-05 12:04:35 +00:00
Kirill Bulatov
543e950e30 Move the test mark 2021-01-05 14:03:58 +02:00
bors[bot]
5c10f2f705
Merge #7131
7131: Created an assist for inlining a function's body into its caller r=matklad a=Michael-F-Bryan

This introduces an `inline_function` assist which will convert code like this:

```rust
fn add(a: u32, b: u32) -> u32 { a + b }
fn main() {
    let x = add<|>(1, 2);
}
```

Into something like this:

```rust
fn add(a: u32, b: u32) -> u32 { a + b }
fn main() {
    let x = { 
        let a = 1; 
        let b = 2; 
        a + b 
    };
}
```

Fixes #6863.

Co-authored-by: Michael-F-Bryan <michaelfbryan@gmail.com>
2021-01-05 11:04:58 +00:00
bors[bot]
4bc1ed7d59
Merge #7162
7162: Introduce queries to avoid problems when performing completion for enums with many variants r=matklad a=danielframpton

This change introduces two new queries to compute:
  1) attributes for all variants of an enum, and
  2) attributes for all fields of a variant.

The purpose of this change is to avoid the current n^2 behavior when rendering completion for variants (which prevents completion for enums with large numbers of variants).

Co-authored-by: Daniel Frampton <Daniel.Frampton@microsoft.com>
2021-01-05 10:53:24 +00:00
bors[bot]
18dbb8f5c7
Merge #7164
7164: Allow `#anchor` linking of config options r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-01-05 10:10:45 +00:00
Aleksey Kladov
d7741d1610 Allow #anchor linking of config options 2021-01-05 13:09:06 +03:00
Daniel Frampton
f08109bd2d Introduce new queries to compute
1) the set of attributes for all variants of an enum, and
  2) the set of attributes for all fields of a variant.

This avoids the current n^2 behavior when rendering completion for variants, which
prevents completion for enums with large numbers of variants.
2021-01-04 20:37:50 -08:00
bors[bot]
b99b14311c
Merge #7160
7160: Get `hir::Function` return type r=flodiebold a=arnaudgolfouse

Hello !

As said in #7158, I noticed that `hir::Function` has no direct way of getting the return type, so this PR adds this functionality.

Co-authored-by: Arnaud <arnaud.golfouse@free.fr>
2021-01-04 21:07:50 +00:00
bors[bot]
550c49657e
Merge #7147
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 <marijn@traverseresearch.nl>
2021-01-04 20:36:13 +00:00
Michael-F-Bryan
7b4b4ef026
Created an inline-function assist (fixes #6863) 2021-01-05 04:18:57 +08:00
Kirill Bulatov
27b3b13824 Small helpers 2021-01-04 22:01:35 +02:00
Arnaud
052404565e Remove RetType 2021-01-04 20:34:23 +01:00
Arnaud
2f0969b873 Document hir::Function::ret_type
This adds documentation for the newly added function. It might be a bit too
detailed, but I like it that way :)
2021-01-04 19:14:44 +01:00
Arnaud
a6dc7cf36d Make it possible to retrieve hir::Function's return type
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.
2021-01-04 19:14:44 +01:00
bors[bot]
0708bfeb72
Merge #7159
7159: Refactor mbe to reduce clone and copying r=edwin0cheng a=edwin0cheng

bors r+

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2021-01-04 18:02:54 +00:00
Edwin Cheng
d387bfdc4a Simplify SubtreeTokenSource 2021-01-05 02:00:51 +08:00
Edwin Cheng
af3d75ad2e Refactor TokenBuffer for reduc cloning 2021-01-05 02:00:46 +08:00
Kirill Bulatov
ca42a52051 Code review fixes 2021-01-04 18:33:05 +02:00
kjeremy
f2d1144b4a Update crates 2021-01-04 11:12:42 -05:00
Edwin Cheng
f1ffd14922 Reduce string copying 2021-01-05 00:11:56 +08:00
Kirill Bulatov
ed1ef3ae13 Do not collect trait type aliases 2021-01-04 17:44:27 +02:00
Kirill Bulatov
ec316cb211 Ignore associated items during unqialified path fuzzy completions 2021-01-04 17:44:27 +02:00
Kirill Bulatov
8721574a85 Simplify 2021-01-04 17:44:27 +02:00
Kirill Bulatov
d27dea86b7 Properly check assoc items lookup 2021-01-04 17:44:27 +02:00
Kirill Bulatov
63d83fa385 Add associated data into fst 2021-01-04 17:44:27 +02:00
Kirill Bulatov
1bfc3a50c0 Add a basic test for the trait fuzzy import 2021-01-04 17:44:27 +02:00
bors[bot]
6f8af890ed
Merge #7154
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 <lukastw97@gmail.com>
2021-01-04 15:23:53 +00:00
Lukas Wirth
54b9b03ca2 Show GotoTypeAction for TypeParam 2021-01-04 15:54:45 +01:00
bors[bot]
484df745cc
Merge #7153
7153: rename exrtract_assignment -> pull r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-01-04 14:47:16 +00:00
Lukas Wirth
bd47e140b6 Show GotoTypeAction for ConstParam 2021-01-04 15:19:09 +01:00
Lukas Wirth
cd6426afe5 Show implementations when hovering over SelfType 2021-01-04 14:57:59 +01:00
Aleksey Kladov
46afdb6e9b rename exrtract_assignment -> pull
Vertical code motions are conventionally called "pull up" / "push
down".

"extract" is used for introducing new names.
2021-01-04 16:41:57 +03:00
Lukas Wirth
5804b3fae8 Fix HoverAction::Implementation typo 2021-01-04 14:38:08 +01:00
Lukas Wirth
0ae0909a16 Implement hover for ConstParam 2021-01-04 14:18:31 +01:00
bors[bot]
5771cad451
Merge #7149
7149: Implement hovering for TypeParams r=matklad a=Veykril



Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-01-04 12:57:28 +00:00
Lukas Wirth
47900dd3bc Impl hovering for TypeParams 2021-01-04 12:24:47 +01:00
bors[bot]
ac123ac9e4
Merge #6587
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 😁). 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:

3ae1649c24/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:

3ae1649c24/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 <marijn@traverseresearch.nl>
2021-01-04 11:14:40 +00:00
Marijn Suijten
d33edb4e9c ssr: Allow replacing expressions with statements
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.
2021-01-04 10:55:09 +01:00
bors[bot]
5b86ff3e91
Merge #7113
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 <tekul.hs@gmail.com>
2021-01-03 18:22:07 +00:00
bors[bot]
96ab76ca04
Merge #7138
7138: Support assignment to FieldExpr for extract_assignment assist r=matklad a=Jesse-Bakker



Co-authored-by: Jesse Bakker <github@jessebakker.com>
2021-01-03 18:14:12 +00:00
Jesse Bakker
ba4c42af02 Support assignment to FieldExpr for extract_assignment assist 2021-01-03 15:46:57 +01:00
Jesse Bakker
c7e0c7f43a Upgrade expect-test to 1.1 2021-01-03 14:43:29 +01:00
Marijn Suijten
b87699d97a ssr: Add tests for raw LetStmt matching 2021-01-03 12:05:53 +01:00
Marijn Suijten
42da26e959 parser,syntax: Add separate parser for stmt with optional semicolon
Adjusting `grammar::fragments::stmt` to Optional or Yes will break
original functionality and tests.
2021-01-03 12:05:52 +01:00
Jonas Schievink
85cc3cfec9
Revert "Proper handling $crate and local_inner_macros" 2021-01-03 11:47:57 +01:00
Marijn Suijten
cc081b7e1c syntax,ssr: Implement statement parsing 2021-01-03 11:29:33 +01:00
bors[bot]
354c1daedc
Merge #7136
7136: Fixed nested eager macro bug r=edwin0cheng a=edwin0cheng

fixes #7126 

bors r+

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2021-01-03 09:58:32 +00:00