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/
"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]
# 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):
# But this usage is okay, since it's not using KW_ONLY.
@dataclass
- class A:
+ class NoDuplicateKwOnlyAnnotation:
a: int
_: KW_ONLY
b: int
# 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
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):
red = 1
green = 2
blue = 3
- def red(self):
+ def red(self): # noqa: F811
return 'red'
#
with self.assertRaises(TypeError):
@enum.property
def red(self):
return 'redder'
- red = 1
+ red = 1 # noqa: F811
green = 2
blue = 3
# (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):
# 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.
]
self.mkhier(hier)
- import t5
s = """
from t5 import *
self.assertEqual(dir(), ['foo', 'self', 'string', 't5'])
# 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)
yield 2
g1 = one()
self.assertEqual(list(g1), [0, 1, 2, 3])
+
# Check with send
g1 = one()
res = [next(g1)]
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
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):