@@ -53,7 +53,7 @@ def tokenize(self, program):
5353 def __next__ (self ):
5454 return next (self ._iterator )
5555
56- def _get_tokens (self , program ):
56+ def _get_tokens (self , program ) -> typing . Generator [ Symbol , None , None ] :
5757 buf : typing .List [str ] = []
5858 for match in token_pat .finditer (program ):
5959 value , identifier , symbol = match .groups ()
@@ -117,7 +117,7 @@ def nud(self):
117117 )
118118
119119 def led (self , left ):
120- raise SyntaxError ("Unknown operator (%r)." % self .id )
120+ raise SyntaxError ("Unknown operator (%r)." % self .identifier )
121121
122122 def __repr__ (self ):
123123 return "Symbol(identifier=%r, value=%r)" % (self .identifier , self .value )
@@ -126,7 +126,8 @@ def __repr__(self):
126126class Parser :
127127 def __init__ (self ):
128128 self .symbol_table : typing .Dict [str , typing .Type [Symbol ]] = {}
129- self ._peek = None
129+ self ._peek : typing .Optional [Symbol ] = None
130+ self .token : typing .Optional [Symbol ] = None
130131 self .tokenizer = Tokenizer (self )
131132
132133 def parse (self , program ):
@@ -138,6 +139,7 @@ def next(self):
138139 return next (self .tokenizer )
139140
140141 def expression (self , rbp = 0 ):
142+ assert self .token is not None
141143 t = self .token
142144 self .advance ()
143145 left = t .nud ()
@@ -151,6 +153,7 @@ def expression(self, rbp=0):
151153 return left
152154
153155 def advance (self , identifier = None ):
156+ assert self .token is not None
154157 if identifier and self .token .identifier != identifier :
155158 raise SyntaxError (
156159 "Expected %r, received %r" % (identifier , self .token .identifier )
@@ -170,9 +173,9 @@ def peek(self):
170173
171174 def define (self , sid , bp = 0 , symbol_class = Symbol ):
172175 symbol_table = self .symbol_table
173- sym : Symbol = type (
176+ sym : Symbol = typing . cast ( Symbol , type (
174177 symbol_class .__name__ , (symbol_class ,), {"identifier" : sid , "lbp" : bp }
175- )
178+ ))
176179 symbol_table [sid ] = sym
177180
178181 def wrapper (val ):
@@ -191,7 +194,7 @@ class Infix(Symbol):
191194 rightAssoc = False
192195 _logical_map = {"and" : ast .And (), "or" : ast .Or ()}
193196
194- def led (self , left ):
197+ def led (self , left : Symbol ):
195198 self .first = left
196199 rbp = self .lbp - int (self .rightAssoc )
197200 self .second = self .parser .expression (rbp )
@@ -200,7 +203,7 @@ def led(self, left):
200203 def __repr__ (self ):
201204 return "<'%s'>(%s, %s)" % (self .value , self .first , self .second )
202205
203- def ast (self , context = None ):
206+ def ast (self , context : Context ):
204207 lhs = self .first .ast (context )
205208 if self .second :
206209 rhs = self .second .ast (context )
@@ -262,7 +265,9 @@ def __repr__(self):
262265
263266
264267class LParen (Symbol ):
265- def led (self , left ):
268+ first : typing .Union [Symbol , list ]
269+
270+ def led (self , left : Symbol ):
266271 self .first = left
267272 self .second = []
268273 while self .parser .token .identifier != ")" :
@@ -289,7 +294,7 @@ def nud(self):
289294 else :
290295 return self .first [0 ]
291296
292- def ast (self , context = None ):
297+ def ast (self , context : Context ):
293298 if not self .second :
294299 return ast .Tuple (
295300 elts = [item .ast (context ) for item in self .first ], ctx = ast .Load ()
@@ -311,7 +316,7 @@ class LiteralToken(Symbol):
311316 def nud (self ):
312317 return self
313318
314- def ast (self , context = None ):
319+ def ast (self , context : Context ):
315320 if self .value .isdigit ():
316321 return ast .Num (n = int (self .value ))
317322 if self .value in ["true" , "false" ]:
@@ -338,7 +343,7 @@ class NameToken(Symbol):
338343 def nud (self ):
339344 return self
340345
341- def ast (self , context = None ):
346+ def ast (self , context : Context ):
342347 return ast .Name (id = self .value , ctx = ast .Load ())
343348
344349
@@ -349,7 +354,7 @@ class Constant(Symbol):
349354 def nud (self ):
350355 return self
351356
352- def ast (self , context = None ):
357+ def ast (self , context : Context ):
353358 return ast .Constant (value = None , ctx = ast .Load ())
354359
355360
@@ -360,7 +365,7 @@ def nud(self):
360365 self .first = self .parser .expression (2000 )
361366 return self
362367
363- def ast (self , context ):
368+ def ast (self , context : Context ):
364369 node = self .first .ast ()
365370 node .elts .insert (0 , ast .Str (s = self .value ))
366371 return node
@@ -445,7 +450,7 @@ def filter_field(
445450 if schema is None :
446451 schema = self .schema
447452
448- schema_field = None
453+ schema_field : typing . Optional [ marshmallow . fields . Field ] = None
449454
450455 for i , key in enumerate (path ):
451456 fields = self ._get_schema_fields (schema )
@@ -454,6 +459,7 @@ def filter_field(
454459 # Query field doesn't exist
455460 if schema_field is None :
456461 raise ValueError ("No field %s on schema %s" % (key , schema ))
462+ assert schema_field is not None
457463
458464 if isinstance (schema_field , marshmallow .fields .Nested ):
459465 schema = schema_field .schema
0 commit comments