Commit Graph

16152 Commits

Author SHA1 Message Date
Domantas Jadenkus
5bb4aec05f preserve escape sequences when replacing string with char 2021-03-03 23:20:18 +02:00
Lukas Wirth
1914b7723f Don't complete super unless its valid in paths 2021-03-03 21:58:48 +01:00
bors[bot]
d0fa7abc50
Merge #7863
7863: Prevent renaming SelfType and BuiltinType r=Veykril a=Veykril

bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-03-03 18:49:43 +00:00
Lukas Wirth
e194f2edc4 Prevent renaming SelfType and BuiltinType 2021-03-03 19:48:53 +01:00
Lukas Wirth
183ba483a9 Reorder functions in rename.rs 2021-03-03 19:48:35 +01:00
bors[bot]
607716d213
Merge #7862
7862: Remove incorrect broken test r=jonas-schievink a=jonas-schievink

`Struct` cannot be named at all in that position, since `super` doesn't
resolve to the block scope

bors r+

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2021-03-03 18:11:56 +00:00
Jonas Schievink
1c057dc3c1 Remove incorrect broken test
`Struct` cannot be named at all in that position, since `super` doesn't
resolve to the block scope
2021-03-03 19:10:56 +01:00
bors[bot]
603481f534
Merge #7861
7861: Special-case parenthesized and negated expressions in demorgan assist r=lnicola a=Jesse-Bakker

Fixes #7831 

Co-authored-by: Jesse Bakker <github@jessebakker.com>
2021-03-03 13:29:56 +00:00
Jesse Bakker
1363d60111 Special-case parenthesized and negated expressions in demorgan assist 2021-03-03 13:18:24 +01:00
bors[bot]
2b22fc929a
Merge #7858
7858: Clarify comparison rule r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-03 08:23:38 +00:00
Aleksey Kladov
e15621482c Clarify comparison rule 2021-03-03 11:23:05 +03:00
bors[bot]
3b507aa90f
Merge #7853
7853: Update lexer r=kjeremy a=kjeremy



Co-authored-by: kjeremy <kjeremy@gmail.com>
2021-03-02 20:34:24 +00:00
kjeremy
41d1b4cd26 Update lexer 2021-03-02 15:33:22 -05:00
bors[bot]
0f8ee46edc
Merge #7852
7852: bump once_cell r=kjeremy a=kjeremy



Co-authored-by: kjeremy <kjeremy@gmail.com>
2021-03-02 17:42:20 +00:00
kjeremy
58697afca4 bump once_cell 2021-03-02 12:41:20 -05:00
bors[bot]
0ce539ec96
Merge #7851
7851: Compress tests r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-02 15:46:02 +00:00
Aleksey Kladov
8471da62e6 Compress tests 2021-03-02 18:35:52 +03:00
bors[bot]
04abf80b5f
Merge #7824
7824: feat: add type ascription r=matklad a=conradludgate

Based on this conversation: https://twitter.com/rust_analyzer/status/1366092401278922757
Built off of `add_turbo_fish`, finds the current `let` statement, checks if it has type/turbofish already and checks if the rhs function is generic.

There's one case I couldn't figure out how to implement that would be nice:

```rust
#[test]
fn add_type_ascription_function_result() {
    check_assist(
        add_type_ascription,
        r#"
fn make<T>() -> Result<T, &'static str> {}
fn main() {
    let x = make()$0;
}
"#,
        r#"
fn make<T>() -> Result<T, &'static str> {}
fn main() {
    let x: Result<${0:_}, &'static str> = make();
}
"#,
    );
}
```

The `Function::ret_type` fn wasn't returning anything much useful so I'm not sure how to identity such scenarios just yet

