From ab38f3a2abcf36730f8da9ac425255ff6d8faa2e Mon Sep 17 00:00:00 2001 From: Matthew Donoughe Date: Mon, 20 May 2024 13:03:32 -0400 Subject: [PATCH] ignore trailing commas in versions --- src/lib.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0fe99c0..4a1a6e2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -844,7 +844,7 @@ fn parse_specifier( /// Such as `>=1.19,<2.0`, either delimited by the end of the specifier or a `;` for the marker part /// /// ```text -/// version_one (wsp* ',' version_one)* +/// version_one (wsp* ',' version_one)* (wsp* ',' wsp*)? /// ``` fn parse_version_specifier(cursor: &mut Cursor) -> Result, Pep508Error> { let mut start = cursor.pos(); @@ -860,9 +860,11 @@ fn parse_version_specifier(cursor: &mut Cursor) -> Result, start = end + 1; } Some((_, ';')) | None => { - let end = cursor.pos(); - let specifier = parse_specifier(cursor, &buffer, start, end)?; - specifiers.push(specifier); + if buffer.chars().any(|c| !c.is_whitespace()) { + let end = cursor.pos(); + let specifier = parse_specifier(cursor, &buffer, start, end)?; + specifiers.push(specifier); + } break Some(VersionOrUrl::VersionSpecifier( specifiers.into_iter().collect(), )); @@ -1171,6 +1173,13 @@ mod tests { assert_eq!(numpy.name.as_ref(), "numpy"); } + #[test] + fn versions_trailing_comma() { + let with_trailing_comma = Requirement::from_str("numpy >=1.19, ").unwrap(); + let without_trailing_comma = Requirement::from_str("numpy >=1.19").unwrap(); + assert_eq!(with_trailing_comma, without_trailing_comma); + } + #[test] fn error_extras_eof1() { assert_err(