codedoctor 0.2.0__tar.gz → 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- codedoctor-1.0.0/.github/CODEOWNERS +1 -0
- codedoctor-1.0.0/.github/dependabot.yml +32 -0
- codedoctor-1.0.0/.github/pull_request_template.md +8 -0
- codedoctor-1.0.0/.github/workflows/ci.yml +49 -0
- codedoctor-1.0.0/.github/workflows/codeql.yml +36 -0
- codedoctor-1.0.0/.github/workflows/conventional-commits.yml +29 -0
- codedoctor-1.0.0/.github/workflows/gitleaks.yml +28 -0
- codedoctor-1.0.0/.github/workflows/release-please.yml +20 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/.github/workflows/release.yml +5 -3
- {codedoctor-0.2.0 → codedoctor-1.0.0}/.gitignore +1 -1
- codedoctor-1.0.0/.pre-commit-config.yaml +25 -0
- codedoctor-1.0.0/CHANGELOG.md +12 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/LICENSE +1 -1
- {codedoctor-0.2.0 → codedoctor-1.0.0}/PKG-INFO +11 -9
- {codedoctor-0.2.0 → codedoctor-1.0.0}/README.md +8 -8
- codedoctor-1.0.0/SECURITY.md +41 -0
- codedoctor-1.0.0/gitleaks.toml +13 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/pyproject.toml +4 -2
- codedoctor-1.0.0/src/codedoctor/__init__.py +1 -0
- codedoctor-1.0.0/src/codedoctor/cli.py +410 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/config.py +15 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/runner.py +31 -26
- codedoctor-1.0.0/src/codedoctor/test_template.py +52 -0
- codedoctor-1.0.0/src/codedoctor/ui.py +61 -0
- codedoctor-0.2.0/.github/dependabot.yml +0 -12
- codedoctor-0.2.0/.github/workflows/ci.yml +0 -33
- codedoctor-0.2.0/.pre-commit-config.yaml +0 -12
- codedoctor-0.2.0/src/codedoctor/__init__.py +0 -0
- codedoctor-0.2.0/src/codedoctor/cli.py +0 -196
- {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/report.py +0 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/storage.py +0 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/src/codedoctor/updater.py +0 -0
- {codedoctor-0.2.0 → codedoctor-1.0.0}/tests/test_smoke.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @BigPattyOG
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
updates:
|
|
4
|
+
# Python dependencies (from pyproject.toml / requirements)
|
|
5
|
+
- package-ecosystem: "pip"
|
|
6
|
+
directory: "/"
|
|
7
|
+
target-branch: "main"
|
|
8
|
+
schedule:
|
|
9
|
+
interval: "weekly"
|
|
10
|
+
open-pull-requests-limit: 10
|
|
11
|
+
rebase-strategy: "auto"
|
|
12
|
+
labels:
|
|
13
|
+
- "dependencies"
|
|
14
|
+
groups:
|
|
15
|
+
python-dependencies:
|
|
16
|
+
patterns:
|
|
17
|
+
- "*"
|
|
18
|
+
|
|
19
|
+
# GitHub Actions used in .github/workflows/*.yml (including new workflows)
|
|
20
|
+
- package-ecosystem: "github-actions"
|
|
21
|
+
directory: "/"
|
|
22
|
+
target-branch: "main"
|
|
23
|
+
schedule:
|
|
24
|
+
interval: "weekly"
|
|
25
|
+
open-pull-requests-limit: 10
|
|
26
|
+
rebase-strategy: "auto"
|
|
27
|
+
labels:
|
|
28
|
+
- "dependencies"
|
|
29
|
+
groups:
|
|
30
|
+
github-actions:
|
|
31
|
+
patterns:
|
|
32
|
+
- "*"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: ["main"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
name: CI (Python 3.12)
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout
|
|
19
|
+
uses: actions/checkout@v6
|
|
20
|
+
|
|
21
|
+
- name: Setup Python
|
|
22
|
+
uses: actions/setup-python@v6
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
|
|
26
|
+
- name: Install
|
|
27
|
+
run: |
|
|
28
|
+
python -m pip install --upgrade pip
|
|
29
|
+
python -m pip install -e ".[dev]"
|
|
30
|
+
|
|
31
|
+
- name: Ruff
|
|
32
|
+
run: ruff check .
|
|
33
|
+
|
|
34
|
+
- name: Black
|
|
35
|
+
run: black . --check
|
|
36
|
+
|
|
37
|
+
- name: MyPy
|
|
38
|
+
run: mypy . --pretty --show-error-codes
|
|
39
|
+
|
|
40
|
+
- name: Bandit (security)
|
|
41
|
+
run: bandit -r src -x tests
|
|
42
|
+
|
|
43
|
+
- name: Pytest
|
|
44
|
+
run: pytest -q
|
|
45
|
+
|
|
46
|
+
- name: Pip Audit (dependency vulnerabilities)
|
|
47
|
+
run: |
|
|
48
|
+
python -m pip install pip-audit
|
|
49
|
+
pip-audit
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: CodeQL
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "23 3 * * 1" # Weekly (Mon)
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
analyze:
|
|
16
|
+
name: Analyze (CodeQL)
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: read
|
|
21
|
+
security-events: write
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout
|
|
25
|
+
uses: actions/checkout@v6
|
|
26
|
+
|
|
27
|
+
- name: Initialize CodeQL
|
|
28
|
+
uses: github/codeql-action/init@v4
|
|
29
|
+
with:
|
|
30
|
+
languages: python
|
|
31
|
+
|
|
32
|
+
- name: Autobuild
|
|
33
|
+
uses: github/codeql-action/autobuild@v4
|
|
34
|
+
|
|
35
|
+
- name: Perform CodeQL Analysis
|
|
36
|
+
uses: github/codeql-action/analyze@v4
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Conventional PR Title
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
semantic-pr-title:
|
|
12
|
+
name: Check Conventional Commits PR Title
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Validate PR title follows Conventional Commits
|
|
16
|
+
uses: amannn/action-semantic-pull-request@v6
|
|
17
|
+
env:
|
|
18
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
19
|
+
with:
|
|
20
|
+
types: |
|
|
21
|
+
feat
|
|
22
|
+
fix
|
|
23
|
+
docs
|
|
24
|
+
chore
|
|
25
|
+
refactor
|
|
26
|
+
test
|
|
27
|
+
ci
|
|
28
|
+
build
|
|
29
|
+
requireScope: false
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Gitleaks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: ["main"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
scan:
|
|
14
|
+
name: Secret scan (gitleaks)
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout
|
|
19
|
+
uses: actions/checkout@v6
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0
|
|
22
|
+
|
|
23
|
+
- name: Run gitleaks
|
|
24
|
+
uses: gitleaks/gitleaks-action@v2
|
|
25
|
+
env:
|
|
26
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
27
|
+
GITLEAKS_ENABLE_UPLOAD_ARTIFACT: "false"
|
|
28
|
+
GITLEAKS_ENABLE_SUMMARY: "true"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: Release Please
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release-please:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- name: Release Please
|
|
17
|
+
uses: googleapis/release-please-action@v4
|
|
18
|
+
with:
|
|
19
|
+
release-type: python
|
|
20
|
+
package-name: codedoctor
|
|
@@ -14,10 +14,10 @@ jobs:
|
|
|
14
14
|
|
|
15
15
|
steps:
|
|
16
16
|
- name: Checkout
|
|
17
|
-
uses: actions/checkout@
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
18
|
|
|
19
19
|
- name: Set up Python
|
|
20
|
-
uses: actions/setup-python@
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
21
|
with:
|
|
22
22
|
python-version: "3.12"
|
|
23
23
|
|
|
@@ -43,6 +43,7 @@ jobs:
|
|
|
43
43
|
environment: pypi
|
|
44
44
|
permissions:
|
|
45
45
|
id-token: write
|
|
46
|
+
|
|
46
47
|
steps:
|
|
47
48
|
- name: Download dist artifacts
|
|
48
49
|
uses: actions/download-artifact@v4
|
|
@@ -59,6 +60,7 @@ jobs:
|
|
|
59
60
|
runs-on: ubuntu-latest
|
|
60
61
|
permissions:
|
|
61
62
|
contents: write
|
|
63
|
+
|
|
62
64
|
steps:
|
|
63
65
|
- name: Download dist artifacts
|
|
64
66
|
uses: actions/download-artifact@v4
|
|
@@ -69,4 +71,4 @@ jobs:
|
|
|
69
71
|
- name: Create GitHub Release
|
|
70
72
|
uses: softprops/action-gh-release@v2
|
|
71
73
|
with:
|
|
72
|
-
files: dist/*
|
|
74
|
+
files: dist/*
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v4.6.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: end-of-file-fixer
|
|
6
|
+
- id: trailing-whitespace
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
- id: check-toml
|
|
9
|
+
- id: check-added-large-files
|
|
10
|
+
|
|
11
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
12
|
+
rev: v0.8.0
|
|
13
|
+
hooks:
|
|
14
|
+
- id: ruff
|
|
15
|
+
args: ["--fix"]
|
|
16
|
+
|
|
17
|
+
- repo: https://github.com/psf/black
|
|
18
|
+
rev: 26.1.0
|
|
19
|
+
hooks:
|
|
20
|
+
- id: black
|
|
21
|
+
|
|
22
|
+
- repo: https://github.com/gitleaks/gitleaks
|
|
23
|
+
rev: v8.18.4
|
|
24
|
+
hooks:
|
|
25
|
+
- id: gitleaks
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.0.0](https://github.com/BigPattyOG/CodeDoctor/compare/v0.2.0...v1.0.0) (2026-02-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* Update to CodeDoctor and how it functions ([#16](https://github.com/BigPattyOG/CodeDoctor/issues/16))
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* Update to CodeDoctor and how it functions ([#16](https://github.com/BigPattyOG/CodeDoctor/issues/16)) ([e41c3e8](https://github.com/BigPattyOG/CodeDoctor/commit/e41c3e894984b671508411d608bfdedfbf628acd))
|
|
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codedoctor
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Beginner-friendly codebase doctor: lint, format, type-check, security and tests.
|
|
5
5
|
Author-email: Patrick Faint <pattymayo3@icloud.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -10,6 +10,7 @@ Requires-Dist: bandit>=1.7
|
|
|
10
10
|
Requires-Dist: black>=24.0
|
|
11
11
|
Requires-Dist: mypy>=1.8
|
|
12
12
|
Requires-Dist: pytest>=8
|
|
13
|
+
Requires-Dist: rich>=13.7
|
|
13
14
|
Requires-Dist: ruff>=0.9
|
|
14
15
|
Provides-Extra: dev
|
|
15
16
|
Requires-Dist: bandit>=1.7.0; extra == 'dev'
|
|
@@ -17,6 +18,7 @@ Requires-Dist: black>=24.0.0; extra == 'dev'
|
|
|
17
18
|
Requires-Dist: mypy>=1.10.0; extra == 'dev'
|
|
18
19
|
Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
|
|
19
20
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
21
|
+
Requires-Dist: rich>=13.7; extra == 'dev'
|
|
20
22
|
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
21
23
|
Description-Content-Type: text/markdown
|
|
22
24
|
|
|
@@ -121,26 +123,26 @@ codedoctor scan [PATH] [--fix] [--skip-tests] [--report-dir DIR] [--no-gitignore
|
|
|
121
123
|
|
|
122
124
|
#### Options
|
|
123
125
|
|
|
124
|
-
- `PATH`
|
|
126
|
+
- `PATH`
|
|
125
127
|
Repository/folder to scan (default: `.`)
|
|
126
128
|
|
|
127
|
-
- `--fix`
|
|
129
|
+
- `--fix`
|
|
128
130
|
Apply safe auto-fixes (Ruff `--fix`) and format with Black.
|
|
129
131
|
|
|
130
|
-
- `--skip-tests`
|
|
132
|
+
- `--skip-tests`
|
|
131
133
|
Skip running `pytest`.
|
|
132
134
|
|
|
133
|
-
- `--report-dir DIR`
|
|
135
|
+
- `--report-dir DIR`
|
|
134
136
|
Directory (relative to the repo) to store reports. If omitted, uses the value
|
|
135
137
|
from your CodeDoctor config.
|
|
136
138
|
|
|
137
|
-
- `--no-gitignore`
|
|
139
|
+
- `--no-gitignore`
|
|
138
140
|
Disable best-effort `.gitignore` handling (useful for debugging).
|
|
139
141
|
|
|
140
|
-
- `--no-update-check`
|
|
142
|
+
- `--no-update-check`
|
|
141
143
|
Disable the non-blocking “update available” notice during scans.
|
|
142
144
|
|
|
143
|
-
- `--assume-defaults`
|
|
145
|
+
- `--assume-defaults`
|
|
144
146
|
Allow scanning without running `codedoctor setup` (useful for CI).
|
|
145
147
|
|
|
146
148
|
---
|
|
@@ -262,4 +264,4 @@ codedoctor scan .
|
|
|
262
264
|
|
|
263
265
|
## License
|
|
264
266
|
|
|
265
|
-
MIT License. See `LICENSE`.
|
|
267
|
+
MIT License. See `LICENSE`.
|
|
@@ -99,26 +99,26 @@ codedoctor scan [PATH] [--fix] [--skip-tests] [--report-dir DIR] [--no-gitignore
|
|
|
99
99
|
|
|
100
100
|
#### Options
|
|
101
101
|
|
|
102
|
-
- `PATH`
|
|
102
|
+
- `PATH`
|
|
103
103
|
Repository/folder to scan (default: `.`)
|
|
104
104
|
|
|
105
|
-
- `--fix`
|
|
105
|
+
- `--fix`
|
|
106
106
|
Apply safe auto-fixes (Ruff `--fix`) and format with Black.
|
|
107
107
|
|
|
108
|
-
- `--skip-tests`
|
|
108
|
+
- `--skip-tests`
|
|
109
109
|
Skip running `pytest`.
|
|
110
110
|
|
|
111
|
-
- `--report-dir DIR`
|
|
111
|
+
- `--report-dir DIR`
|
|
112
112
|
Directory (relative to the repo) to store reports. If omitted, uses the value
|
|
113
113
|
from your CodeDoctor config.
|
|
114
114
|
|
|
115
|
-
- `--no-gitignore`
|
|
115
|
+
- `--no-gitignore`
|
|
116
116
|
Disable best-effort `.gitignore` handling (useful for debugging).
|
|
117
117
|
|
|
118
|
-
- `--no-update-check`
|
|
118
|
+
- `--no-update-check`
|
|
119
119
|
Disable the non-blocking “update available” notice during scans.
|
|
120
120
|
|
|
121
|
-
- `--assume-defaults`
|
|
121
|
+
- `--assume-defaults`
|
|
122
122
|
Allow scanning without running `codedoctor setup` (useful for CI).
|
|
123
123
|
|
|
124
124
|
---
|
|
@@ -240,4 +240,4 @@ codedoctor scan .
|
|
|
240
240
|
|
|
241
241
|
## License
|
|
242
242
|
|
|
243
|
-
MIT License. See `LICENSE`.
|
|
243
|
+
MIT License. See `LICENSE`.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
Security fixes are provided for the **latest released version** of CodeDoctor on
|
|
6
|
+
PyPI.
|
|
7
|
+
|
|
8
|
+
| Version | Supported |
|
|
9
|
+
| ------- | --------- |
|
|
10
|
+
| latest | ✅ |
|
|
11
|
+
| older | ❌ |
|
|
12
|
+
|
|
13
|
+
## Reporting a Vulnerability
|
|
14
|
+
|
|
15
|
+
Please report security vulnerabilities responsibly.
|
|
16
|
+
|
|
17
|
+
### Preferred: GitHub Security Advisories
|
|
18
|
+
1. Go to this repository on GitHub
|
|
19
|
+
2. Click **Security**
|
|
20
|
+
3. Click **Advisories**
|
|
21
|
+
4. Click **New draft security advisory**
|
|
22
|
+
|
|
23
|
+
This allows private discussion and coordinated disclosure.
|
|
24
|
+
|
|
25
|
+
### Alternative: GitHub Issue (non-sensitive details only)
|
|
26
|
+
If you cannot use a Security Advisory, open a GitHub issue. **Do not include**
|
|
27
|
+
secrets, private tokens, or proof-of-concept exploit code that would put users
|
|
28
|
+
at risk.
|
|
29
|
+
|
|
30
|
+
### What to include
|
|
31
|
+
- A clear description of the vulnerability and impact
|
|
32
|
+
- Steps to reproduce (as minimal as possible)
|
|
33
|
+
- Affected versions (if known)
|
|
34
|
+
- Any suggested mitigation or fix
|
|
35
|
+
|
|
36
|
+
### Response expectations
|
|
37
|
+
- You should receive an initial response within **7 days**
|
|
38
|
+
- If accepted, we will work on a fix and publish an update to PyPI
|
|
39
|
+
- If declined, we will explain why (when possible)
|
|
40
|
+
|
|
41
|
+
Thank you for helping keep CodeDoctor and its users safe.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
title = "CodeDoctor gitleaks config"
|
|
2
|
+
|
|
3
|
+
[allowlist]
|
|
4
|
+
description = "Allowlist for generated/cached directories"
|
|
5
|
+
paths = [
|
|
6
|
+
'''^\.git/''',
|
|
7
|
+
'''^\.ruff_cache/''',
|
|
8
|
+
'''^\.mypy_cache/''',
|
|
9
|
+
'''^\.pytest_cache/''',
|
|
10
|
+
'''^dist/''',
|
|
11
|
+
'''^build/''',
|
|
12
|
+
'''^\.venv/''',
|
|
13
|
+
]
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codedoctor"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "1.0.0"
|
|
8
8
|
description = "Beginner-friendly codebase doctor: lint, format, type-check, security and tests."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -16,6 +16,7 @@ dependencies = [
|
|
|
16
16
|
"mypy>=1.8",
|
|
17
17
|
"bandit>=1.7",
|
|
18
18
|
"pytest>=8",
|
|
19
|
+
"rich>=13.7",
|
|
19
20
|
]
|
|
20
21
|
|
|
21
22
|
[project.optional-dependencies]
|
|
@@ -26,6 +27,7 @@ dev = [
|
|
|
26
27
|
"mypy>=1.10.0",
|
|
27
28
|
"bandit>=1.7.0",
|
|
28
29
|
"pre-commit>=3.7.0",
|
|
30
|
+
"rich>=13.7",
|
|
29
31
|
]
|
|
30
32
|
|
|
31
33
|
[project.scripts]
|
|
@@ -42,4 +44,4 @@ target-version = ["py312"]
|
|
|
42
44
|
[tool.mypy]
|
|
43
45
|
python_version = "3.12"
|
|
44
46
|
warn_return_any = true
|
|
45
|
-
warn_unused_configs = true
|
|
47
|
+
warn_unused_configs = true
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from __future__ import annotations
|