pylama_pyflakes.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """Pyflakes support."""
  2. from pyflakes import checker
  3. from pylama.context import RunContext
  4. from pylama.lint import LinterV2 as Abstract
  5. m = checker.messages
  6. CODES = {
  7. m.UnusedImport.message: "W0611",
  8. m.RedefinedWhileUnused.message: "W0404",
  9. m.ImportShadowedByLoopVar.message: "W0621",
  10. m.ImportStarUsed.message: "W0401",
  11. m.ImportStarUsage.message: "W0401",
  12. m.UndefinedName.message: "E0602",
  13. m.DoctestSyntaxError.message: "W0511",
  14. m.UndefinedExport.message: "E0603",
  15. m.UndefinedLocal.message: "E0602",
  16. m.DuplicateArgument.message: "E1122",
  17. m.LateFutureImport.message: "W0410",
  18. m.UnusedVariable.message: "W0612",
  19. m.ReturnOutsideFunction.message: "E0104",
  20. }
  21. # RedefinedInListComp and ReturnWithArgsInsideGenerator were removed at pyflakes 2.5.0:
  22. # https://github.com/PyCQA/pyflakes/commit/2246217295dc8cb30ef4a7b9d8dc449ce32e603a
  23. if hasattr(m, "RedefinedInListComp"):
  24. CODES[m.RedefinedInListComp.message] = "W0621"
  25. if hasattr(m, "ReturnWithArgsInsideGenerator"):
  26. CODES[m.ReturnWithArgsInsideGenerator.message] = "E0106"
  27. class Linter(Abstract):
  28. """Pyflakes runner."""
  29. name = "pyflakes"
  30. def run_check(self, context: RunContext): # noqa
  31. """Check code with pyflakes."""
  32. params = context.get_params("pyflakes")
  33. builtins = params.get("builtins", "")
  34. if builtins:
  35. builtins = builtins.split(",")
  36. check = checker.Checker(context.ast, context.filename, builtins=builtins)
  37. for msg in check.messages:
  38. context.push(
  39. lnum=msg.lineno,
  40. col=msg.col + 1,
  41. text=msg.message % msg.message_args,
  42. number=CODES.get(msg.message, ""),
  43. source="pyflakes",
  44. )
  45. # pylama:ignore=E501,C0301