From 4ec1f29df054207707fdccbe709344414cdea410 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:05:50 +0200 Subject: [PATCH] chore: Make some of the deps of gpui optional (#16986) Minor bookkeeping, that takes down dep count of gpui from 454 to 430 for me. Release Notes: - N/A --- Cargo.lock | 1 - crates/gpui/Cargo.toml | 8 ++-- crates/util/Cargo.toml | 5 ++- crates/util/src/util.rs | 85 ++++++++++++++++++++++------------------- 4 files changed, 53 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 963e50e711..b1eea5f6f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4916,7 +4916,6 @@ dependencies = [ "sum_tree", "taffy", "thiserror", - "time", "unicode-segmentation", "usvg", "util", diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index 6d627dbed6..3d285ce59e 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -15,6 +15,7 @@ default = [] test-support = [ "backtrace", "collections/test-support", + "rand", "util/test-support", "http_client/test-support", ] @@ -36,7 +37,6 @@ bytemuck = { version = "1", optional = true } collections.workspace = true ctor.workspace = true derive_more.workspace = true -env_logger.workspace = true etagere = "0.2" futures.workspace = true gpui_macros.workspace = true @@ -50,7 +50,7 @@ parking = "2.0.0" parking_lot.workspace = true postage.workspace = true profiling.workspace = true -rand.workspace = true +rand = { optional = true, workspace = true} raw-window-handle = "0.6" refineable.workspace = true resvg = { version = "0.41.0", default-features = false } @@ -68,7 +68,6 @@ strum.workspace = true sum_tree.workspace = true taffy = "0.4.3" thiserror.workspace = true -time.workspace = true util.workspace = true uuid.workspace = true waker-fn = "1.2.0" @@ -76,6 +75,8 @@ waker-fn = "1.2.0" [dev-dependencies] backtrace = "0.3" collections = { workspace = true, features = ["test-support"] } +env_logger.workspace = true +rand.workspace = true util = { workspace = true, features = ["test-support"] } http_client = { workspace = true, features = ["test-support"] } unicode-segmentation.workspace = true @@ -152,6 +153,7 @@ font-kit = { git = "https://github.com/zed-industries/font-kit", rev = "40391b7" x11-clipboard = "0.9.2" [target.'cfg(windows)'.dependencies] +rand.workspace = true windows.workspace = true windows-core = "0.58" diff --git a/crates/util/Cargo.toml b/crates/util/Cargo.toml index 3691af49f2..6257ffd642 100644 --- a/crates/util/Cargo.toml +++ b/crates/util/Cargo.toml @@ -13,7 +13,7 @@ path = "src/util.rs" doctest = true [features] -test-support = ["tempfile", "git2"] +test-support = ["tempfile", "git2", "rand"] [dependencies] anyhow.workspace = true @@ -23,7 +23,7 @@ futures.workspace = true git2 = { workspace = true, optional = true } globset.workspace = true log.workspace = true -rand.workspace = true +rand = {workspace = true, optional = true} regex.workspace = true rust-embed.workspace = true serde.workspace = true @@ -40,3 +40,4 @@ tendril = "0.4.3" [dev-dependencies] git2.workspace = true tempfile.workspace = true +rand.workspace = true diff --git a/crates/util/src/util.rs b/crates/util/src/util.rs index 566ad33698..79880aa9ed 100644 --- a/crates/util/src/util.rs +++ b/crates/util/src/util.rs @@ -6,7 +6,7 @@ pub mod serde; pub mod test; use futures::Future; -use rand::{seq::SliceRandom, Rng}; + use regex::Regex; use std::sync::OnceLock; use std::{ @@ -517,54 +517,59 @@ pub fn defer(f: F) -> Deferred { Deferred(Some(f)) } -pub struct RandomCharIter { - rng: T, - simple_text: bool, -} +#[cfg(any(test, feature = "test-support"))] +mod rng { + use rand::{seq::SliceRandom, Rng}; + pub struct RandomCharIter { + rng: T, + simple_text: bool, + } -impl RandomCharIter { - pub fn new(rng: T) -> Self { - Self { - rng, - simple_text: std::env::var("SIMPLE_TEXT").map_or(false, |v| !v.is_empty()), + impl RandomCharIter { + pub fn new(rng: T) -> Self { + Self { + rng, + simple_text: std::env::var("SIMPLE_TEXT").map_or(false, |v| !v.is_empty()), + } + } + + pub fn with_simple_text(mut self) -> Self { + self.simple_text = true; + self } } - pub fn with_simple_text(mut self) -> Self { - self.simple_text = true; - self - } -} + impl Iterator for RandomCharIter { + type Item = char; -impl Iterator for RandomCharIter { - type Item = char; + fn next(&mut self) -> Option { + if self.simple_text { + return if self.rng.gen_range(0..100) < 5 { + Some('\n') + } else { + Some(self.rng.gen_range(b'a'..b'z' + 1).into()) + }; + } - fn next(&mut self) -> Option { - if self.simple_text { - return if self.rng.gen_range(0..100) < 5 { - Some('\n') - } else { - Some(self.rng.gen_range(b'a'..b'z' + 1).into()) - }; - } - - match self.rng.gen_range(0..100) { - // whitespace - 0..=19 => [' ', '\n', '\r', '\t'].choose(&mut self.rng).copied(), - // two-byte greek letters - 20..=32 => char::from_u32(self.rng.gen_range(('α' as u32)..('ω' as u32 + 1))), - // // three-byte characters - 33..=45 => ['✋', '✅', '❌', '❎', '⭐'] - .choose(&mut self.rng) - .copied(), - // // four-byte characters - 46..=58 => ['🍐', '🏀', '🍗', '🎉'].choose(&mut self.rng).copied(), - // ascii letters - _ => Some(self.rng.gen_range(b'a'..b'z' + 1).into()), + match self.rng.gen_range(0..100) { + // whitespace + 0..=19 => [' ', '\n', '\r', '\t'].choose(&mut self.rng).copied(), + // two-byte greek letters + 20..=32 => char::from_u32(self.rng.gen_range(('α' as u32)..('ω' as u32 + 1))), + // // three-byte characters + 33..=45 => ['✋', '✅', '❌', '❎', '⭐'] + .choose(&mut self.rng) + .copied(), + // // four-byte characters + 46..=58 => ['🍐', '🏀', '🍗', '🎉'].choose(&mut self.rng).copied(), + // ascii letters + _ => Some(self.rng.gen_range(b'a'..b'z' + 1).into()), + } } } } - +#[cfg(any(test, feature = "test-support"))] +pub use rng::RandomCharIter; /// Get an embedded file as a string. pub fn asset_str(path: &str) -> Cow<'static, str> { match A::get(path).unwrap().data {