You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Inlay hints can have text edits which can be provided to "apply" the inlay hint when double clicked on. I noticed this recently in the python language server's inlay hints, that I could do:
We could provide text edits which would auto-import any type that is referred to, and insert the type annotation, where syntactically valid.
For example:
fnfoo(){let eligible = "hello".starts_with(|c| c.is_uppercase());// ^ `: bool ` ^ `: char`matchSome(eligible){Some(n) => {}// ^ not eligible, because inserting `: bool` here would not be valid syntax.None => {}}}
The text was updated successfully, but these errors were encountered:
feat: make inlay hints insertable
Part of #13812
This PR implements text edit for inlay hints. When an inlay hint contain text edit, user can "accept" it (e.g. by double-clicking in VS Code) to make the hint actual code (effectively deprecating the hint itself).
This PR does not implement auto import despite the original request; text edits only insert qualified types along with necessary punctuation. I feel there are some missing pieces to implement efficient auto import (in particular, type traversal function with early exit) so left it for future work. Even without it, user can use `replace_qualified_name_with_use` assist after accepting the edit to achieve the same result.
I implemented for the following inlay hints:
- top-level identifier pattern in let statements
- top-level identifier pattern in closure parameters
- closure return type when its has block body
One somewhat strange interaction can be observed when top-level identifier pattern has subpattern: text edit inserts type annotation in different place than the inlay hint. Do we want to allow it or should we not provide text edits for these cases at all?
```rust
let a /* inlay hint shown here */ @ (b, c) = foo();
let a @ (b, c) /* text edit inserts types here */ = foo();
```
For anyone interested (and reminder for myself): #14533 implemented text edits for some inlay hints (including bind_pat) without auto imports. Auto imports would be really cool, but as discussed in the PR, we want to solve #13962 beforehand.
Inlay hints can have text edits which can be provided to "apply" the inlay hint when double clicked on. I noticed this recently in the python language server's inlay hints, that I could do:
We could provide text edits which would auto-import any type that is referred to, and insert the type annotation, where syntactically valid.
For example:
The text was updated successfully, but these errors were encountered: