mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-27 20:42:10 +00:00

This PR introduces a new `CacheKey` trait for types that can be used as a cache key. I'm not entirely sure if this is worth the "overhead", but I was surprised to find `HashableHashSet` and got scared when I looked at the time complexity of the `hash` function. These implementations must be extremely slow in hashed collections. I then searched for usages and quickly realized that only the cache uses these `Hash` implementations, where performance is less sensitive. This PR introduces a new `CacheKey` trait to communicate the difference between a hash and computing a key for the cache. The new trait can be implemented for types that don't implement `Hash` for performance reasons, and we can define additional constraints on the implementation: For example, we'll want to enforce portability when we add remote caching support. Using a different trait further allows us not to implement it for types without stable identities (e.g. pointers) or use other implementations than the standard hash function.
15 lines
394 B
Rust
15 lines
394 B
Rust
mod cache_key;
|
|
pub mod filetime;
|
|
pub mod globset;
|
|
|
|
pub use cache_key::{CacheKey, CacheKeyHasher};
|
|
|
|
use std::path::{Path, PathBuf};
|
|
|
|
pub const CACHE_DIR_NAME: &str = ".ruff_cache";
|
|
|
|
/// Return the cache directory for a given project root. Defers to the
|
|
/// `RUFF_CACHE_DIR` environment variable, if set.
|
|
pub fn cache_dir(project_root: &Path) -> PathBuf {
|
|
project_root.join(CACHE_DIR_NAME)
|
|
}
|