aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/loader
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-23 23:14:52 +0900
committernsfisis <nsfisis@gmail.com>2026-05-23 23:15:14 +0900
commitdbdecaf5a1c54a876b7ee0153d58dd39b1080f97 (patch)
treef13f2ced03c803dcbc42a5672458b3cb19ff0f30 /crates/shirabe/src/package/loader
parentf5b987a00712211b7ce56300851182bda904e97b (diff)
downloadphp-shirabe-dbdecaf5a1c54a876b7ee0153d58dd39b1080f97.tar.gz
php-shirabe-dbdecaf5a1c54a876b7ee0153d58dd39b1080f97.tar.zst
php-shirabe-dbdecaf5a1c54a876b7ee0153d58dd39b1080f97.zip
refactor(semver): change ConstraintInterface to a closed enum
Replace the dyn ConstraintInterface trait objects with an AnyConstraint enum closing over its four implementors (Simple, Multi, MatchAll, MatchNone), mirroring the earlier Rule enum conversion. Rename constraint.rs to simple_constraint.rs to match the renamed Constraint type. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/package/loader')
-rw-r--r--crates/shirabe/src/package/loader/array_loader.rs4
-rw-r--r--crates/shirabe/src/package/loader/validating_array_loader.rs22
2 files changed, 14 insertions, 12 deletions
diff --git a/crates/shirabe/src/package/loader/array_loader.rs b/crates/shirabe/src/package/loader/array_loader.rs
index ffbe465..87d6e35 100644
--- a/crates/shirabe/src/package/loader/array_loader.rs
+++ b/crates/shirabe/src/package/loader/array_loader.rs
@@ -764,12 +764,10 @@ impl ArrayLoader {
}
};
- // TODO(phase-b): Link::new expects Box<dyn ConstraintInterface>; we have Arc<dyn ConstraintInterface + Send + Sync>
- let _ = parsed_constraint;
Ok(Link::new(
source.to_string(),
target.to_string(),
- todo!("phase-b: convert Arc<dyn ConstraintInterface> to Box<dyn ConstraintInterface>"),
+ parsed_constraint,
Some(description.to_string()),
Some(pretty_constraint.to_string()),
))
diff --git a/crates/shirabe/src/package/loader/validating_array_loader.rs b/crates/shirabe/src/package/loader/validating_array_loader.rs
index 59fc266..a2dd5a7 100644
--- a/crates/shirabe/src/package/loader/validating_array_loader.rs
+++ b/crates/shirabe/src/package/loader/validating_array_loader.rs
@@ -11,9 +11,9 @@ use shirabe_php_shim::{
is_string, json_encode, parse_url_all, php_to_string, sprintf, str_replace, strcasecmp,
strtolower, strtotime, substr, trigger_error, trim, var_export,
};
-use shirabe_semver::constraint::Constraint;
-use shirabe_semver::constraint::ConstraintInterface;
+use shirabe_semver::constraint::AnyConstraint;
use shirabe_semver::constraint::MatchNoneConstraint;
+use shirabe_semver::constraint::SimpleConstraint;
use shirabe_semver::intervals::Intervals;
use crate::package::loader::InvalidPackageException;
@@ -877,7 +877,8 @@ impl ValidatingArrayLoader {
}
}
- let unbound_constraint = Constraint::new("=", "10000000-dev");
+ let unbound_constraint =
+ SimpleConstraint::new("=".to_string(), "10000000-dev".to_string(), None).into();
let link_types: Vec<&'static str> = SUPPORTED_LINK_TYPES.keys().copied().collect();
for link_type in link_types {
@@ -952,11 +953,14 @@ impl ValidatingArrayLoader {
} else if (self.flags & Self::CHECK_STRICT_CONSTRAINTS) != 0
&& link_type == "require"
&& link_constraint
- .as_any()
- .downcast_ref::<Constraint>()
+ .as_constraint()
.map_or(false, |c| ["==", "="].contains(&c.get_operator()))
- && Constraint::new(">=", "1.0.0.0-dev")
- .matches(link_constraint.as_ref())
+ && AnyConstraint::from(SimpleConstraint::new(
+ ">=".to_string(),
+ "1.0.0.0-dev".to_string(),
+ None,
+ ))
+ .matches(&link_constraint)
{
self.warnings.push(format!(
"{}.{} : exact version constraints ({}) should be avoided if the package follows semantic versioning",
@@ -964,8 +968,8 @@ impl ValidatingArrayLoader {
));
}
- let compacted = Intervals::compact_constraint(link_constraint.as_ref())?;
- if compacted.as_any().is::<MatchNoneConstraint>() {
+ let compacted = Intervals::compact_constraint(&link_constraint)?;
+ if compacted.is_match_none() {
self.warnings.push(format!(
"{}.{} : this version constraint cannot possibly match anything ({})",
link_type, package, constraint_str