https://github.com/python/cpython/commit/1d5dc5f1c37ce28a635386189020cf49b3f7f1c3 commit: 1d5dc5f1c37ce28a635386189020cf49b3f7f1c3 branch: main author: Bénédikt Tran <10796600+picn...@users.noreply.github.com> committer: AA-Turner <9087854+aa-tur...@users.noreply.github.com> date: 2025-04-18T18:14:54+01:00 summary:
gh-132396: Resolve 'redefinition of unused name' errors in ``Lib/test/`` (#132397) Co-authored-by: Adam Turner <9087854+aa-tur...@users.noreply.github.com> files: M .pre-commit-config.yaml M Lib/test/.ruff.toml M Lib/test/test_dataclasses/__init__.py M Lib/test/test_descr.py M Lib/test/test_enum.py M Lib/test/test_import/__init__.py M Lib/test/test_pkg.py M Lib/test/test_with.py M Lib/test/test_yield_from.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fb44c27704d455..ec53cf58bf78a6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.1 + rev: v0.11.4 hooks: - id: ruff name: Run Ruff (lint) on Doc/ diff --git a/Lib/test/.ruff.toml b/Lib/test/.ruff.toml index 1c9bac507209b1..fa8b2b42579b4a 100644 --- a/Lib/test/.ruff.toml +++ b/Lib/test/.ruff.toml @@ -4,19 +4,12 @@ extend-exclude = [ "test_clinic.py", # Excluded (these aren't actually executed, they're just "data files") "tokenizedata/*.py", - # Failed to lint + # Non UTF-8 files "encoded_modules/module_iso_8859_1.py", "encoded_modules/module_koi8_r.py", - # TODO Fix: F811 Redefinition of unused name - "test_buffer.py", - "test_dataclasses/__init__.py", - "test_descr.py", - "test_enum.py", - "test_functools.py", + # New grammar constructions may not yet be recognized by Ruff, + # and tests re-use the same names as only the grammar is being checked. "test_grammar.py", - "test_import/__init__.py", - "test_pkg.py", - "test_yield_from.py", ] [lint] diff --git a/Lib/test/test_dataclasses/__init__.py b/Lib/test/test_dataclasses/__init__.py index a97b77a68f016c..99fefb57fd0f09 100644 --- a/Lib/test/test_dataclasses/__init__.py +++ b/Lib/test/test_dataclasses/__init__.py @@ -771,12 +771,12 @@ class Point: # Because this is a ClassVar, it can be mutable. @dataclass - class C: + class UsesMutableClassVar: z: ClassVar[typ] = typ() # Because this is a ClassVar, it can be mutable. @dataclass - class C: + class UsesMutableClassVarWithSubType: x: ClassVar[typ] = Subclass() def test_deliberately_mutable_defaults(self): @@ -4864,7 +4864,7 @@ class A: # But this usage is okay, since it's not using KW_ONLY. @dataclass - class A: + class NoDuplicateKwOnlyAnnotation: a: int _: KW_ONLY b: int @@ -4872,13 +4872,13 @@ class A: # And if inheriting, it's okay. @dataclass - class A: + class BaseUsesKwOnly: a: int _: KW_ONLY b: int c: int @dataclass - class B(A): + class SubclassUsesKwOnly(BaseUsesKwOnly): _: KW_ONLY d: int diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 749f27bbd3a662..8e9d44a583cb31 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1192,10 +1192,9 @@ class C(object): pass else: self.fail("[''] slots not caught") - class C(object): + + class WithValidIdentifiers(object): __slots__ = ["a", "a_b", "_a", "A0123456789Z"] - # XXX(nnorwitz): was there supposed to be something tested - # from the class above? # Test a single string is not expanded as a sequence. class C(object): diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 1a0026987cd7eb..dde674164f4a52 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -1352,7 +1352,7 @@ class Color(Enum): red = 1 green = 2 blue = 3 - def red(self): + def red(self): # noqa: F811 return 'red' # with self.assertRaises(TypeError): @@ -1360,7 +1360,7 @@ class Color(Enum): @enum.property def red(self): return 'redder' - red = 1 + red = 1 # noqa: F811 green = 2 blue = 3 diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index 33df4fef0b247c..a745760289b5b8 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -444,7 +444,7 @@ def test_double_const(self): # (SF bug 422177). from test.test_import.data import double_const unload('test.test_import.data.double_const') - from test.test_import.data import double_const + from test.test_import.data import double_const # noqa: F811 def test_import(self): def test_with_extension(ext): @@ -573,7 +573,7 @@ def test_issue31286(self): # import in a 'for' loop resulted in segmentation fault for i in range(2): - import test.support.script_helper as x + import test.support.script_helper as x # noqa: F811 def test_failing_reload(self): # A failing reload should leave the module object in sys.modules. diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py index a7a1c2affbe1fb..d2b724db40d3e9 100644 --- a/Lib/test/test_pkg.py +++ b/Lib/test/test_pkg.py @@ -190,7 +190,6 @@ def test_5(self): ] self.mkhier(hier) - import t5 s = """ from t5 import * self.assertEqual(dir(), ['foo', 'self', 'string', 't5']) diff --git a/Lib/test/test_with.py b/Lib/test/test_with.py index e3e2de09496728..1d2ce9eccc4507 100644 --- a/Lib/test/test_with.py +++ b/Lib/test/test_with.py @@ -174,7 +174,7 @@ def shouldThrow(): # Ruff complains that we're redefining `self.foo` here, # but the whole point of the test is to check that `self.foo` # is *not* redefined (because `__enter__` raises) - with ct as self.foo: # ruff: noqa: F811 + with ct as self.foo: # noqa: F811 pass self.assertRaises(RuntimeError, shouldThrow) self.assertEqual(self.foo, None) diff --git a/Lib/test/test_yield_from.py b/Lib/test/test_yield_from.py index 06edc18df14944..74c9fa16987638 100644 --- a/Lib/test/test_yield_from.py +++ b/Lib/test/test_yield_from.py @@ -896,6 +896,7 @@ def two(): yield 2 g1 = one() self.assertEqual(list(g1), [0, 1, 2, 3]) + # Check with send g1 = one() res = [next(g1)] @@ -905,6 +906,8 @@ def two(): except StopIteration: pass self.assertEqual(res, [0, 1, 2, 3]) + + def test_delegating_generators_claim_to_be_running_with_throw(self): # Check with throw class MyErr(Exception): pass @@ -941,8 +944,10 @@ def two(): except: self.assertEqual(res, [0, 1, 2, 3]) raise + + def test_delegating_generators_claim_to_be_running_with_close(self): # Check with close - class MyIt(object): + class MyIt: def __iter__(self): return self def __next__(self): _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com