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

339 lines
8.7 KiB
TOML

[tool.black]
line-length = 100
[tool.ruff]
line-length = 100
[tool.ruff.lint]
ignore = [
"A003",
"E402",
"E501",
"E731",
"F405",
"F821",
"W505",
]
select = [
"A", # flake8-builtins
"E", # pycodestyle
"F", # pyflakes
"W", # pycodestyle
"C4", # flake8-comprehensions
"ISC", # flake8-implicit-str-concat
"SLOT", # flake8-slots
"FLY", # flynt
"PGH", # pygrep-hooks
"RET506", # flake8-return: superfluous-else-raise
"RET507", # flake8-return: superfluous-else-continue
"RET508", # flake8-return: superfluous-else-break
# We want to enable the below lints, but they currently return too many errors
# "RET505", # flake8-return: superfluous-else-return
# "SLF" # flake8-self
# "SIM", # flake8-simplify
# "PTH", # flake8-use-pathlib
]
[tool.ruff.lint.flake8-builtins]
builtins-ignorelist = [
"all",
"bin",
"breakpoint",
"copyright",
"dir",
"exit",
"format",
"hex",
"map",
"max",
"min",
"next",
"type",
]
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"]
[tool.mypy]
strict_optional = false
check_untyped_defs = true
allow_untyped_globals = false
allow_redefinition = true
allow_any_generics = false
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 = [
# https://github.com/python/mypy/issues/6232
"assignment"
]
[[tool.mypy.overrides]]
module = [
"pwndbg.disasm.*",
"pwndbg.gdblib.elf",
]
disable_error_code = ["name-defined"]
[[tool.mypy.overrides]]
module = [
"pwndbg.color.*",
"pwndbg.commands.context",
"pwndbg.commands.cymbol",
"pwndbg.commands.hexdump",
"pwndbg.commands.procinfo",
"pwndbg.commands.reload",
"pwndbg.commands.telescope",
"pwndbg.commands.version",
"pwndbg.exception",
"pwndbg.disasm.jump",
"pwndbg.gdblib.dt",
"pwndbg.gdblib.dynamic",
"pwndbg.gdblib.events",
"pwndbg.gdblib.got",
"pwndbg.gdblib.heap_tracking",
"pwndbg.gdblib.stack",
"pwndbg.heap.*",
"pwndbg.hexdump",
"pwndbg.ui",
"pwndbg.wrappers.*",
]
disable_error_code = ["attr-defined"]
[[tool.mypy.overrides]]
module = [
"pwndbg.gdblib.nearpc",
"pwndbg.gdblib.typeinfo",
]
disable_error_code = ["name-defined", "attr-defined"]
[[tool.mypy.overrides]]
module = ["capstone.*", "unicorn.*", "pwnlib.*", "elftools.*", "ipdb.*", "r2pipe", "rzpipe", "rich.*", "pt_gdb"]
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"
ipython = "8.12.3"
# 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"
sortedcontainers = "2.4.0"
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 = "50227bda0b6332e94027f811a15879588de6d5cb"}
[tool.poetry.group.dev]
optional = true
[tool.poetry.group.dev.dependencies]
coverage = {version = "7.4.3", extras = ["toml"]}
isort = "5.13.2"
mypy = "1.8.0"
pytest = "8.0.2"
pytest-cov = "4.1.0"
rich = "13.7.1"
ruff = "0.4.1"
testresources = "2.0.1"
tomli = "2.0.1"
types-gdb = "12.1.4.20240305"
types-psutil = "5.9.5.20240205"
types-pygments = "2.17.0.20240106"
types-requests = "2.31.0.20240218"
types-tabulate = "0.9.0.20240106"
vermin = "1.6.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"