Commit Graph

15443 Commits

Author SHA1 Message Date
Duong Do Minh Chau ea835fc800 Update the test to match the change 2021-03-09 15:48:53 +07:00
Duong Do Minh Chau 5fc91058ff Add completion to turn x.err into Err(x) 2021-03-09 15:36:41 +07:00
bors[bot] 3fdf26a6fc Merge #7898
7898: generate_function assist: infer return type r=JoshMcguigan a=JoshMcguigan

This PR makes two changes to the generate function assist:

1. Attempt to infer an appropriate return type for the generated function
2. If a return type is inferred, and that return type is not unit, don't render the snippet

```rust
fn main() {
    let x: u32 = foo$0();
    //              ^^^ trigger the assist to generate this function
}

// BEFORE
fn foo() ${0:-> ()} {
    todo!()
}

// AFTER (only change 1)
fn foo() ${0:-> u32} {
    todo!()
}

// AFTER (change  1 and 2, note the lack of snippet around the return type)
fn foo() -> u32 {
    todo!()
}
```

These changes are made as two commits, in case we want to omit change 2. I personally feel like it is a nice change, but I could understand there being some opposition.

#### Pros of change 2
If we are able to infer a return type, and especially if that return type is not the unit type, the return type is almost as likely to be correct as the argument names/types. I think this becomes even more true as people learn how this feature works.

#### Cons of change 2

We could never be as confident about the return type as we are about the function argument types, so it is more likely a user will want to change that. Plus it is a confusing UX to sometimes have the cursor highlight the return type after triggering this assist and sometimes not have that happen.

#### Why omit unit type?

The assumption is that if we infer the return type as unit, it is likely just because of the current structure of the code rather than that actually being the desired return type. However, this is obviously just a heuristic and will sometimes be wrong. But being wrong here just means falling back to the exact behavior that existed before this PR.



Co-authored-by: Josh Mcguigan <joshmcg88@gmail.com>
2021-03-08 22:51:04 +00:00
Josh Mcguigan b275e60905 generate_function assist don't render snippet if ret type inferred 2021-03-08 14:38:36 -08:00
bors[bot] c48478621f Merge #7924
7924: Use upstream cov-mark r=matklad a=lnicola

Closes #7922

But doesn't remove any dependency, unfortunately.

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
2021-03-08 21:19:31 +00:00
Laurențiu Nicola fc9eed4836 Use upstream cov-mark 2021-03-08 22:19:44 +02:00
bors[bot] c5189a22cc Merge #7923
7923: Remove useless code_model indirection r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-08 19:16:05 +00:00
Aleksey Kladov 9faf8dd69a Hygiene is an internal implementation detail of the compiler 2021-03-08 22:14:52 +03:00
Aleksey Kladov e346a9c5e1 Remove useless code_model indirection 2021-03-08 22:08:30 +03:00
bors[bot] 8b7e82b012 Merge #7918
7918: Generalize file ensuring infrastructure r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-08 18:52:08 +00:00
Aleksey Kladov d2bb2268d3 Minor 2021-03-08 21:49:25 +03:00
Aleksey Kladov c0943f84fd Cleanup the error message 2021-03-08 21:45:43 +03:00
Aleksey Kladov e89c0e3961 Remove now dead code 2021-03-08 21:45:43 +03:00
Aleksey Kladov 095b9110b5 Unused params 2021-03-08 21:45:43 +03:00
Aleksey Kladov 1eb61203b7 Make code generation just work
Contributors don't need to learn about `cargo xtask codegen` if `cargo
test` just does the right thing.
2021-03-08 21:45:37 +03:00
Aleksey Kladov abb6b8f14c Use the same name in xtask and test utils 2021-03-08 21:45:06 +03:00
Aleksey Kladov b6ba0dec0c Generalize file ensuring infrastructure 2021-03-08 21:45:06 +03:00
Aleksey Kladov 0f6f458cc1 Make working with codegen less annoying
We probably should look into removing `xtask codegen` altogether. The
test workflow works perfectly for package.json config.

There are two things preventing that:

* Lint completions are generated on demand.
* Docs are not committed to the repository.
2021-03-08 21:45:06 +03:00
bors[bot] 071dde1c1d Merge #7921
7921: Don't punish every crate with serde-json r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-08 17:37:43 +00:00
Aleksey Kladov da73c93c7f Don't punish every crate with serde-json 2021-03-08 20:37:20 +03:00
bors[bot] d57c9f7980 Merge #7891
7891: Improve handling of rustc_private r=matklad a=DJMcNab

This PR changes how `rust-analyzer` handles `rustc_private`. In particular, packages now must opt-in to using `rustc_private` in `Cargo.toml`, by adding:
```toml
[package.metadata.rust-analyzer]
rustc_private=true
```

This means that depending on crates which also use `rustc_private` will be significantly improved, since their dependencies on the `rustc_private` crates will be resolved properly.

A similar approach could be used in #6714 to allow annotating that your package uses the `test` crate, although I have not yet handled that in this PR.

Additionally, we now only index the crates which are transitive dependencies of `rustc_driver` in the `rustcSource` directory. This should not cause any change in behaviour when using `rustcSource: "discover"`, as the source used then will only be a partial clone. However, if `rustcSource` pointing at a local checkout of rustc, this should significantly improve the memory usage and lower indexing time. This is because we avoids indexing all crates in `src/tools/`, which includes `rust-analyzer` itself.

Furthermore, we also prefer named dependencies over dependencies from `rustcSource`. This ensures that feature resolution for crates which are depended on by both `rustc` and your crate uses the correct set for analysing your crate.

See also [introductory zulip stream](https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/Fixed.20crate.20graphs.20and.20optional.20builtin.20crates/near/229086673)

I have tested this in [priroda](https://github.com/oli-obk/priroda/), and it provides a significant improvement to the development experience (once I give `miri` the required data in `Cargo.toml`)

Todo:
- [ ] Documentation

This is ready to review, and I will add documentation if this would be accepted (or if I get time to do so anyway)

Co-authored-by: Daniel McNab <36049421+DJMcNab@users.noreply.github.com>
2021-03-08 16:51:20 +00:00
Daniel McNab 20007fd3a8 Document rustc_private in metadata 2021-03-08 16:47:40 +00:00
Daniel McNab d0a51d710e Never run cargo check on the rustc source 2021-03-08 16:42:18 +00:00
Daniel McNab d5d406fa78 Only show directory name 2021-03-08 16:41:40 +00:00
Daniel McNab bbecea03fd Revert "Support disabling rustc build scripts"
This reverts commit ddce6bb282.
2021-03-08 16:37:52 +00:00
bors[bot] f2b8df17db Merge #7920
7920: Cargo update r=kjeremy a=kjeremy

Chalk changes just a version # bump. There are no actual commits.

Co-authored-by: kjeremy <kjeremy@gmail.com>
2021-03-08 15:40:48 +00:00
kjeremy e13ac349b5 Cargo update
Chalk changes just a version # bump. There are no actual commits.
2021-03-08 10:39:11 -05:00
bors[bot] 64e95eee3a Merge #7914
7914: Make code completion "just work" in more cases r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-08 11:58:39 +00:00
Aleksey Kladov c7b5d6be4c Make code completion "just work" in more cases 2021-03-08 14:57:56 +03:00
bors[bot] 6952a3b446 Merge #7912
7912: Dedupe import map results r=matklad a=SomeoneToIgnore

While debugging https://github.com/rust-analyzer/rust-analyzer/issues/7902, I've found that there are some duplicates are produced during the external dependencies lookup.

I've spotted at least some of the `indexed_value.value` duplicated when typed `Arc` and requested the completions for that, so I've also deduped the `IndexedValue`'s to avoid unnecessary computations.

This helps to show `Arc` in the completion suggestions in a zero dependency project and in `hir` module, but we loose it again in the `ide` module.

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2021-03-08 11:15:17 +00:00
Kirill Bulatov 128a6a4ec0 Do not process indexed values more than once 2021-03-08 12:06:15 +02:00
Kirill Bulatov 8f17f3d594 Deduplicate search_dependencies results 2021-03-08 11:48:51 +02:00
bors[bot] 13982e4ee4 Merge #7901
7901: Make extension respect http proxy settings r=matklad a=kamyuentse

This patch makes vscode extension respect proxy settings when fetching release metadata and rust-analyzer binary.

Co-authored-by: Kam Y. Tse <kevin.xjy@gmail.com>
2021-03-08 09:41:21 +00:00
Daniel McNab ddce6bb282 Support disabling rustc build scripts 2021-03-08 09:05:19 +00:00
Daniel McNab 877f745551 Fix the comment
It's worse than I thought...
2021-03-07 13:13:54 +00:00
Daniel McNab 419b5a1bee Extract the large nested block into a function
Also add some more detailed comments
Extract into function deleted the previous comments
2021-03-07 12:59:15 +00:00
Daniel McNab 9246df669a Require opt in to rustc_private
This gives the advantage that

A future extension would be to check for `feature(rustc_private)` instead
2021-03-07 12:24:20 +00:00
Daniel McNab 71a254c1a1 Don't double analyse the same crate 2021-03-07 11:17:14 +00:00
Kam Y. Tse 77b7c96aea Make extension respect http proxy settings 2021-03-07 18:21:48 +08:00
Daniel McNab b46605cfcd Update crate graph to only use subcrates of rustc_driver 2021-03-07 10:18:01 +00:00
bors[bot] d54e1157b6 Merge #7889
7889: Make group imports configurable r=lnicola a=asv1



Co-authored-by: asv <asv7c2@gmail.com>
2021-03-07 08:24:02 +00:00
asv 96fc01a30b Make group imports configurable 2021-03-07 10:15:17 +02:00
bors[bot] 708ec9821f Merge #7895
7895: ⬆️ xflags r=matklad a=matklad

bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2021-03-07 08:13:27 +00:00
Aleksey Kladov 0296cd590e ⬆️ xflags 2021-03-07 11:12:59 +03:00
bors[bot] f0b7c02f16 Merge #7892
7892: Fix TokenStream::from_str for input consisting of a single group with delimiter r=edwin0cheng a=kevinmehall

TokenStream holds a `tt::Subtree` but assumes its `delimiter` is always `None`. In particular, the iterator implementation iterates over the inner `token_trees` and ignores the `delimiter`.

However, `TokenStream::from_str` violated this assumption when the input consists of a single group by producing a Subtree with an outer delimiter, which was ignored as seen by a procedural macro.

`tt::Subtree` is just `pub delimiter: Option<Delimiter>, pub token_trees: Vec<TokenTree>`, so a Subtree that is statically guaranteed not to have a delimiter is just `Vec<TokenTree>`.

Fixes #7810
Fixes #7875

Co-authored-by: Kevin Mehall <km@kevinmehall.net>
2021-03-07 00:32:56 +00:00
bors[bot] 07a54f7ae4 Merge #7899
7899: Rename a few `crate_def_map`s to `def_map` r=jonas-schievink a=jonas-schievink

These could all be block `DefMap`s instead of crate-level `DefMap`s

bors r+

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
2021-03-06 23:21:49 +00:00
Jonas Schievink 6750c11df3 Rename a few crate_def_maps to def_map
These could all be block `DefMap`s instead of crate-level `DefMap`s
2021-03-07 00:20:13 +01:00
Josh Mcguigan d645b81b28 generate_function assist infer return type 2021-03-06 14:28:54 -08:00
bors[bot] c44575b485 Merge #7896
7896: Only replace quotes in replace_string_with_char assist r=Veykril a=Veykril

bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2021-03-06 20:22:36 +00:00
Lukas Wirth 1a276f8959 Only replace quotes in replace_string_with_char assist 2021-03-06 21:21:18 +01:00