Co-authored-by: Conrad Ludgate <conradludgate@gmail.com>
2021-03-02 15:28:41 +00:00
Conrad Ludgate
2c3c728e0a
chore: remove redundant tests 2021-03-02 15:26:36 +00:00
Conrad Ludgate
9a49735d30
chore: remove deleted file path 2021-03-02 15:02:47 +00:00
Conrad Ludgate
b41e73ac12
chore: codegen 2021-03-02 14:55:37 +00:00
Conrad Ludgate
d4fad2be8d
refactor: re-use add_turbo_fish function 2021-03-02 14:30:11 +00:00
Conrad Ludgate
4a36129c7a
chore: fmt + docs 2021-03-02 14:30:10 +00:00
Conrad Ludgate
218390b9fb
chore: rename var 2021-03-02 14:30:10 +00:00
Conrad Ludgate
705712993f
feat: add type ascription assist 2021-03-02 14:30:10 +00:00
bors[bot]
f8152171bb
Merge #7850
7850: Don't add space when joining line to opening quote r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-02 14:19:45 +00:00
Aleksey Kladov
e2fc9411f1 Don't add space when joining line to opening quote 2021-03-02 17:18:45 +03:00
bors[bot]
8e7c42d1be
Merge #7849
7849: Fix xflags fallout r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-02 13:54:56 +00:00
Aleksey Kladov
84483f672f Fix xflags fallout
https://github.com/rust-analyzer/rust-analyzer/pull/7847#issuecomment-788920830
2021-03-02 16:50:03 +03:00
bors[bot]
6a585c6ee2
Merge #7795
7795: Show docs on hover for keywords and primitives r=matklad a=Veykril

