|
7 | 7 | AssignmentExpr,
|
8 | 8 | AssignmentStmt,
|
9 | 9 | BreakStmt,
|
| 10 | + ClassDef, |
10 | 11 | Context,
|
11 | 12 | ContinueStmt,
|
12 | 13 | DictionaryComprehension,
|
@@ -258,13 +259,16 @@ def variable_may_be_undefined(self, name: str, context: Context) -> None:
|
258 | 259 | if self.msg.errors.is_error_code_enabled(errorcodes.PARTIALLY_DEFINED):
|
259 | 260 | self.msg.variable_may_be_undefined(name, context)
|
260 | 261 |
|
| 262 | + def process_definition(self, name: str) -> None: |
| 263 | + # Was this name previously used? If yes, it's a use-before-definition error. |
| 264 | + refs = self.tracker.pop_undefined_ref(name) |
| 265 | + for ref in refs: |
| 266 | + self.var_used_before_def(name, ref) |
| 267 | + self.tracker.record_definition(name) |
| 268 | + |
261 | 269 | def process_lvalue(self, lvalue: Lvalue | None) -> None:
|
262 | 270 | if isinstance(lvalue, NameExpr):
|
263 |
| - # Was this name previously used? If yes, it's a use-before-definition error. |
264 |
| - refs = self.tracker.pop_undefined_ref(lvalue.name) |
265 |
| - for ref in refs: |
266 |
| - self.var_used_before_def(lvalue.name, ref) |
267 |
| - self.tracker.record_definition(lvalue.name) |
| 271 | + self.process_definition(lvalue.name) |
268 | 272 | elif isinstance(lvalue, StarExpr):
|
269 | 273 | self.process_lvalue(lvalue.expr)
|
270 | 274 | elif isinstance(lvalue, (ListExpr, TupleExpr)):
|
@@ -435,6 +439,10 @@ def visit_with_stmt(self, o: WithStmt) -> None:
|
435 | 439 | self.process_lvalue(idx)
|
436 | 440 | o.body.accept(self)
|
437 | 441 |
|
| 442 | + def visit_class_def(self, o: ClassDef) -> None: |
| 443 | + self.process_definition(o.name) |
| 444 | + super().visit_class_def(o) |
| 445 | + |
438 | 446 | def visit_import(self, o: Import) -> None:
|
439 | 447 | for mod, alias in o.ids:
|
440 | 448 | if alias is not None:
|
|
0 commit comments