3434from .segments import JSONPathChildSegment
3535from .segments import JSONPathRecursiveDescentSegment
3636from .segments import JSONPathSegment
37- from .selectors import Filter
37+ from .selectors import FilterSelector
3838from .selectors import IndexSelector
3939from .selectors import JSONPathSelector
4040from .selectors import NameSelector
@@ -113,9 +113,6 @@ def __init__(self, *, env: JSONPathEnvironment) -> None:
113113 TokenType .TRUE : self .parse_boolean ,
114114 }
115115
116- # TODO: can a function argument be a grouped expression?
117- # TODO: can a function argument contain a !?
118-
119116 self .function_argument_map : Dict [
120117 TokenType , Callable [[TokenStream ], Expression ]
121118 ] = {
@@ -291,7 +288,7 @@ def parse_bracketed_selection(self, stream: TokenStream) -> List[JSONPathSelecto
291288 )
292289 )
293290 elif stream .current .type_ == TokenType .FILTER :
294- selectors .append (self .parse_filter (stream ))
291+ selectors .append (self .parse_filter_selector (stream ))
295292 elif stream .current .type_ == TokenType .EOF :
296293 raise JSONPathSyntaxError (
297294 "unexpected end of query" , token = stream .current
@@ -320,9 +317,9 @@ def parse_bracketed_selection(self, stream: TokenStream) -> List[JSONPathSelecto
320317
321318 return selectors
322319
323- def parse_filter (self , stream : TokenStream ) -> Filter :
320+ def parse_filter_selector (self , stream : TokenStream ) -> FilterSelector :
324321 tok = stream .next_token ()
325- expr = self .parse_filter_selector (stream )
322+ expr = self .parse_filter_expression (stream )
326323
327324 if isinstance (expr , FunctionExtension ):
328325 func = self .env .function_extensions .get (expr .name )
@@ -342,7 +339,7 @@ def parse_filter(self, stream: TokenStream) -> Filter:
342339 token = expr .token ,
343340 )
344341
345- return Filter (
342+ return FilterSelector (
346343 env = self .env ,
347344 token = tok ,
348345 expression = FilterExpression (token = expr .token , expression = expr ),
@@ -392,15 +389,17 @@ def parse_prefix_expression(self, stream: TokenStream) -> Expression:
392389 return PrefixExpression (
393390 tok ,
394391 operator = "!" ,
395- right = self .parse_filter_selector (stream , precedence = self .PRECEDENCE_PREFIX ),
392+ right = self .parse_filter_expression (
393+ stream , precedence = self .PRECEDENCE_PREFIX
394+ ),
396395 )
397396
398397 def parse_infix_expression (
399398 self , stream : TokenStream , left : Expression
400399 ) -> Expression :
401400 tok = stream .next_token ()
402401 precedence = self .PRECEDENCES .get (tok .type_ , self .PRECEDENCE_LOWEST )
403- right = self .parse_filter_selector (stream , precedence )
402+ right = self .parse_filter_expression (stream , precedence )
404403 operator = self .BINARY_OPERATORS [tok .type_ ]
405404
406405 if operator in self .COMPARISON_OPERATORS :
@@ -425,7 +424,7 @@ def parse_infix_expression(
425424
426425 def parse_grouped_expression (self , stream : TokenStream ) -> Expression :
427426 stream .next_token ()
428- expr = self .parse_filter_selector (stream )
427+ expr = self .parse_filter_expression (stream )
429428 stream .next_token ()
430429
431430 while stream .current .type_ != TokenType .RPAREN :
@@ -497,7 +496,7 @@ def parse_function_extension(self, stream: TokenStream) -> Expression:
497496 ),
498497 )
499498
500- def parse_filter_selector (
499+ def parse_filter_expression (
501500 self , stream : TokenStream , precedence : int = PRECEDENCE_LOWEST
502501 ) -> Expression :
503502 try :
0 commit comments