From 8599a9aae00fe29eb1f0f350fad7ff726cd008c2 Mon Sep 17 00:00:00 2001 From: Davis Vaughan Date: Mon, 20 Oct 2025 12:52:23 -0400 Subject: [PATCH] Wrap a `&'static DefaultFilePatterns` not a `DefaultFilePatterns` This allows us to declare that these types wrap static immutable data, which doesn't need to be copied whenever we create new `DefaultIncludePatterns` or `DefaultExcludePatterns` instances --- .../src/settings/default_exclude_patterns.rs | 27 ++++++++----------- .../src/settings/default_include_patterns.rs | 27 ++++++++----------- 2 files changed, 22 insertions(+), 32 deletions(-) diff --git a/crates/workspace/src/settings/default_exclude_patterns.rs b/crates/workspace/src/settings/default_exclude_patterns.rs index 6d1e8a73..9a33e832 100644 --- a/crates/workspace/src/settings/default_exclude_patterns.rs +++ b/crates/workspace/src/settings/default_exclude_patterns.rs @@ -1,5 +1,4 @@ use std::ops::Deref; -use std::ops::DerefMut; use std::sync::LazyLock; use crate::file_patterns::DefaultFilePatterns; @@ -34,15 +33,17 @@ static DEFAULT_EXCLUDE_PATTERN_NAMES: &[&str] = &[ "**/import-standalone-*.R", ]; -static DEFAULT_EXCLUDE_PATTERNS: LazyLock = LazyLock::new(|| { - DefaultExcludePatterns( - DefaultFilePatterns::try_from_iter(DEFAULT_EXCLUDE_PATTERN_NAMES.iter().copied()) - .expect("Can create default exclude patterns"), - ) +static DEFAULT_EXCLUDE_PATTERNS: LazyLock = LazyLock::new(|| { + DefaultFilePatterns::try_from_iter(DEFAULT_EXCLUDE_PATTERN_NAMES.iter().copied()) + .expect("Can create default exclude patterns") }); -#[derive(Debug, Clone)] -pub struct DefaultExcludePatterns(DefaultFilePatterns); +/// Typed wrapper around [DEFAULT_EXCLUDE_PATTERNS] +/// +/// Allows for free creation of [DefaultExcludePatterns] structs without needing to clone +/// the global [DEFAULT_EXCLUDE_PATTERNS] object. +#[derive(Debug)] +pub struct DefaultExcludePatterns(&'static DefaultFilePatterns); impl Default for DefaultExcludePatterns { /// Default exclude patterns @@ -50,7 +51,7 @@ impl Default for DefaultExcludePatterns { /// Used in the [Default] method of [crate::settings::FormatSettings] to ensure that /// virtual `air.toml`s use the default exclude patterns. fn default() -> Self { - DEFAULT_EXCLUDE_PATTERNS.clone() + Self(&DEFAULT_EXCLUDE_PATTERNS) } } @@ -58,13 +59,7 @@ impl Deref for DefaultExcludePatterns { type Target = DefaultFilePatterns; fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for DefaultExcludePatterns { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 + self.0 } } diff --git a/crates/workspace/src/settings/default_include_patterns.rs b/crates/workspace/src/settings/default_include_patterns.rs index 721395ad..69508e12 100644 --- a/crates/workspace/src/settings/default_include_patterns.rs +++ b/crates/workspace/src/settings/default_include_patterns.rs @@ -1,5 +1,4 @@ use std::ops::Deref; -use std::ops::DerefMut; use std::sync::LazyLock; use crate::file_patterns::DefaultFilePatterns; @@ -13,15 +12,17 @@ static DEFAULT_INCLUDE_PATTERN_NAMES: &[&str] = &[ "**/*.[R,r]", ]; -static DEFAULT_INCLUDE_PATTERNS: LazyLock = LazyLock::new(|| { - DefaultIncludePatterns( - DefaultFilePatterns::try_from_iter(DEFAULT_INCLUDE_PATTERN_NAMES.iter().copied()) - .expect("Can create default include patterns"), - ) +static DEFAULT_INCLUDE_PATTERNS: LazyLock = LazyLock::new(|| { + DefaultFilePatterns::try_from_iter(DEFAULT_INCLUDE_PATTERN_NAMES.iter().copied()) + .expect("Can create default include patterns") }); -#[derive(Debug, Clone)] -pub struct DefaultIncludePatterns(DefaultFilePatterns); +/// Typed wrapper around [DEFAULT_INCLUDE_PATTERNS] +/// +/// Allows for free creation of [DefaultIncludePatterns] structs without needing to clone +/// the global [DEFAULT_INCLUDE_PATTERNS] object. +#[derive(Debug)] +pub struct DefaultIncludePatterns(&'static DefaultFilePatterns); impl Default for DefaultIncludePatterns { /// Default include patterns @@ -29,7 +30,7 @@ impl Default for DefaultIncludePatterns { /// Used in the [Default] method of [crate::settings::FormatSettings] to ensure that /// virtual `air.toml`s use the default include patterns. fn default() -> Self { - DEFAULT_INCLUDE_PATTERNS.clone() + Self(&DEFAULT_INCLUDE_PATTERNS) } } @@ -37,13 +38,7 @@ impl Deref for DefaultIncludePatterns { type Target = DefaultFilePatterns; fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for DefaultIncludePatterns { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 + self.0 } }