feat: Closure capture inlay hints

This commit is contained in:
Lukas Wirth 2023-05-05 13:34:55 +02:00
parent 0dd94d3b07
commit 8081a654da
10 changed files with 264 additions and 14 deletions

View file

@ -2611,6 +2611,10 @@ impl LocalSource {
self.source.file_id.original_file(db.upcast())
}
pub fn file(&self) -> HirFileId {
self.source.file_id
}
pub fn name(&self) -> Option<ast::Name> {
self.source.value.name()
}
@ -3232,6 +3236,21 @@ impl ClosureCapture {
Local { parent: self.owner, binding_id: self.capture.local() }
}
pub fn kind(&self) -> CaptureKind {
match self.capture.kind() {
hir_ty::CaptureKind::ByRef(
hir_ty::mir::BorrowKind::Shallow | hir_ty::mir::BorrowKind::Shared,
) => CaptureKind::SharedRef,
hir_ty::CaptureKind::ByRef(hir_ty::mir::BorrowKind::Unique) => {
CaptureKind::UniqueSharedRef
}
hir_ty::CaptureKind::ByRef(hir_ty::mir::BorrowKind::Mut { .. }) => {
CaptureKind::MutableRef
}
hir_ty::CaptureKind::ByValue => CaptureKind::Move,
}
}
pub fn display_kind(&self) -> &'static str {
self.capture.display_kind()
}
@ -3241,6 +3260,13 @@ impl ClosureCapture {
}
}
pub enum CaptureKind {
SharedRef,
UniqueSharedRef,
MutableRef,
Move,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub struct Type {
env: Arc<TraitEnvironment>,