I fact this rule doesn't work when you put an unnecessary non-null assertion in an expression (as we had `(awat f())!`, but it is useful in other cases...
Takes the output of `syntax_highlighting` and converts it to the proposed semantic tokens API (so far only `textDocument/semanticTokens`. There's a lot of cool stuff we could do with this and the "Inspect Editor Tokens and Scopes" vscode command (pic below) is a cool way to see what has tokens and what doesn't.
Incredibly hacky and could panic due to unwraps, `panic!` etc. To use: run with `code-insiders --enable-proposed-api matklad.rust-analyzer`. If you try to run this without `--enable-proposed-api` it will crash.
bors[bot] [Mon, 24 Feb 2020 23:09:19 +0000 (23:09 +0000)]
Merge #3296
3296: vscode: bump TypeScript version r=matklad a=Veetaha
There is a new [`type-only` import and export feature](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#-type-only-imports-and-export), but let's keep our codebase as simple as it is now.
Also, top-level await :tada:, though with a caveat ))
bors[bot] [Mon, 24 Feb 2020 08:46:07 +0000 (08:46 +0000)]
Merge #3287
3287: Omit type hints for enum variant bind pats r=matklad a=SomeoneToIgnore
After using new hints for a while, I've started to think that hints for enum variants are an overkill.
Another user also shares the same toughts: https://github.com/rust-analyzer/rust-analyzer/issues/3273#issuecomment-590172297
This PR fixes a fleet of errors that rapidly populate the Developer Tools console.
![image](https://user-images.githubusercontent.com/36276403/75097665-0c7aba80-55b6-11ea-8edd-ab5dc5f89e1e.png)
bors[bot] [Sun, 23 Feb 2020 15:17:08 +0000 (15:17 +0000)]
Merge #3282
3282: Add suggestion for failed path resolution r=matklad a=yoshuawuyts
This adds https://github.com/rust-analyzer/rust-analyzer/issues/3245 as an inline help text for when path resolution fails. I saw this error, but also `"Failed to read Cargo metadata from Cargo.toml file"` several times while trying to debug what was failing.
There's probably a more structured way of displaying help texts in VS Code popups. But this would've saved me 20 mins of debugging when installing `rust-analyzer` under WSL today. Thanks!
As suggested in https://github.com/rust-analyzer/rust-analyzer/pull/1606#discussion_r308146363 , there is a simpler way to handle inlay hints after https://github.com/rust-analyzer/rust-analyzer/issues/1618 is closed.
This PR uses the approach suggested (which results in more type hints for various bindings) and also adds more name hints for function parameters.
Examples can be found in the issue:
* https://github.com/rust-analyzer/rust-analyzer/issues/3273#issuecomment-589998051
* https://github.com/rust-analyzer/rust-analyzer/issues/3273#issuecomment-590002839
bors[bot] [Sat, 22 Feb 2020 21:23:06 +0000 (21:23 +0000)]
Merge #3276
3276: Bump crossbeam crates r=kjeremy a=lnicola
This removes a duplicate `autocfg` dependency and was supposed to upgrade `rand`, but it got reverted in `crossbeam` to keep it compiling on pre-2018 edition compilers.
bors[bot] [Sat, 22 Feb 2020 12:31:30 +0000 (12:31 +0000)]
Merge #3263
3263: Implement unsizing coercions using Chalk r=matklad a=flodiebold
These are coercions like `&[T; n] -> &[T]`, which are handled by the `Unsize` and `CoerceUnsized` traits. The impls for `Unsize` are all built in to the compiler and require special handling, so we need to provide them to Chalk.
This adds the following `Unsize` impls:
- `Unsize<[T]> for [T; _]`
- `Unsize<dyn Trait> for T where T: Trait`
- `Unsize<dyn SuperTrait> for dyn SubTrait`
Hence we are still missing the 'unsizing the last field of a generic struct' case.
bors[bot] [Sat, 22 Feb 2020 00:27:09 +0000 (00:27 +0000)]
Merge #3262
3262: Fix handling of const patterns r=matklad a=flodiebold
E.g. in `match x { None => ... }`, `None` is a path pattern (resolving to the
option variant), not a binding. To determine this, we need to try to resolve the
name during lowering. This isn't too hard since we already need to resolve names
for macro expansion anyway (though maybe a bit hacky).
bors[bot] [Sat, 22 Feb 2020 00:19:28 +0000 (00:19 +0000)]
Merge #3244
3244: Rename module references r=matklad a=adamrk
Rename references to a module when the module is renamed. This fixes some missing renames in the existing implementation. For example, renaming the module `foo` to `foo2` in this case:
```rust
mod foo {
pub fn bar() {}
}
fn main() {
foo::bar()
}
```
previously would not change the call `foo::bar()` to `foo2::bar()`, but now it will.
Co-authored-by: adamrk <ark.email@gmail.com> Co-authored-by: Adam Bratschi-Kaye <ark.email@gmail.com>