[tool.black] line-length = 100 extend-exclude = "gdb-pt-dump" [tool.mypy] strict_optional = false check_untyped_defs = true allow_untyped_globals = true allow_redefinition = true warn_redundant_casts = true warn_unused_ignores = true warn_no_return = true # warn_return_any = true # warn_unreachable = true show_error_context = true pretty = true show_error_codes = true incremental = false disable_error_code = [ # Lots of dynamic attribute access "attr-defined", # https://github.com/python/mypy/issues/6232 "assignment" ] [[tool.mypy.overrides]] module = [ # Capstone constants "pwndbg.disasm.*", "pwndbg.gdblib.nearpc", # Module fields "pwndbg.gdblib.typeinfo", "pwndbg.gdblib.elf", "pwndbg.auxv", ] disable_error_code = ["name-defined"] [[tool.mypy.overrides]] module = ["capstone.*", "unicorn.*", "pwnlib.*", "elftools.*", "ipdb.*", "r2pipe", "rzpipe", "rich.*", "pt"] ignore_missing_imports = true [tool.isort] profile = "black" force_single_line = true known_third_party = ["capstone", "unicorn", "psutil", "pycparser", "gdb"] extend_skip_glob = ["gdb-pt-dump/*"] [tool.coverage.run] branch = true parallel = true disable_warnings = ["module-not-imported"] source = ["${SRC_DIR-.}"] omit = ["ida_script.py"] data_file = ".cov/coverage" [tool.coverage.report] omit = ["ida_script.py", "tests/*"] [tool.pylint.main] # Analyse import fallback blocks. This can be used to support both Python 2 and 3 # compatible code, which means that the block might have code that exists only in # one or another interpreter, leading to false positives when analysed. analyse-fallback-blocks = true disable = [ "design", # TODO: disable explicit checks # basic "invalid-name", "missing-class-docstring", "missing-function-docstring", "missing-module-docstring", "pointless-string-statement", # TODO: Fix these "dangerous-default-value", # TODO: Fix these # classes "arguments-renamed", "protected-access", # TODO: Fix these "abstract-method", # TODO: Fix these "attribute-defined-outside-init", # TODO: Fix these # exceptions "broad-except", "raise-missing-from", # format "line-too-long", # imports "import-outside-toplevel", "wrong-import-position", "wildcard-import", # TODO: Fix these # lambda-expressions "unnecessary-lambda-assignment", # miscellaneous "fixme", # refactoring "consider-using-f-string", # TODO: Fix these "consider-using-with", # TODO: Fix these "no-else-return", # TODO: Fix these "no-else-raise", # TODO: Fix these "no-else-continue", # TODO: Fix these "no-else-break", # TODO: Fix these "inconsistent-return-statements", # TODO: Fix these "redefined-argument-from-local", # stdlib "unspecified-encoding", # typecheck "no-member", "keyword-arg-before-vararg", "assignment-from-none", # TODO: Fix these # variables "possibly-unused-variable", "redefined-outer-name", "global-statement", "unused-wildcard-import", "unused-argument", # TODO: Fix these "unused-variable", # TODO: Fix these "undefined-loop-variable", # TODO: Fix these "undefined-variable", # TODO: Fix these "redefined-builtin", # TODO: Fix these ] # Files or directories to be skipped. They should be base names, not paths. ignore = ["tests", "gdb-pt-dump", ".git"] # List of module names for which member attributes should not be checked (useful # for modules/projects where namespaces are manipulated during runtime and thus # existing member attributes cannot be deduced by static analysis). It supports # qualified module names, as well as Unix pattern matching. ignored-modules = ["gdb", "pt"] # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the # number of processors available to use, and will cap the count on Windows to # avoid hangs. jobs = 0 # Control the amount of potential inferred values when inferring a single object. # This can help the performance when dealing with large functions or complex, # nested conditions. limit-inference-results = 100 # Pickle collected data for later comparisons. persistent = true # Minimum Python version to use for version dependent checks. Will default to the # version used to run pylint. py-version = "3.7" # When enabled, pylint would attempt to guess common misconfiguration and emit # user-friendly hints instead of false-positive error messages. suggestion-mode = true [tool.pylint.design] # Maximum number of arguments for function / method. max-args = 5 # Maximum number of attributes for a class (see R0902). max-attributes = 7 # Maximum number of boolean expressions in an if statement (see R0916). max-bool-expr = 5 # Maximum number of branch for function / method body. max-branches = 12 # Maximum number of locals for function / method body. max-locals = 15 # Maximum number of parents for a class (see R0901). max-parents = 7 # Maximum number of public methods for a class (see R0904). max-public-methods = 20 # Maximum number of return / yield for function / method body. max-returns = 6 # Maximum number of statements in function / method body. max-statements = 50 # Minimum number of public methods for a class (see R0903). min-public-methods = 2 [tool.pylint.format] # Maximum number of lines in a module. max-module-lines = 2500 # TODO: Reduce to 1000 [tool.pylint."messages control"] # Only show warnings with the listed confidence levels. Leave empty to show all. # Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. confidence = ["HIGH", "CONTROL_FLOW", "INFERENCE", "INFERENCE_FAILURE", "UNDEFINED"] [tool.pylint.refactoring] # Maximum number of nested blocks for function / method body max-nested-blocks = 6 [tool.pylint.reports] output-format = "colorized"