Skip to content

Commit 85b0663

Browse files
Mark stdlib token constants as Final (#14324)
1 parent d0f9f40 commit 85b0663

2 files changed

Lines changed: 82 additions & 76 deletions

File tree

stdlib/token.pyi

Lines changed: 76 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import sys
2+
from typing import Final
23

34
__all__ = [
45
"AMPER",
@@ -81,87 +82,87 @@ if sys.version_info >= (3, 12):
8182
if sys.version_info >= (3, 14):
8283
__all__ += ["TSTRING_START", "TSTRING_MIDDLE", "TSTRING_END"]
8384

84-
ENDMARKER: int
85-
NAME: int
86-
NUMBER: int
87-
STRING: int
88-
NEWLINE: int
89-
INDENT: int
90-
DEDENT: int
91-
LPAR: int
92-
RPAR: int
93-
LSQB: int
94-
RSQB: int
95-
COLON: int
96-
COMMA: int
97-
SEMI: int
98-
PLUS: int
99-
MINUS: int
100-
STAR: int
101-
SLASH: int
102-
VBAR: int
103-
AMPER: int
104-
LESS: int
105-
GREATER: int
106-
EQUAL: int
107-
DOT: int
108-
PERCENT: int
109-
LBRACE: int
110-
RBRACE: int
111-
EQEQUAL: int
112-
NOTEQUAL: int
113-
LESSEQUAL: int
114-
GREATEREQUAL: int
115-
TILDE: int
116-
CIRCUMFLEX: int
117-
LEFTSHIFT: int
118-
RIGHTSHIFT: int
119-
DOUBLESTAR: int
120-
PLUSEQUAL: int
121-
MINEQUAL: int
122-
STAREQUAL: int
123-
SLASHEQUAL: int
124-
PERCENTEQUAL: int
125-
AMPEREQUAL: int
126-
VBAREQUAL: int
127-
CIRCUMFLEXEQUAL: int
128-
LEFTSHIFTEQUAL: int
129-
RIGHTSHIFTEQUAL: int
130-
DOUBLESTAREQUAL: int
131-
DOUBLESLASH: int
132-
DOUBLESLASHEQUAL: int
133-
AT: int
134-
RARROW: int
135-
ELLIPSIS: int
136-
ATEQUAL: int
85+
ENDMARKER: Final[int]
86+
NAME: Final[int]
87+
NUMBER: Final[int]
88+
STRING: Final[int]
89+
NEWLINE: Final[int]
90+
INDENT: Final[int]
91+
DEDENT: Final[int]
92+
LPAR: Final[int]
93+
RPAR: Final[int]
94+
LSQB: Final[int]
95+
RSQB: Final[int]
96+
COLON: Final[int]
97+
COMMA: Final[int]
98+
SEMI: Final[int]
99+
PLUS: Final[int]
100+
MINUS: Final[int]
101+
STAR: Final[int]
102+
SLASH: Final[int]
103+
VBAR: Final[int]
104+
AMPER: Final[int]
105+
LESS: Final[int]
106+
GREATER: Final[int]
107+
EQUAL: Final[int]
108+
DOT: Final[int]
109+
PERCENT: Final[int]
110+
LBRACE: Final[int]
111+
RBRACE: Final[int]
112+
EQEQUAL: Final[int]
113+
NOTEQUAL: Final[int]
114+
LESSEQUAL: Final[int]
115+
GREATEREQUAL: Final[int]
116+
TILDE: Final[int]
117+
CIRCUMFLEX: Final[int]
118+
LEFTSHIFT: Final[int]
119+
RIGHTSHIFT: Final[int]
120+
DOUBLESTAR: Final[int]
121+
PLUSEQUAL: Final[int]
122+
MINEQUAL: Final[int]
123+
STAREQUAL: Final[int]
124+
SLASHEQUAL: Final[int]
125+
PERCENTEQUAL: Final[int]
126+
AMPEREQUAL: Final[int]
127+
VBAREQUAL: Final[int]
128+
CIRCUMFLEXEQUAL: Final[int]
129+
LEFTSHIFTEQUAL: Final[int]
130+
RIGHTSHIFTEQUAL: Final[int]
131+
DOUBLESTAREQUAL: Final[int]
132+
DOUBLESLASH: Final[int]
133+
DOUBLESLASHEQUAL: Final[int]
134+
AT: Final[int]
135+
RARROW: Final[int]
136+
ELLIPSIS: Final[int]
137+
ATEQUAL: Final[int]
137138
if sys.version_info < (3, 13):
138-
AWAIT: int
139-
ASYNC: int
140-
OP: int
141-
ERRORTOKEN: int
142-
N_TOKENS: int
143-
NT_OFFSET: int
144-
tok_name: dict[int, str]
145-
COMMENT: int
146-
NL: int
147-
ENCODING: int
148-
TYPE_COMMENT: int
149-
TYPE_IGNORE: int
150-
COLONEQUAL: int
151-
EXACT_TOKEN_TYPES: dict[str, int]
139+
AWAIT: Final[int]
140+
ASYNC: Final[int]
141+
OP: Final[int]
142+
ERRORTOKEN: Final[int]
143+
N_TOKENS: Final[int]
144+
NT_OFFSET: Final[int]
145+
tok_name: Final[dict[int, str]]
146+
COMMENT: Final[int]
147+
NL: Final[int]
148+
ENCODING: Final[int]
149+
TYPE_COMMENT: Final[int]
150+
TYPE_IGNORE: Final[int]
151+
COLONEQUAL: Final[int]
152+
EXACT_TOKEN_TYPES: Final[dict[str, int]]
152153
if sys.version_info >= (3, 10):
153-
SOFT_KEYWORD: int
154+
SOFT_KEYWORD: Final[int]
154155

155156
if sys.version_info >= (3, 12):
156-
EXCLAMATION: int
157-
FSTRING_END: int
158-
FSTRING_MIDDLE: int
159-
FSTRING_START: int
157+
EXCLAMATION: Final[int]
158+
FSTRING_END: Final[int]
159+
FSTRING_MIDDLE: Final[int]
160+
FSTRING_START: Final[int]
160161

161162
if sys.version_info >= (3, 14):
162-
TSTRING_START: int
163-
TSTRING_MIDDLE: int
164-
TSTRING_END: int
163+
TSTRING_START: Final[int]
164+
TSTRING_MIDDLE: Final[int]
165+
TSTRING_END: Final[int]
165166

166167
def ISTERMINAL(x: int) -> bool: ...
167168
def ISNONTERMINAL(x: int) -> bool: ...

stdlib/tokenize.pyi

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@ from _typeshed import FileDescriptorOrPath
33
from collections.abc import Callable, Generator, Iterable, Sequence
44
from re import Pattern
55
from token import *
6-
from token import EXACT_TOKEN_TYPES as EXACT_TOKEN_TYPES
76
from typing import Any, NamedTuple, TextIO, type_check_only
87
from typing_extensions import TypeAlias
98

9+
if sys.version_info < (3, 12):
10+
# Avoid double assignment to Final name by imports, which pyright objects to.
11+
# EXACT_TOKEN_TYPES is already defined by 'from token import *' above
12+
# in Python 3.12+.
13+
from token import EXACT_TOKEN_TYPES as EXACT_TOKEN_TYPES
14+
1015
__all__ = [
1116
"AMPER",
1217
"AMPEREQUAL",

0 commit comments

Comments
 (0)