diff options
Diffstat (limited to 'crates/shirabe/src/filter')
5 files changed, 36 insertions, 6 deletions
diff --git a/crates/shirabe/src/filter/platform_requirement_filter/ignore_all_platform_requirement_filter.rs b/crates/shirabe/src/filter/platform_requirement_filter/ignore_all_platform_requirement_filter.rs index e38bfea..218a52d 100644 --- a/crates/shirabe/src/filter/platform_requirement_filter/ignore_all_platform_requirement_filter.rs +++ b/crates/shirabe/src/filter/platform_requirement_filter/ignore_all_platform_requirement_filter.rs @@ -14,4 +14,8 @@ impl PlatformRequirementFilterInterface for IgnoreAllPlatformRequirementFilter { fn is_upper_bound_ignored(&self, req: &str) -> bool { self.is_ignored(req) } + + fn as_any(&self) -> &dyn std::any::Any { + self + } } diff --git a/crates/shirabe/src/filter/platform_requirement_filter/ignore_list_platform_requirement_filter.rs b/crates/shirabe/src/filter/platform_requirement_filter/ignore_list_platform_requirement_filter.rs index 8026768..39a0c03 100644 --- a/crates/shirabe/src/filter/platform_requirement_filter/ignore_list_platform_requirement_filter.rs +++ b/crates/shirabe/src/filter/platform_requirement_filter/ignore_list_platform_requirement_filter.rs @@ -29,8 +29,9 @@ impl IgnoreListPlatformRequirementFilter { ignore_all.push(req); } } - let ignore_regex = base_package::package_names_to_regexp(&ignore_all); - let ignore_upper_bound_regex = base_package::package_names_to_regexp(&ignore_upper_bound); + let ignore_regex = base_package::package_names_to_regexp(&ignore_all, "{^(?:%s)$}iD"); + let ignore_upper_bound_regex = + base_package::package_names_to_regexp(&ignore_upper_bound, "{^(?:%s)$}iD"); Ok(Self { ignore_regex, ignore_upper_bound_regex, @@ -88,4 +89,8 @@ impl PlatformRequirementFilterInterface for IgnoreListPlatformRequirementFilter } self.is_ignored(req) || Preg::is_match(&self.ignore_upper_bound_regex, req).unwrap_or(false) } + + fn as_any(&self) -> &dyn std::any::Any { + self + } } diff --git a/crates/shirabe/src/filter/platform_requirement_filter/ignore_nothing_platform_requirement_filter.rs b/crates/shirabe/src/filter/platform_requirement_filter/ignore_nothing_platform_requirement_filter.rs index c2d0fec..21da158 100644 --- a/crates/shirabe/src/filter/platform_requirement_filter/ignore_nothing_platform_requirement_filter.rs +++ b/crates/shirabe/src/filter/platform_requirement_filter/ignore_nothing_platform_requirement_filter.rs @@ -13,4 +13,8 @@ impl PlatformRequirementFilterInterface for IgnoreNothingPlatformRequirementFilt fn is_upper_bound_ignored(&self, _req: &str) -> bool { false } + + fn as_any(&self) -> &dyn std::any::Any { + self + } } diff --git a/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs b/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs index 59340cb..35a3ed9 100644 --- a/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs +++ b/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs @@ -23,9 +23,20 @@ impl PlatformRequirementFilterFactory { Ok(Self::ignore_nothing()) } } - list_or_array @ (PhpMixed::List(_) | PhpMixed::Array(_)) => Ok(Box::new( - IgnoreListPlatformRequirementFilter::new(list_or_array), - )), + list_or_array @ (PhpMixed::List(_) | PhpMixed::Array(_)) => { + let list: Vec<String> = match list_or_array { + PhpMixed::List(items) => items + .into_iter() + .filter_map(|v| v.as_string().map(|s| s.to_string())) + .collect(), + PhpMixed::Array(map) => map + .into_iter() + .filter_map(|(_, v)| v.as_string().map(|s| s.to_string())) + .collect(), + _ => unreachable!(), + }; + Ok(Box::new(IgnoreListPlatformRequirementFilter::new(list)?)) + } other => Err(anyhow::anyhow!(InvalidArgumentException { message: format!( "PlatformRequirementFilter: Unknown $boolOrList parameter {}. Please report at https://github.com/composer/composer/issues/new.", diff --git a/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_interface.rs b/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_interface.rs index a807da3..8061e1a 100644 --- a/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_interface.rs +++ b/crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_interface.rs @@ -1,7 +1,13 @@ //! ref: composer/src/Composer/Filter/PlatformRequirementFilter/PlatformRequirementFilterInterface.php -pub trait PlatformRequirementFilterInterface { +pub trait PlatformRequirementFilterInterface: std::fmt::Debug { fn is_ignored(&self, req: &str) -> bool; fn is_upper_bound_ignored(&self, req: &str) -> bool; + + fn as_any(&self) -> &dyn std::any::Any; + + fn clone_box(&self) -> Box<dyn PlatformRequirementFilterInterface> { + todo!() + } } |
