aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/filter
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/filter')
-rw-r--r--crates/shirabe/src/filter/platform_requirement_filter/ignore_all_platform_requirement_filter.rs4
-rw-r--r--crates/shirabe/src/filter/platform_requirement_filter/ignore_list_platform_requirement_filter.rs9
-rw-r--r--crates/shirabe/src/filter/platform_requirement_filter/ignore_nothing_platform_requirement_filter.rs4
-rw-r--r--crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_factory.rs17
-rw-r--r--crates/shirabe/src/filter/platform_requirement_filter/platform_requirement_filter_interface.rs8
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!()
+ }
}