pylama_mccabe.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. """Code complexity checking."""
  2. from argparse import ArgumentError
  3. from mccabe import McCabeChecker
  4. from pylama.context import RunContext
  5. from pylama.lint import ArgumentParser
  6. from pylama.lint import LinterV2 as Abstract
  7. class Linter(Abstract):
  8. """Run complexity checking."""
  9. name = "mccabe"
  10. @classmethod
  11. def add_args(cls, parser: ArgumentParser):
  12. """Add --max-complexity option."""
  13. try:
  14. parser.add_argument(
  15. "--max-complexity", default=10, type=int, help="Max complexity threshold"
  16. )
  17. except ArgumentError:
  18. pass
  19. def run_check(self, ctx: RunContext):
  20. """Run Mccabe code checker."""
  21. params = ctx.get_params("mccabe")
  22. options = ctx.options
  23. if options:
  24. params.setdefault("max-complexity", options.max_complexity)
  25. McCabeChecker.max_complexity = int(params.get("max-complexity", 10))
  26. McCabeChecker._error_tmpl = "%r is too complex (%d)"
  27. number = McCabeChecker._code
  28. for lineno, offset, text, _ in McCabeChecker(ctx.ast, ctx.filename).run():
  29. ctx.push(
  30. col=offset + 1,
  31. lnum=lineno,
  32. number=number,
  33. text=text,
  34. type="C",
  35. source="mccabe",
  36. )
  37. # pylama:ignore=W0212