mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 14:21:44 +00:00
Compute closure captures
This commit is contained in:
parent
51d5862caf
commit
59b6f2d9f2
42 changed files with 2537 additions and 433 deletions
|
@ -4,7 +4,7 @@ use std::{env::var, sync::Arc};
|
|||
|
||||
use chalk_ir::GoalData;
|
||||
use chalk_recursive::Cache;
|
||||
use chalk_solve::{logging_db::LoggingRustIrDatabase, Solver};
|
||||
use chalk_solve::{logging_db::LoggingRustIrDatabase, rust_ir, Solver};
|
||||
|
||||
use base_db::CrateId;
|
||||
use hir_def::{
|
||||
|
@ -177,8 +177,10 @@ fn is_chalk_print() -> bool {
|
|||
std::env::var("CHALK_PRINT").is_ok()
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||
pub enum FnTrait {
|
||||
// Warning: Order is important. If something implements `x` it should also implement
|
||||
// `y` if `y <= x`.
|
||||
FnOnce,
|
||||
FnMut,
|
||||
Fn,
|
||||
|
@ -193,6 +195,14 @@ impl FnTrait {
|
|||
}
|
||||
}
|
||||
|
||||
pub const fn to_chalk_ir(self) -> rust_ir::ClosureKind {
|
||||
match self {
|
||||
FnTrait::FnOnce => rust_ir::ClosureKind::FnOnce,
|
||||
FnTrait::FnMut => rust_ir::ClosureKind::FnMut,
|
||||
FnTrait::Fn => rust_ir::ClosureKind::Fn,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn method_name(self) -> Name {
|
||||
match self {
|
||||
FnTrait::FnOnce => name!(call_once),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue