Metadata-Version: 2.4
Name: pydebt
Version: 0.1.0
Summary: Measurable technical debt for Python projects
Author-email: your name <you@example.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/eduardowebdev/pydebt
Project-URL: Repository, https://github.com/eduardowebdev/pydebt
Project-URL: Issues, https://github.com/eduardowebdev/pydebt/issues
Project-URL: Changelog, https://github.com/eduardowebdev/pydebt/blob/main/CHANGELOG.md
Keywords: technical-debt,linter,static-analysis,quality
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Quality Assurance
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Requires-Dist: mypy>=1.11; extra == "dev"
Requires-Dist: build>=1.2; extra == "dev"
Dynamic: license-file

# pydebt

[![ci](https://github.com/eduardowebdev/pydebt/actions/workflows/ci.yml/badge.svg)](https://github.com/eduardowebdev/pydebt/actions/workflows/ci.yml)
[![pypi](https://img.shields.io/pypi/v/pydebt.svg)](https://pypi.org/project/pydebt/)
[![python](https://img.shields.io/pypi/pyversions/pydebt.svg)](https://pypi.org/project/pydebt/)
[![license](https://img.shields.io/pypi/l/pydebt.svg)](https://pypi.org/project/pydebt/)

Measurable technical debt for Python. Counts markers, complexity signals, and
compares against a committed baseline so CI fails when debt grows.

## Install

~~~
pip install pydebt
~~~

## Usage

~~~
# snapshot current state
pydebt baseline

# summarize
pydebt scan
pydebt scan --json --top 20

# compare to baseline (exit 1 if worse)
pydebt check

# allow growth, just report
pydebt check --allow-growth

# full report
pydebt report
~~~

## What it counts

| Kind | Source |
|---|---|
| `TODO` `FIXME` `HACK` `XXX` | comments (uppercase convention) |
| `TYPE_IGNORE` | `# type: ignore` in comments |
| `NOQA` | `# noqa` in comments |
| `NO_COVER` | `# pragma: no cover` in comments |
| `EXCEPT_PASS` | `except:` with only `pass` |
| `LONG_FUNCTION` | function > 50 lines |
| `LONG_FILE` | file > 500 lines |

## CI

~~~
- run: pip install pydebt
- run: pydebt check
~~~

## Baseline

`.pydebt.json` is committed. It stores per-file line count and per-kind marker
counts. `check` diffs current against it and fails on net growth.

## Development

~~~
pip install -e ".[dev]"
pytest
ruff check src tests
mypy src
~~~

## License

MIT
