From dc0ffbe16eb5ecc591422fe225ebb58f17b0e231 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Thu, 8 Aug 2024 01:23:58 +0200 Subject: [PATCH] Replace hashbrown with ahash hashbrown is already used in the standard library, but we want the improved performance of the different hash algorithm. Using ahash directly conveys this intent more clearly. --- Cargo.lock | 14 +++++++++++++- Cargo.toml | 2 +- src/app_state.rs | 3 ++- src/dev/check.rs | 14 ++++++-------- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ac915aacee..22aa252828 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,6 +9,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "getrandom", "once_cell", "version_check", "zerocopy", @@ -246,6 +247,17 @@ dependencies = [ "libc", ] +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -517,9 +529,9 @@ dependencies = [ name = "rustlings" version = "6.1.0" dependencies = [ + "ahash", "anyhow", "clap", - "hashbrown", "notify-debouncer-mini", "os_pipe", "ratatui", diff --git a/Cargo.toml b/Cargo.toml index e76077d98c..47e153019a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,9 +46,9 @@ include = [ ] [dependencies] +ahash = "0.8.11" anyhow = "1.0.86" clap = { version = "4.5.13", features = ["derive"] } -hashbrown = "0.14.5" notify-debouncer-mini = { version = "0.4.1", default-features = false } os_pipe = "1.2.1" ratatui = { version = "0.27.0", default-features = false, features = ["crossterm"] } diff --git a/src/app_state.rs b/src/app_state.rs index 8e43c57c9b..ac45bfc6f6 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -1,3 +1,4 @@ +use ahash::{HashSet, HashSetExt}; use anyhow::{bail, Context, Error, Result}; use std::{ fs::{self, File}, @@ -69,7 +70,7 @@ impl AppState { return StateFileStatus::NotRead; } - let mut done_exercises = hashbrown::HashSet::with_capacity(self.exercises.len()); + let mut done_exercises = HashSet::with_capacity(self.exercises.len()); for done_exerise_name in lines { if done_exerise_name.is_empty() { diff --git a/src/dev/check.rs b/src/dev/check.rs index 202e629286..7b17274946 100644 --- a/src/dev/check.rs +++ b/src/dev/check.rs @@ -1,3 +1,4 @@ +use ahash::{HashSet, HashSetExt}; use anyhow::{anyhow, bail, Context, Error, Result}; use std::{ cmp::Ordering, @@ -48,9 +49,9 @@ fn check_cargo_toml( } // Check the info of all exercises and return their paths in a set. -fn check_info_file_exercises(info_file: &InfoFile) -> Result> { - let mut names = hashbrown::HashSet::with_capacity(info_file.exercises.len()); - let mut paths = hashbrown::HashSet::with_capacity(info_file.exercises.len()); +fn check_info_file_exercises(info_file: &InfoFile) -> Result> { + let mut names = HashSet::with_capacity(info_file.exercises.len()); + let mut paths = HashSet::with_capacity(info_file.exercises.len()); let mut file_buf = String::with_capacity(1 << 14); for exercise_info in &info_file.exercises { @@ -111,10 +112,7 @@ fn check_info_file_exercises(info_file: &InfoFile) -> Result, -) -> Result<()> { +fn check_unexpected_files(dir: &str, allowed_rust_files: &HashSet) -> Result<()> { let unexpected_file = |path: &Path| { anyhow!("Found the file `{}`. Only `README.md` and Rust files related to an exercise in `info.toml` are allowed in the `{dir}` directory", path.display()) }; @@ -253,7 +251,7 @@ fn check_solutions( }) .collect::>(); - let mut sol_paths = hashbrown::HashSet::with_capacity(info_file.exercises.len()); + let mut sol_paths = HashSet::with_capacity(info_file.exercises.len()); let mut fmt_cmd = Command::new("rustfmt"); fmt_cmd .arg("--check")