From a6f5708a6b7acab70549ba8cddcd2e40ac21a8de Mon Sep 17 00:00:00 2001 From: yoshie <802632-arkandos@users.noreply.gitlab.com> Date: Sat, 11 Oct 2025 18:22:08 +0200 Subject: [PATCH] fix `and` version range parsing --- src/version/parser.rs | 2 ++ src/version/tests.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/version/parser.rs b/src/version/parser.rs index 6d2752c..b38110a 100644 --- a/src/version/parser.rs +++ b/src/version/parser.rs @@ -372,6 +372,8 @@ impl<'input> Parser<'input> { Some(_) => return Err(UnexpectedToken(self.pop()?.to_string())), }; + + self.skip_whitespace()?; if self.peek() == Some(&Token::And) { self.pop()?; self.expect_whitespace()?; diff --git a/src/version/tests.rs b/src/version/tests.rs index 414e1ed..b9732d6 100644 --- a/src/version/tests.rs +++ b/src/version/tests.rs @@ -320,6 +320,37 @@ parse_range_test!( ) ); +parse_range_test!( + pessimistic_and_gt, + "~> 0.6 and >= 0.6.16", + PubgrubRange::higher_than(v(0, 6, 0)) + .intersection(&PubgrubRange::strictly_lower_than(v(1, 0, 0))) + .intersection(&PubgrubRange::higher_than(v(0, 6, 16))) +); + +parse_range_test!( + pessimistic_and_gt_pre, + "~> 1.0-pre and >= 1.0.0-pre.5", + PubgrubRange::higher_than(v_( + 1, + 0, + 0, + vec![Identifier::AlphaNumeric("pre".to_string())], + None + )) + .intersection(&PubgrubRange::strictly_lower_than(v(2, 0, 0))) + .intersection(&PubgrubRange::higher_than(v_( + 1, + 0, + 0, + vec![ + Identifier::AlphaNumeric("pre".to_string()), + Identifier::Numeric(5) + ], + None + ))) +); + parse_range_fail_test!(range_quad, "1.1.1.1"); parse_range_fail_test!(range_just_major, "1"); parse_range_fail_test!(range_just_major_minor, "1.1");