Repository navigation
v1.15.0 — 88 checks
18 new checks (CH071-CH088), bringing the total from 70 to 88.
Same discipline as every prior batch: every check verified empirically before implementation, corpus-scanned against ~30 real open-source frameworks, and narrowed against real false positives rather than shipped on first pass. Two candidate checks (enum member aliasing, bare-except swallowing asyncio.CancelledError) were built, corpus-scanned, and rejected outright — both independently rediscovered false-positive patterns this project had already rejected once before, using different real-world evidence. See docs/FINDINGS.md for the full precision notes.
New checks catch, among others:
- A decorator's wrapper missing
@functools.wraps— real hits across 17 projects @abstractmethodon a class with noABCMetato enforce it — real hits across 17 more- A duplicate method definition silently shadowing the first
- Dataclass/NamedTuple field ordering (
kw_only,init=False,ClassVar, theKW_ONLYsentinel, all handled) __slots__conflicting with a class-level variable- Python 2 special methods (
__nonzero__,__unicode__, ...) Python 3 silently never calls - A
defaultdictsubscript read as anifcondition inserting the key as a side effect json.dumps()on a rawdatetime- A weakref to an object with no other reference
- A regex flag landing in
re.sub'scountslot instead offlags
Zero runtime dependencies, verified via a fresh pip install into a clean venv.