8122: Make bare underscore token an Ident rather than Punct in proc-macro r=edwin0cheng a=kevinmehall
In rustc and proc-macro2, a bare `_` token is parsed for procedural macro purposes as `Ident` rather than `Punct` (see https://github.com/rust-lang/rust/pull/48842). This changes rust-analyzer to match rustc's behavior and implementation by handling `_` as an Ident in token trees, but explicitly preventing `$x:ident` from matching it in MBE.
proc macro crate:
```rust
#[proc_macro]
pub fn input(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
dbg!(input)
}
```
test crate:
```rust
test_proc_macro::input!(_);
```
output (rustc):
```rust
[test-proc-macro/src/lib.rs:10] input = TokenStream [
Ident {
ident: "_",
span: #0 bytes(173..174),
},
]
```
output (rust-analyzer before this change):
```rust
[test-proc-macro/src/lib.rs:10] input = TokenStream [
Punct {
ch: '_',
spacing: Joint,
span: 4294967295,
},
]
```
output (rust-analyzer after this change):
```rust
[test-proc-macro/src/lib.rs:10] input = TokenStream [
Ident {
ident: "_",
span: 4294967295,
},
]
```
Co-authored-by: Kevin Mehall <km@kevinmehall.net>
8124: Add basic lifetime completion r=Veykril a=Veykril
This adds basic lifetime completion, basic in the sense that the completions for lifetimes are only shown when the user enters `'` followed by a char. Showing them when nothing is entered is kind of a pain, as we would want them to only show up where they are useful which in turn requires a lot of tree traversal and cursor position checking to verify whether the position is valid for a lifetime. This in itself doesn't seem too bad as usually when you know you want to write a lifetime putting `'` to ask for lifetime completions seems fine.
~~I'll take a look at whether its possible to lift the restriction of having to put a char after `'`.~~ This actually already works so I guess this is the clients responsibility, in which case VSCode doesn't like it.
![TYH9gIlyVo](https://user-images.githubusercontent.com/3757771/111886437-c9b02f80-89cd-11eb-9bee-340f1536b0de.gif)
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
8117: Turn Obligation into something similar to chalk_ir::DomainGoal r=flodiebold a=flodiebold
This includes starting to make use of Chalk's `Cast` trait.
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
8116: Remove WhereClause::Error r=flodiebold a=flodiebold
Chalk doesn't have it, and judging from the removed code, it wasn't useful anyway.
Co-authored-by: Florian Diebold <flodiebold@gmail.com>
8112: Revamp `hir_def` attribute API r=Veykril a=jonas-schievink
This adds `AttrsWithOwner`, which can construct an accurate `AttrSourceMap` without requiring additional information from the caller.
r? @Veykril
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>