Files
python-flake8/gen-pycodestyle-plugin
Dirk Mueller 2e625e2744 - update to 7.3.0:
* pycodestyle has been updated to >= 2.4.0, < 2.5.0
  * Pyflakes has been updated to >= 2.0.0, < 2.1.0
  * Add ``paths`` to allow local plugins to exist outside of
    ``sys.path`` (See also :issue:`1067`, :issue:`1237`)
  * Copy ``setup.cfg`` files to the temporary git hook execution
    directory (See also :issue:`1299`)
  * Only skip a file if ``# flake8: noqa`` is on a line by itself
  * Provide a better user experience for broken plugins
  * Report ``E902`` when a file passed on the command line does
    not exist (See also :issue:`645`, :issue:`878`)
  * Add ``--extend-ignore`` for extending the default ``ignore``
    instead of overriding it (See also :issue:`1061`, :issue:`1180`)
  * Respect a formatter's newline setting when printing
  * Fix leaking of processes in the legacy api
  * Fix a ``SyntaxWarning`` for an invalid escape sequence
  * Fix ``DeprecationWarning`` due to import of ``abc`` classes
  * Defer ``setuptools`` import to improve flake8 startup time
  * Fix inconsistent line endings in ``FileProcessor.lines``
    when running under python 3.x

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-flake8?expand=0&rev=101
2025-07-13 12:35:04 +00:00

99 lines
2.6 KiB
Python

#!/usr/bin/env python3
from __future__ import annotations
import inspect
import os.path
from collections.abc import Generator
from typing import Any
from typing import Callable
from typing import NamedTuple
import pycodestyle
def _too_long(s: str) -> str:
if len(s) >= 80:
return f"{s} # noqa: E501"
else:
return s
class Call(NamedTuple):
name: str
is_generator: bool
params: tuple[str, ...]
def to_src(self) -> str:
params_s = ", ".join(self.params)
if self.is_generator:
return _too_long(f" yield from _{self.name}({params_s})")
else:
lines = (
_too_long(f" ret = _{self.name}({params_s})"),
" if ret is not None:",
" yield ret",
)
return "\n".join(lines)
@classmethod
def from_func(cls, func: Callable[..., Any]) -> Call:
spec = inspect.getfullargspec(func)
params = tuple(spec.args)
return cls(func.__name__, inspect.isgeneratorfunction(func), params)
def lines() -> Generator[str]:
logical = []
physical = []
logical = [
Call.from_func(check) for check in pycodestyle._checks["logical_line"]
]
physical = [
Call.from_func(check) for check in pycodestyle._checks["physical_line"]
]
assert not pycodestyle._checks["tree"]
yield f'"""Generated using ./bin/{os.path.basename(__file__)}."""'
yield "# fmt: off"
yield "from __future__ import annotations"
yield ""
yield "from collections.abc import Generator"
yield "from typing import Any"
yield ""
imports = sorted(call.name for call in logical + physical)
for name in imports:
yield _too_long(f"from pycodestyle import {name} as _{name}")
yield ""
yield ""
yield "def pycodestyle_logical("
logical_params = {param for call in logical for param in call.params}
for param in sorted(logical_params):
yield f" {param}: Any,"
yield ") -> Generator[tuple[int, str]]:"
yield ' """Run pycodestyle logical checks."""'
for call in sorted(logical):
yield call.to_src()
yield ""
yield ""
yield "def pycodestyle_physical("
physical_params = {param for call in physical for param in call.params}
for param in sorted(physical_params):
yield f" {param}: Any,"
yield ") -> Generator[tuple[int, str]]:"
yield ' """Run pycodestyle physical checks."""'
for call in sorted(physical):
yield call.to_src()
def main() -> int:
for line in lines():
print(line)
return 0
if __name__ == "__main__":
raise SystemExit(main())