2525import re
2626import types
2727from typing import Iterator
28+ from typing import Literal
2829from typing import Mapping
2930from typing import NoReturn
31+ from typing import overload
3032from typing import Protocol
3133from typing import Sequence
3234
@@ -132,6 +134,14 @@ def lex(self, input: str) -> Iterator[Token]:
132134 )
133135 yield Token (TokenType .EOF , "" , pos )
134136
137+ @overload
138+ def accept (self , type : TokenType , * , reject : Literal [True ]) -> Token : ...
139+
140+ @overload
141+ def accept (
142+ self , type : TokenType , * , reject : Literal [False ] = False
143+ ) -> Token | None : ...
144+
135145 def accept (self , type : TokenType , * , reject : bool = False ) -> Token | None :
136146 if self .current .type is type :
137147 token = self .current
@@ -208,7 +218,6 @@ def not_expr(s: Scanner) -> ast.expr:
208218
209219def single_kwarg (s : Scanner ) -> ast .keyword :
210220 keyword_name = s .accept (TokenType .IDENT , reject = True )
211- assert keyword_name is not None # for mypy
212221 if not keyword_name .value .isidentifier () or keyword .iskeyword (keyword_name .value ):
213222 raise ParseError (
214223 keyword_name .pos + 1 ,
@@ -220,7 +229,6 @@ def single_kwarg(s: Scanner) -> ast.keyword:
220229 value : str | int | bool | None = value_token .value [1 :- 1 ] # strip quotes
221230 else :
222231 value_token = s .accept (TokenType .IDENT , reject = True )
223- assert value_token is not None # for mypy
224232 if (
225233 (number := value_token .value ).isdigit ()
226234 or number .startswith ("-" )
0 commit comments