@@ -16,6 +16,7 @@ enum TokenType {
16
16
VECTOR = 'VECTOR' ,
17
17
FUZZY = 'FUZZY' ,
18
18
WILDCARD = 'WILDCARD' ,
19
+ WILDCARD_EMPTY = 'WILDCARD_EMPTY' , // <WILDCARD>}\n
19
20
PREFIX = 'PREFIX' ,
20
21
GEO_EXPR = 'GEO_EXPR' ,
21
22
IDS_EXPR = 'IDS_EXPR' ,
@@ -190,6 +191,13 @@ class Lexer {
190
191
break
191
192
case '-' :// TODO: This should be MINUS token
192
193
t = new Token ( TokenType . IDENTIFIER , this . C )
194
+ let p = this . PeekChar ( )
195
+ if ( p !== null && isDigit ( p ) ) {
196
+ this . ReadChar ( )
197
+ const n = this . ReadNumber ( )
198
+ t = new Token ( TokenType . NUMBER , '-' + n )
199
+ return t
200
+ }
193
201
break
194
202
case ',' :
195
203
t = new Token ( TokenType . COMMA , this . C )
@@ -557,6 +565,8 @@ class Parser {
557
565
Exprs . push ( this . parseLexrangeExpr ( ) )
558
566
} else if ( this . CurrentToken . T === TokenType . NUMBER ) {
559
567
Exprs . push ( new Expr ( this . CurrentToken . Data . toString ( ) , EntityType . NUMBER ) )
568
+ } else if ( this . CurrentToken . T === TokenType . LESS ) {
569
+ Exprs . push ( this . parseWildcardEmpty ( ) )
560
570
}
561
571
562
572
this . nextToken ( )
@@ -630,6 +640,30 @@ class Parser {
630
640
return new Expr ( ids . join ( ',' ) , EntityType . IDS )
631
641
}
632
642
643
+ // This is a special result.
644
+ //
645
+ // Example output: <WILDCARD> }\n
646
+ parseWildcardEmpty ( ) {
647
+ // TODO: Check for WILDCARD_EMPTY
648
+ this . assertToken ( TokenType . LESS )
649
+
650
+ this . nextToken ( )
651
+
652
+ this . assertToken ( TokenType . WILDCARD )
653
+
654
+ this . nextToken ( )
655
+
656
+ this . assertToken ( TokenType . GREATER )
657
+
658
+ this . nextToken ( )
659
+
660
+ // TODO: Once fixed by redisearch team, remove this.
661
+ this . assertToken ( TokenType . RBRACE )
662
+
663
+
664
+ return new Expr ( "<WILDCARD>" , EntityType . WILDCARD )
665
+ }
666
+
633
667
parseExpr ( ) {
634
668
635
669
this . assertToken ( TokenType . IDENTIFIER )
@@ -822,6 +856,8 @@ function Parse(data: string): SearchExpr {
822
856
return p . parseIdsExpr ( )
823
857
} else if ( p . CurrentToken . T === TokenType . LEXRANGE_EXPR ) {
824
858
return p . parseLexrangeExpr ( )
859
+ } else if ( p . CurrentToken . T === TokenType . LESS ) {
860
+ return p . parseWildcardEmpty ( )
825
861
} else {
826
862
return p . parseExpr ( )
827
863
}
0 commit comments