From 5bac173d640f373714b12b229352472d60b3f6b8 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 12 Dec 2023 19:04:53 +0800 Subject: [PATCH] skip converting to numeric value in liqe --- packages/liqe/src/grammar.ne | 82 ++++++++++++++-------------- packages/liqe/src/grammar.ts | 44 --------------- packages/liqe/test/liqe/filter.ts | 26 ++++----- packages/liqe/test/liqe/highlight.ts | 6 +- packages/liqe/test/liqe/parse.ts | 18 +++--- packages/liqe/test/liqe/serialize.ts | 18 +++--- 6 files changed, 75 insertions(+), 119 deletions(-) diff --git a/packages/liqe/src/grammar.ne b/packages/liqe/src/grammar.ne index f79d5c71e..ec1a7e4fe 100644 --- a/packages/liqe/src/grammar.ne +++ b/packages/liqe/src/grammar.ne @@ -8,14 +8,14 @@ __ -> whitespace_character:+ {% (data) => data[0].length %} whitespace_character -> [ \t\n\v\f] {% id %} -# Numbers -decimal -> "-":? [0-9]:+ ("." [0-9]:+):? {% - (data) => parseFloat( - (data[0] || "") + - data[1].join("") + - (data[2] ? "."+data[2][1].join("") : "") - ) -%} +# # Numbers +# decimal -> "-":? [0-9]:+ ("." [0-9]:+):? {% +# (data) => parseFloat( +# (data[0] || "") + +# data[1].join("") + +# (data[2] ? "."+data[2][1].join("") : "") +# ) +# %} # Double-quoted string dqstring -> "\"" dstrchar:* "\"" {% (data) => data[1].join('') %} @@ -198,9 +198,9 @@ field -> | dqstring {% (data, start) => ({type: 'LiteralExpression', name: data[0], quoted: true, quotes: 'double', location: {start, end: start + data[0].length + 2}}) %} expression -> - decimal {% (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length}, type: 'LiteralExpression', quoted: false, value: Number(data.join(''))}}) %} - | regex {% (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length}, type: 'RegexExpression', value: data.join('')}}) %} - | range {% (data) => data[0] %} +# decimal {% (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length}, type: 'LiteralExpression', quoted: false, value: Number(data.join(''))}}) %} + regex {% (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length}, type: 'RegexExpression', value: data.join('')}}) %} +# | range {% (data) => data[0] %} | unquoted_value {% (data, start, reject) => { const value = data.join(''); @@ -236,36 +236,36 @@ expression -> | sqstring {% (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length + 2}, type: 'LiteralExpression', quoted: true, quotes: 'single', value: data.join('')}}) %} | dqstring {% (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length + 2}, type: 'LiteralExpression', quoted: true, quotes: 'double', value: data.join('')}}) %} -range -> - range_open decimal " TO " decimal range_close {% (data, start) => { - return { - location: { - start, - }, - type: 'Tag', - expression: { - location: { - start: data[0].location.start, - end: data[4].location.start + 1, - }, - type: 'RangeExpression', - range: { - min: data[1], - minInclusive: data[0].inclusive, - maxInclusive: data[4].inclusive, - max: data[3], - } - } - } - } %} - -range_open -> - "[" {% (data, start) => ({location: {start}, inclusive: true}) %} - | "{" {% (data, start) => ({location: {start}, inclusive: false}) %} - -range_close -> - "]" {% (data, start) => ({location: {start}, inclusive: true}) %} - | "}" {% (data, start) => ({location: {start}, inclusive: false}) %} +# range -> +# range_open decimal " TO " decimal range_close {% (data, start) => { +# return { +# location: { +# start, +# }, +# type: 'Tag', +# expression: { +# location: { +# start: data[0].location.start, +# end: data[4].location.start + 1, +# }, +# type: 'RangeExpression', +# range: { +# min: data[1], +# minInclusive: data[0].inclusive, +# maxInclusive: data[4].inclusive, +# max: data[3], +# } +# } +# } +# } %} +# +# range_open -> +# "[" {% (data, start) => ({location: {start}, inclusive: true}) %} +# | "{" {% (data, start) => ({location: {start}, inclusive: false}) %} +# +# range_close -> +# "]" {% (data, start) => ({location: {start}, inclusive: true}) %} +# | "}" {% (data, start) => ({location: {start}, inclusive: false}) %} comparison_operator -> ( diff --git a/packages/liqe/src/grammar.ts b/packages/liqe/src/grammar.ts index 2ad071d92..e8140b7a2 100644 --- a/packages/liqe/src/grammar.ts +++ b/packages/liqe/src/grammar.ts @@ -42,22 +42,6 @@ const grammar: Grammar = { {"name": "__$ebnf$1", "symbols": ["__$ebnf$1", "whitespace_character"], "postprocess": (d) => d[0].concat([d[1]])}, {"name": "__", "symbols": ["__$ebnf$1"], "postprocess": (data) => data[0].length}, {"name": "whitespace_character", "symbols": [/[ \t\n\v\f]/], "postprocess": id}, - {"name": "decimal$ebnf$1", "symbols": [{"literal":"-"}], "postprocess": id}, - {"name": "decimal$ebnf$1", "symbols": [], "postprocess": () => null}, - {"name": "decimal$ebnf$2", "symbols": [/[0-9]/]}, - {"name": "decimal$ebnf$2", "symbols": ["decimal$ebnf$2", /[0-9]/], "postprocess": (d) => d[0].concat([d[1]])}, - {"name": "decimal$ebnf$3$subexpression$1$ebnf$1", "symbols": [/[0-9]/]}, - {"name": "decimal$ebnf$3$subexpression$1$ebnf$1", "symbols": ["decimal$ebnf$3$subexpression$1$ebnf$1", /[0-9]/], "postprocess": (d) => d[0].concat([d[1]])}, - {"name": "decimal$ebnf$3$subexpression$1", "symbols": [{"literal":"."}, "decimal$ebnf$3$subexpression$1$ebnf$1"]}, - {"name": "decimal$ebnf$3", "symbols": ["decimal$ebnf$3$subexpression$1"], "postprocess": id}, - {"name": "decimal$ebnf$3", "symbols": [], "postprocess": () => null}, - {"name": "decimal", "symbols": ["decimal$ebnf$1", "decimal$ebnf$2", "decimal$ebnf$3"], "postprocess": - (data) => parseFloat( - (data[0] || "") + - data[1].join("") + - (data[2] ? "."+data[2][1].join("") : "") - ) - }, {"name": "dqstring$ebnf$1", "symbols": []}, {"name": "dqstring$ebnf$1", "symbols": ["dqstring$ebnf$1", "dstrchar"], "postprocess": (d) => d[0].concat([d[1]])}, {"name": "dqstring", "symbols": [{"literal":"\""}, "dqstring$ebnf$1", {"literal":"\""}], "postprocess": (data) => data[1].join('')}, @@ -213,9 +197,7 @@ const grammar: Grammar = { {"name": "field", "symbols": [/[_a-zA-Z$]/, "field$ebnf$1"], "postprocess": (data, start) => ({type: 'LiteralExpression', name: data[0] + data[1].join(''), quoted: false, location: {start, end: start + (data[0] + data[1].join('')).length}})}, {"name": "field", "symbols": ["sqstring"], "postprocess": (data, start) => ({type: 'LiteralExpression', name: data[0], quoted: true, quotes: 'single', location: {start, end: start + data[0].length + 2}})}, {"name": "field", "symbols": ["dqstring"], "postprocess": (data, start) => ({type: 'LiteralExpression', name: data[0], quoted: true, quotes: 'double', location: {start, end: start + data[0].length + 2}})}, - {"name": "expression", "symbols": ["decimal"], "postprocess": (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length}, type: 'LiteralExpression', quoted: false, value: Number(data.join(''))}})}, {"name": "expression", "symbols": ["regex"], "postprocess": (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length}, type: 'RegexExpression', value: data.join('')}})}, - {"name": "expression", "symbols": ["range"], "postprocess": (data) => data[0]}, {"name": "expression", "symbols": ["unquoted_value"], "postprocess": (data, start, reject) => { const value = data.join(''); @@ -250,32 +232,6 @@ const grammar: Grammar = { } }, {"name": "expression", "symbols": ["sqstring"], "postprocess": (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length + 2}, type: 'LiteralExpression', quoted: true, quotes: 'single', value: data.join('')}})}, {"name": "expression", "symbols": ["dqstring"], "postprocess": (data, start) => ({type: 'Tag', expression: {location: {start, end: start + data.join('').length + 2}, type: 'LiteralExpression', quoted: true, quotes: 'double', value: data.join('')}})}, - {"name": "range$string$1", "symbols": [{"literal":" "}, {"literal":"T"}, {"literal":"O"}, {"literal":" "}], "postprocess": (d) => d.join('')}, - {"name": "range", "symbols": ["range_open", "decimal", "range$string$1", "decimal", "range_close"], "postprocess": (data, start) => { - return { - location: { - start, - }, - type: 'Tag', - expression: { - location: { - start: data[0].location.start, - end: data[4].location.start + 1, - }, - type: 'RangeExpression', - range: { - min: data[1], - minInclusive: data[0].inclusive, - maxInclusive: data[4].inclusive, - max: data[3], - } - } - } - } }, - {"name": "range_open", "symbols": [{"literal":"["}], "postprocess": (data, start) => ({location: {start}, inclusive: true})}, - {"name": "range_open", "symbols": [{"literal":"{"}], "postprocess": (data, start) => ({location: {start}, inclusive: false})}, - {"name": "range_close", "symbols": [{"literal":"]"}], "postprocess": (data, start) => ({location: {start}, inclusive: true})}, - {"name": "range_close", "symbols": [{"literal":"}"}], "postprocess": (data, start) => ({location: {start}, inclusive: false})}, {"name": "comparison_operator$subexpression$1", "symbols": [{"literal":":"}]}, {"name": "comparison_operator$subexpression$1$string$1", "symbols": [{"literal":":"}, {"literal":"="}], "postprocess": (d) => d.join('')}, {"name": "comparison_operator$subexpression$1", "symbols": ["comparison_operator$subexpression$1$string$1"]}, diff --git a/packages/liqe/test/liqe/filter.ts b/packages/liqe/test/liqe/filter.ts index 9ed377a60..4b597038a 100644 --- a/packages/liqe/test/liqe/filter.ts +++ b/packages/liqe/test/liqe/filter.ts @@ -93,12 +93,12 @@ test('name:/(david)|(john)/', testQuery, ['david', 'john']); test('name:/(David)|(John)/', testQuery, []); test('name:/(David)|(John)/i', testQuery, ['david', 'john']); -test('height:[200 TO 300]', testQuery, ['robert', 'noah']); -test('height:[220 TO 300]', testQuery, ['robert', 'noah']); -test('height:{220 TO 300]', testQuery, ['noah']); -test('height:[200 TO 225]', testQuery, ['robert', 'noah']); -test('height:[200 TO 225}', testQuery, ['robert']); -test('height:{220 TO 225}', testQuery, []); +test.skip('height:[200 TO 300]', testQuery, ['robert', 'noah']); +test.skip('height:[220 TO 300]', testQuery, ['robert', 'noah']); +test.skip('height:{220 TO 300]', testQuery, ['noah']); +test.skip('height:[200 TO 225]', testQuery, ['robert', 'noah']); +test.skip('height:[200 TO 225}', testQuery, ['robert']); +test.skip('height:{220 TO 225}', testQuery, []); test('NOT David', testQuery, ['john', 'mike', 'robert', 'noah', 'foo bar', 'fox']); test('-David', testQuery, ['john', 'mike', 'robert', 'noah', 'foo bar', 'fox']); @@ -115,12 +115,12 @@ test('name:David OR name:John', testQuery, ['david', 'john']); test('name:"david" OR name:"john"', testQuery, ['david', 'john']); test('name:"David" OR name:"John"', testQuery, []); -test('height:=175', testQuery, ['john', 'mike']); -test('height:>200', testQuery, ['robert', 'noah']); -test('height:>220', testQuery, ['noah']); -test('height:>=220', testQuery, ['robert', 'noah']); +test.skip('height:=175', testQuery, ['john', 'mike']); +test.skip('height:>200', testQuery, ['robert', 'noah']); +test.skip('height:>220', testQuery, ['noah']); +test.skip('height:>=220', testQuery, ['robert', 'noah']); -test('height:=175 AND NOT name:mike', testQuery, ['john']); +test.skip('height:=175 AND NOT name:mike', testQuery, ['john']); test('"member"', testQuery, ['robert']); @@ -138,9 +138,9 @@ test('subscribed:true', testQuery, ['noah']); test('email:/[^.:@\\s](?:[^:@\\s]*[^.:@\\s])?@[^.@\\s]+(?:\\.[^.@\\s]+)*/', testQuery, ['noah']); test('phoneNumber:"404-050-2611"', testQuery, ['noah']); -test('phoneNumber:404', testQuery, ['noah']); +test.skip('phoneNumber:404', testQuery, ['noah']); -test('balance:364', testQuery, ['noah']); +test.skip('balance:364', testQuery, ['noah']); test('(David)', testQuery, ['david']); test('(name:david OR name:john)', testQuery, ['david', 'john']); diff --git a/packages/liqe/test/liqe/highlight.ts b/packages/liqe/test/liqe/highlight.ts index 4ee4dc6ea..d3c989839 100644 --- a/packages/liqe/test/liqe/highlight.ts +++ b/packages/liqe/test/liqe/highlight.ts @@ -83,7 +83,7 @@ test( ], ); -test( +test.skip( 'matches or', testQuery, 'name:foo OR name:bar OR height:=180', @@ -181,7 +181,7 @@ test.skip( ], ); -test( +test.skip( 'matches number', testQuery, 'height:=180', @@ -195,7 +195,7 @@ test( ], ); -test( +test.skip( 'matches range', testQuery, 'height:[100 TO 200]', diff --git a/packages/liqe/test/liqe/parse.ts b/packages/liqe/test/liqe/parse.ts index d445e05a7..a8bdaaf4a 100644 --- a/packages/liqe/test/liqe/parse.ts +++ b/packages/liqe/test/liqe/parse.ts @@ -529,7 +529,7 @@ test.skip('foo: bar', testQuery, { type: 'Tag', }); -test('foo:123', testQuery, { +test.skip('foo:123', testQuery, { expression: { location: { end: 7, @@ -564,7 +564,7 @@ test('foo:123', testQuery, { type: 'Tag', }); -test('foo:=123', testQuery, { +test.skip('foo:=123', testQuery, { expression: { location: { end: 8, @@ -636,7 +636,7 @@ test.skip('foo:= 123', testQuery, { type: 'Tag', }); -test('foo:=-123', testQuery, { +test.skip('foo:=-123', testQuery, { expression: { location: { end: 9, @@ -671,7 +671,7 @@ test('foo:=-123', testQuery, { type: 'Tag', }); -test('foo:=123.4', testQuery, { +test.skip('foo:=123.4', testQuery, { expression: { location: { end: 10, @@ -706,7 +706,7 @@ test('foo:=123.4', testQuery, { type: 'Tag', }); -test('foo:>=123', testQuery, { +test.skip('foo:>=123', testQuery, { expression: { location: { end: 9, @@ -2415,7 +2415,7 @@ test('(foo:bar OR baz:qux) OR quuz:corge', testQuery, { type: 'LogicalExpression', }); -test('[1 TO 2]', testQuery, { +test.skip('[1 TO 2]', testQuery, { expression: { location: { end: 8, @@ -2438,7 +2438,7 @@ test('[1 TO 2]', testQuery, { type: 'Tag', }); -test('{1 TO 2]', testQuery, { +test.skip('{1 TO 2]', testQuery, { expression: { location: { end: 8, @@ -2461,7 +2461,7 @@ test('{1 TO 2]', testQuery, { type: 'Tag', }); -test('[1 TO 2}', testQuery, { +test.skip('[1 TO 2}', testQuery, { expression: { location: { end: 8, @@ -2484,7 +2484,7 @@ test('[1 TO 2}', testQuery, { type: 'Tag', }); -test('{1 TO 2}', testQuery, { +test.skip('{1 TO 2}', testQuery, { expression: { location: { end: 8, diff --git a/packages/liqe/test/liqe/serialize.ts b/packages/liqe/test/liqe/serialize.ts index 2d03d6f0d..4f8e85fa4 100644 --- a/packages/liqe/test/liqe/serialize.ts +++ b/packages/liqe/test/liqe/serialize.ts @@ -52,19 +52,19 @@ test('foo:bar', testQuery); // https://github.com/gajus/liqe/issues/19 test.skip('foo: bar', testQuery); -test('foo:123', testQuery); +test.skip('foo:123', testQuery); -test('foo:=123', testQuery); +test.skip('foo:=123', testQuery); // https://github.com/gajus/liqe/issues/18 // https://github.com/gajus/liqe/issues/19 test.skip('foo:= 123', testQuery); -test('foo:=-123', testQuery); +test.skip('foo:=-123', testQuery); -test('foo:=123.4', testQuery); +test.skip('foo:=123.4', testQuery); -test('foo:>=123', testQuery); +test.skip('foo:>=123', testQuery); test('foo:true', testQuery); @@ -124,10 +124,10 @@ test('(foo:bar OR (baz:qux OR quuz:corge))', testQuery); test('((foo:bar OR baz:qux) OR quuz:corge)', testQuery); -test('[1 TO 2]', testQuery); +test.skip('[1 TO 2]', testQuery); -test('{1 TO 2]', testQuery); +test.skip('{1 TO 2]', testQuery); -test('[1 TO 2}', testQuery); +test.skip('[1 TO 2}', testQuery); -test('{1 TO 2}', testQuery); +test.skip('{1 TO 2}', testQuery);