From cd0bec2e2c5c2781db851f28c5b1b3476008fbf6 Mon Sep 17 00:00:00 2001 From: Mubelotix Date: Tue, 19 Aug 2025 14:38:39 +0200 Subject: [PATCH] Tolerate trailing comma --- crates/filter-parser/src/lib.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/filter-parser/src/lib.rs b/crates/filter-parser/src/lib.rs index 4f4472778..c717b0591 100644 --- a/crates/filter-parser/src/lib.rs +++ b/crates/filter-parser/src/lib.rs @@ -473,7 +473,7 @@ fn parse_geo_polygon(input: Span) -> IResult { tag(","), ws(delimited(char('['), separated_list1(tag(","), ws(recognize_float)), char(']'))), ), - char(')'), + preceded(opt(ws(char(','))), char(')')), // Tolerate trailing comma )(input) .map_cut(ErrorKind::GeoPolygon)?; @@ -838,6 +838,12 @@ pub mod tests { insta::assert_snapshot!(p("NOT _geoBoundingBox([12, 13], [14, 15])"), @"NOT (_geoBoundingBox([{12}, {13}], [{14}, {15}]))"); insta::assert_snapshot!(p("_geoBoundingBox([12,13],[14,15])"), @"_geoBoundingBox([{12}, {13}], [{14}, {15}])"); + // Test geo polygon + insta::assert_snapshot!(p("_geoPolygon([12, 13], [14, 15], [16, 17])"), @"_geoPolygon([[{12}, {13}], [{14}, {15}], [{16}, {17}], ])"); + insta::assert_snapshot!(p("_geoPolygon([12, 13], [14, 15], [16, 17],)"), @"_geoPolygon([[{12}, {13}], [{14}, {15}], [{16}, {17}], ])"); + insta::assert_snapshot!(p("_geoPolygon([12, 13], [14, 15])"), @"_geoPolygon([[{12}, {13}], [{14}, {15}], ])"); + insta::assert_snapshot!(p("_geoPolygon([12, 13], [14, 15], [-1.2,2939.2], [1,1])"), @"_geoPolygon([[{12}, {13}], [{14}, {15}], [{-1.2}, {2939.2}], [{1}, {1}], ])"); + // Test OR + AND insta::assert_snapshot!(p("channel = ponce AND 'dog race' != 'bernese mountain'"), @"AND[{channel} = {ponce}, {dog race} != {bernese mountain}, ]"); insta::assert_snapshot!(p("channel = ponce OR 'dog race' != 'bernese mountain'"), @"OR[{channel} = {ponce}, {dog race} != {bernese mountain}, ]");