From 2bdfa5d5b29b6f91a40227c0026f6eb1351a800d Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 11 Oct 2023 13:47:11 +0200 Subject: [PATCH 1/5] feat: Add hexadecimal numerical notation --- crates/prql-parser/src/lexer.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/crates/prql-parser/src/lexer.rs b/crates/prql-parser/src/lexer.rs index 1880dbe63ed0..1c18c0a130b2 100644 --- a/crates/prql-parser/src/lexer.rs +++ b/crates/prql-parser/src/lexer.rs @@ -157,6 +157,15 @@ pub fn ident_part() -> impl Parser> + Clone { } fn literal() -> impl Parser> { + let hex_notation = just("0x").ignore_then( + filter(|c: &char| c.is_ascii_hexdigit()) + .repeated() + .at_least(1) + .at_most(12) + .collect::() + .try_map(|digits, _| Ok(Literal::Integer(i64::from_str_radix(&digits, 16).unwrap()))), + ).labelled("number"); + let exp = one_of("eE").chain(one_of("+-").or_not().chain::(text::digits(10))); let integer = filter(|c: &char| c.is_ascii_digit() && *c != '0') @@ -286,6 +295,7 @@ fn literal() -> impl Parser> { .map(Literal::Timestamp); choice(( + hex_notation, string, raw_string, value_and_unit, From b04b9b19e42eb2b9c4a534d03161bc3277ec8844 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 11 Oct 2023 13:54:49 +0200 Subject: [PATCH 2/5] Update lexer.rs --- crates/prql-parser/src/lexer.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/crates/prql-parser/src/lexer.rs b/crates/prql-parser/src/lexer.rs index 1c18c0a130b2..39680f3e6678 100644 --- a/crates/prql-parser/src/lexer.rs +++ b/crates/prql-parser/src/lexer.rs @@ -157,14 +157,18 @@ pub fn ident_part() -> impl Parser> + Clone { } fn literal() -> impl Parser> { - let hex_notation = just("0x").ignore_then( - filter(|c: &char| c.is_ascii_hexdigit()) - .repeated() - .at_least(1) - .at_most(12) - .collect::() - .try_map(|digits, _| Ok(Literal::Integer(i64::from_str_radix(&digits, 16).unwrap()))), - ).labelled("number"); + let hex_notation = just("0x") + .ignore_then( + filter(|c: &char| c.is_ascii_hexdigit()) + .repeated() + .at_least(1) + .at_most(12) + .collect::() + .try_map(|digits, _| { + Ok(Literal::Integer(i64::from_str_radix(&digits, 16).unwrap())) + }), + ) + .labelled("number"); let exp = one_of("eE").chain(one_of("+-").or_not().chain::(text::digits(10))); From ad574d35d7f30eacde5b392bfffb0910c14f17cf Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 11 Oct 2023 13:57:30 +0200 Subject: [PATCH 3/5] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd0a1f260667..f17c6983c208 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ (@vanillajonathan, #3568) - Add support for long Unicode escape sequences. Example `"Hello \u{01F422}"`. (@vanillajonathan, #3569) +- Add support for hexadecimal numerical notation. + Example `filter status == 0xff`. (@vanillajonathan, #3654) **Fixes**: From 44e0e37d1ceeb7f3d03081c1a992d8d232f7c153 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 11:57:46 +0000 Subject: [PATCH 4/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f17c6983c208..3b270824bb78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,8 +18,8 @@ (@vanillajonathan, #3568) - Add support for long Unicode escape sequences. Example `"Hello \u{01F422}"`. (@vanillajonathan, #3569) -- Add support for hexadecimal numerical notation. - Example `filter status == 0xff`. (@vanillajonathan, #3654) +- Add support for hexadecimal numerical notation. Example + `filter status == 0xff`. (@vanillajonathan, #3654) **Fixes**: From 0ae2512e5b94f8cedbce594a4e4064e43382d7bf Mon Sep 17 00:00:00 2001 From: Jonathan Date: Wed, 11 Oct 2023 15:03:35 +0200 Subject: [PATCH 5/5] Update lexer.rs --- crates/prql-parser/src/lexer.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/prql-parser/src/lexer.rs b/crates/prql-parser/src/lexer.rs index 39680f3e6678..b880e1ed7d90 100644 --- a/crates/prql-parser/src/lexer.rs +++ b/crates/prql-parser/src/lexer.rs @@ -495,6 +495,12 @@ fn test_line_wrap() { "###); } +#[test] +fn numbers() { + // Hexadecimal notation + assert_eq!(literal().parse("0xff").unwrap(), Literal::Integer(255)); +} + #[test] fn quotes() { use insta::assert_snapshot;