mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 22:01:37 +00:00
Move salsa fork in-tree
This commit is contained in:
parent
1974e7490d
commit
159a03ad7b
69 changed files with 9478 additions and 41 deletions
49
crates/salsa/src/durability.rs
Normal file
49
crates/salsa/src/durability.rs
Normal file
|
@ -0,0 +1,49 @@
|
|||
/// Describes how likely a value is to change -- how "durable" it is.
|
||||
/// By default, inputs have `Durability::LOW` and interned values have
|
||||
/// `Durability::HIGH`. But inputs can be explicitly set with other
|
||||
/// durabilities.
|
||||
///
|
||||
/// We use durabilities to optimize the work of "revalidating" a query
|
||||
/// after some input has changed. Ordinarily, in a new revision,
|
||||
/// queries have to trace all their inputs back to the base inputs to
|
||||
/// determine if any of those inputs have changed. But if we know that
|
||||
/// the only changes were to inputs of low durability (the common
|
||||
/// case), and we know that the query only used inputs of medium
|
||||
/// durability or higher, then we can skip that enumeration.
|
||||
///
|
||||
/// Typically, one assigns low durabilites to inputs that the user is
|
||||
/// frequently editing. Medium or high durabilities are used for
|
||||
/// configuration, the source from library crates, or other things
|
||||
/// that are unlikely to be edited.
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
||||
pub struct Durability(u8);
|
||||
|
||||
impl Durability {
|
||||
/// Low durability: things that change frequently.
|
||||
///
|
||||
/// Example: part of the crate being edited
|
||||
pub const LOW: Durability = Durability(0);
|
||||
|
||||
/// Medium durability: things that change sometimes, but rarely.
|
||||
///
|
||||
/// Example: a Cargo.toml file
|
||||
pub const MEDIUM: Durability = Durability(1);
|
||||
|
||||
/// High durability: things that are not expected to change under
|
||||
/// common usage.
|
||||
///
|
||||
/// Example: the standard library or something from crates.io
|
||||
pub const HIGH: Durability = Durability(2);
|
||||
|
||||
/// The maximum possible durability; equivalent to HIGH but
|
||||
/// "conceptually" distinct (i.e., if we add more durability
|
||||
/// levels, this could change).
|
||||
pub(crate) const MAX: Durability = Self::HIGH;
|
||||
|
||||
/// Number of durability levels.
|
||||
pub(crate) const LEN: usize = 3;
|
||||
|
||||
pub(crate) fn index(self) -> usize {
|
||||
self.0 as usize
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue