You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pwndbg/pyproject.toml

277 lines
7.0 KiB
TOML

[tool.black]
line-length = 100
[tool.ruff]
ignore = [
"A003",
"E402",
"E501",
"E731",
"F405",
"F811",
"F821",
"F841",
"W505",
]
line-length = 100
select = [
"A",
"E",
"F",
"W",
]
[tool.ruff.flake8-builtins]
builtins-ignorelist = [
"all",
"bin",
"breakpoint",
"copyright",
"dir",
"exit",
"format",
"hex",
"map",
"max",
"min",
"next",
"type",
]
[tool.ruff.per-file-ignores]
"__init__.py" = ["F401"]
[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"]
add_imports = "from __future__ import annotations"
[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", ".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"
[tool.poetry]
name = "pwndbg"
description = "Exploit Development and Reverse Engineering with GDB Made Easy"
version = "2024.02.14"
authors = ["Dominik 'disconnect3d' Czarnota <dominik.b.czarnota+dc@gmail.com>"]
readme = "README.md"
packages = [
{ include = "pwndbg" },
]
[tool.poetry.dependencies]
python = "^3.8"
capstone = "5.0.0.post1"
# Needed by Capstone due to https://github.com/pwndbg/pwndbg/pull/1946#issuecomment-1921603947
setuptools = "69.0.3"
psutil = "5.9.5"
pwntools = "4.11.0"
pycparser = "2.21"
pyelftools = "0.29"
pygments = "2.15.0"
ropgadget = "7.2"
tabulate = "0.9.0"
typing-extensions = "4.6.1"
unicorn = "2.0.1.post1"
requests = "2.31.0"
pt = {git = "https://github.com/martinradev/gdb-pt-dump", rev = "89ea252f6efc5d75eacca16fc17ff8966a389690"}
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"