![lAWFadkziX](https://user-images.githubusercontent.com/3757771/109369534-eeb4f500-789c-11eb-8f2b-2f9c4e129de3.gif)

It's a bit annoying that this requires the `SyntaxNode` and `Semantics` to be pulled through `hover_for_definition` just so we can get the `std` crate but I couldn't think of a better way.

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-03-02 13:46:50 +00:00
Lukas Wirth
8d305680e6 Show docs on hover for keywords and primitives 2021-03-02 14:41:01 +01:00
bors[bot]
657ec3616f
Merge #7335 #7691
7335: added region folding r=matklad a=LucianoBestia

Regions of code that you'd like to be folded can be wrapped with  `// #region` and `// #endregion` line comments.
This is called "Region Folding". It is originally available for many languages in VSCode. But Rust-analyzer has its own folding function and this is missing.
With this Pull Request I am suggesting a simple solution. 
The regions are a special kind of comments, so I added a bit of code in the comment folding function.
The regex to match are: `^\s*//\s*#?region\b` and `^\s*//\s*#?endregion\b`.
The number of space characters is not important. There is an optional # character. The line can end with a name of the region.
Example:
```rust
// 1. some normal comment
// region: test
// 2. some normal comment
calling_function(x,y);
// endregion: test
```
I added a test for this new functionality in `folding_ranges.rs`.
Please, take a look and comment. 
I found that these exact regexes are already present in the file `language-configuration.json`, but I don't find a way to read this configuration. So my regex is hardcoded in the code.

7691: Suggest name in extract variable r=matklad a=cpud36

Generate better default name in extract variable assist as was mentioned in issue #1587

# Currently supported
(in order of declining precedence)
1. Expr is argument to a function; use corresponding parameter name
2. Expr is result of a function or method call; use this function/method's name
3. Use expr type name (if possible)
4. Fallback to `var_name` otherwise

# Showcase

![generate_derive_variable_name_from_method](https://user-images.githubusercontent.com/4218373/108013304-72105400-701c-11eb-9f13-eec52e74d0cc.gif)
![generate_derive_variable_name_from_param](https://user-images.githubusercontent.com/4218373/108013305-72a8ea80-701c-11eb-957e-2214f7f005de.gif)

# Questions

* Should we more aggressively strip known types? E.g. we already strip `&T -> T`; should we strip `Option<T> -> T`, `Result<T, E> -> T`, and others?
* Integers and floats use `var_name` by default. Should we introduce a name, like `i`, `f` etc?
* Can we return a list and suggest a name when renaming(like IntelliJ does)?
* Should we add counters to remove duplicate variables? E.g. `type`, `type1`, type2`, etc.


Co-authored-by: Luciano Bestia <LucianoBestia@gmail.com>
Co-authored-by: Luciano <31509965+LucianoBestia@users.noreply.github.com>
Co-authored-by: Vladyslav Katasonov <cpud47@gmail.com>
2021-03-02 13:32:06 +00:00
Vladyslav Katasonov
7066e6b362 strip useless methods, and unary ops in suggest_name 2021-03-02 16:25:24 +03:00
Vladyslav Katasonov
afc68277f6 pull out suggest_name::* to utils; enchance heuristics 2021-03-02 16:25:22 +03:00
Vladyslav Katasonov
f915ab79fa suggest parameter name before function name 2021-03-02 16:23:00 +03:00
Vladyslav Katasonov
3b75dda745 try to suggest name when extracting variable 2021-03-02 16:23:00 +03:00
bors[bot]
91bf5fa827
Merge #7513
7513: NFA parser for mbe matcher r=matklad a=edwin0cheng

Almost straight porting from rustc one, but a little bit slow :(

```
rust-analyzer analysis-stats -q . 
```

From:
```log
Database loaded:     636.11ms, 277minstr
  crates: 36, mods: 594, decls: 11527, fns: 9017
Item Collection:     10.99s, 60ginstr
  exprs: 249618, ??ty: 2699 (1%), ?ty: 2101 (0%), !ty: 932
Inference:           28.94s, 123ginstr
Total:               39.93s, 184ginstr
```

To:
```log
Database loaded:     630.90ms, 277minstr
  crates: 36, mods: 594, decls: 11528, fns: 9018
Item Collection:     13.70s, 77ginstr
  exprs: 249482, ??ty: 2699 (1%), ?ty: 2101 (0%), !ty: 932
Inference:           30.27s, 133ginstr
Total:               43.97s, 211ginstr
```

Fixes #4777

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2021-03-02 13:20:47 +00:00
bors[bot]
8eee9149e8
Merge #7848
7848: Bump cargo_metadata r=matklad a=lnicola



Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2021-03-02 12:31:15 +00:00
Laurențiu Nicola
b20708f6ee Bump cargo_metadata 2021-03-02 14:27:29 +02:00
bors[bot]
f5c25f6b83
Merge #7837
7837: Add more information to VSCode extenstion README r=matklad a=IceSentry

A lot of these are duplicated from the documentation or main README. While it's unfortunate to have duplicated information, the current VSCode page is very barebones and doesn't offer much confidence. 

This updated README offers a few more links and follows a structure similar to the official rust extension and other popular vscode extensions. The additions are, as much as possible specific to the vscode extension and not rust-analyzer as a LSP.

The note about not using the official extension is also right there at the top because that's a common issue people have when trying it out. 

I added the sponsor section since it's common in other extensions README, but I'm not sure if it's necessary

Co-authored-by: Charles Giguere <IceSentry@users.noreply.github.com>
Co-authored-by: cgiguere <c.giguere42@gmail.com>
2021-03-02 12:19:50 +00:00
bors[bot]
8d2b0e6064
Merge #7847
7847: Switch from pico-args to xflags r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-02 12:09:51 +00:00
Aleksey Kladov
3038579c8e Switch from pico-args to xflags 2021-03-02 15:08:20 +03:00
bors[bot]
61c73caa30
Merge #7836
7836: Check for path dev-dependencies with a version number r=lnicola a=lnicola

Closes https://github.com/rust-analyzer/rust-analyzer/pull/7828#issuecomment-788174522.

This looks a bit ugly, but at least fixes an issues where we missed target-specific dependencies.

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2021-03-02 08:38:25 +00:00
bors[bot]
2183d65c97
Merge #7777
7777: Implement line<->block comment assist r=Veykril a=djrenren

Fixes: https://github.com/rust-analyzer/rust-analyzer/issues/6515

Co-authored-by: John Renner <john@jrenner.net>
2021-03-02 08:04:38 +00:00
bors[bot]
b7fa6dfabc
Merge #7844
7844: Fix ProcMacroClient dropped too early in cli r=edwin0cheng a=edwin0cheng

Fix #7843

bors r+

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
2021-03-02 05:20:32 +00:00
Edwin Cheng
877521325f Fix ProcMacroClient dropped too early in cli 2021-03-02 13:14:05 +08:00
bors[bot]
477c1ac105
Merge #7827
7827: Fix proc macro TokenStream::from_str token ids r=vlad20012 a=vlad20012

To be honest, I don't know what it changes from a user perspective.

Internally, this fixes spans (token ids) of a `TokenStream` parsed from a string:

```rust
#[proc_macro_derive(FooDerive)]
pub fn foo_derive(item: TokenStream) -> TokenStream {
    "fn foo() {}".parse().unwrap()
}
```

Previously, `TokenStream` was constructed from tokens with incremental ids (that conflicted with call-site tokens). Now they are `-1`.

Co-authored-by: vlad20012 <beskvlad@gmail.com>
2021-03-02 00:01:14 +00:00
cgiguere
3df8df23c6 clean uo rustup link 2021-03-01 15:19:30 -05:00
cgiguere
0b1981baf5 add sponsor links 2021-03-01 15:07:36 -05:00
bors[bot]
10a57b8109
Merge #7835
7835: Use cli parser with auto-generated help r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-01 19:57:25 +00:00