Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
6354411
docs: add third-party project review reports
claude Sep 26, 2026
b2fd640
fix: exit with code 2 on unreadable files, missing paths and bad config
claude Sep 26, 2026
b6ad01e
fix: validate config value types and fix exclude globs and override s…
claude Sep 26, 2026
65839f4
fix: scope-aware ast extraction for raises, yields, compound blocks a…
claude Sep 26, 2026
b676b02
feat: add a google convention preset for policy and rule defaults
claude Sep 26, 2026
7e575a5
fix: skip main guard blocks and ignore raises of plain variables
claude Sep 26, 2026
735d616
feat: compare documented types by level and extend documented_types t…
claude Sep 26, 2026
6f95960
fix: rework indentation and imperative mood checks and split raises_e…
claude Sep 26, 2026
acdcf43
feat: recognize napoleon sections, aliases and keyword args
claude Sep 26, 2026
e41e293
fix: make example an alias of examples and drop the exceptions alias
claude Sep 26, 2026
ce82164
feat: add docstring exemptions for dunder, private, overridden and pr…
claude Sep 26, 2026
66b3bed
feat: accept init parameters documented in the class docstring
claude Sep 26, 2026
bbeea44
feat: add documented_stars policy and report misspelled star argument…
claude Sep 26, 2026
f7df8f3
feat: add sections_optional_on_one_liners for fully annotated functions
claude Sep 26, 2026
651718b
chore: fix pre-commit groups, pyright venv path and drop sqlfluff lef…
claude Sep 26, 2026
0355225
fix: disable colors outside a terminal, escape github annotations and…
claude Sep 26, 2026
09d7134
chore: restore the devcontainer venv path in pyright config
claude Sep 26, 2026
a1fb08e
docs: rewrite readme with installation, real output, conventions and …
claude Sep 26, 2026
629fe46
chore: pass only the codecov token and set read-only workflow permiss…
claude Sep 26, 2026
2049cda
chore: verify the dotenv-linter binary checksum in ci and pin its ins…
claude Sep 26, 2026
4580d83
chore: pin github actions to commit shas
claude Sep 26, 2026
9c90fd5
feat: add --statistics to count errors per rule
claude Sep 26, 2026
3bc192e
feat: show always-on rules in their own section of --list-rules
claude Sep 26, 2026
89c4a28
docs: drop the nonexistent --select flag from a config comment
claude Sep 26, 2026
7384548
docs: add the status of each point to the review reports
claude Sep 26, 2026
319326e
fix: pass github action inputs through environment variables
claude Sep 26, 2026
7ddc644
docs: update review statuses for the github action fixes
claude Sep 26, 2026
8e448bb
docs: add a known limitations section to the readme
claude Sep 26, 2026
5bedcf0
docs: mark the known limitations point as done in the review
claude Sep 26, 2026
1ce67fb
fix: detect bare re-raises in except blocks and tuple attribute assig…
claude Sep 26, 2026
f2b5bb7
docs: refresh review figures after the re-raise and tuple fixes
claude Sep 26, 2026
e25231a
docs: mark the baseline point as postponed in the review
claude Sep 26, 2026
23fc020
fix: resolve path patterns relative to the config file directory
claude Sep 26, 2026
fbdeb37
docs: mark the config relative paths point as done in the review
claude Sep 26, 2026
a22a8b2
fix: exit quietly when the output pipe is closed early
claude Sep 26, 2026
747ac90
docs: mark the pypi publication point as postponed in the review
claude Sep 26, 2026
fad5014
docs: mark the error line point as postponed in the review
claude Sep 26, 2026
028025a
docs: mark the autofix point as postponed in the review
claude Sep 26, 2026
6bfff7a
test: check consistency between registries, config, rules and docs
claude Sep 26, 2026
10cd726
refactor: split validate_entity into summary, function, class and lay…
claude Sep 26, 2026
cfb4200
docs: update review statuses for the registry consistency work
claude Sep 26, 2026
a7c2d7b
docs: mark the changelog and contributing point as postponed in the r…
claude Sep 26, 2026
af5ca24
feat: default to auto workers, sequential below 50 files
claude Sep 26, 2026
86edadf
docs: mark the default workers point as done in the review
claude Sep 26, 2026
d6720e3
feat: skip directories excluded by literal patterns while walking
claude Sep 26, 2026
b7dd24d
docs: mark the excluded directories walk point as done in the review
claude Sep 26, 2026
0f8fdae
feat: always lint explicitly named files and add --force-exclude
claude Sep 26, 2026
2093ef0
docs: mark the result cache point as dropped in the review
claude Sep 26, 2026
da14945
docs: mark the free-threaded point as dropped in the review
claude Sep 26, 2026
f0f9f44
docs: mark the readme links point as postponed in the review
claude Sep 26, 2026
7c01e23
docs: note the registry tests in the review testing point
claude Sep 26, 2026
183aa75
refactor: drop the unused examples field, off by default set and vult…
claude Sep 26, 2026
cdbd450
docs: mark the dead code point as done in the review
claude Sep 26, 2026
2ecc362
docs: refresh todo, translate config comments and check tests.md cove…
claude Sep 26, 2026
f645127
docs: mark the stale files and pre-commit comments points as done in …
claude Sep 26, 2026
b9dc74a
docs: move exclusion patterns to the configuration page and clarify d…
claude Sep 26, 2026
a7bde13
docs: mark the exclude documentation point as done in the review
claude Sep 26, 2026
3806ba4
docs: mark the chunk size point as dropped in the review
claude Sep 26, 2026
a2cc6f0
docs: record the pyproject decisions in the review
claude Sep 26, 2026
e077ef9
refactor: remove the single-style abstraction, the style key and the …
claude Sep 26, 2026
f1ca3a1
docs: mark the multi-style abstraction point as done in the review
claude Sep 26, 2026
8a9e4b4
feat: exit with code 3 on an internal error and keep linting the othe…
claude Sep 26, 2026
e46e3a9
docs: mark the internal error and exit code points as done in the review
claude Sep 26, 2026
6962065
fix: print the config line on stderr to keep redirected reports clean
claude Sep 26, 2026
b32d6f2
docs: update the output point in the review
claude Sep 26, 2026
5779bbd
chore: raise the coverage threshold from 85 to 90 percent
claude Sep 26, 2026
6ea0162
docs: mark the testing point as done in the review
claude Sep 26, 2026
fe0fac7
docs: record the scope decisions in the review
claude Sep 26, 2026
8bb902d
refactor: derive the option key sets from the type tables and test th…
claude Sep 26, 2026
cad39db
docs: mark the option tables point as done in the review
claude Sep 26, 2026
c663972
chore: lint all files on pull requests instead of an empty file list
claude Sep 26, 2026
87b2f1d
chore: show the output of every hook in the ci logs
claude Sep 26, 2026
5756e71
docs: add the current ratings to the review dashboard
claude Sep 27, 2026
672ee78
feat: silence rules per entity with a docstring-linter ignore comment
claude Sep 27, 2026
47f0405
docs: mark inline suppression as fixed in the review reports
claude Sep 27, 2026
877507b
Merge branch 'develop' into claude/project-comprehensive-review-qvro8c
bastgau Oct 2, 2026
ea491db
Merge branch 'develop' into claude/project-comprehensive-review-qvro8c
bastgau Oct 16, 2026
4781970
test: use implicit booleaness for empty args in parser tests
bastgau Oct 16, 2026
54a4fef
Merge remote-tracking branch 'origin/develop' into claude/project-com…
claude Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions .github/workflows/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,30 @@ on:
workflow_call:
workflow_dispatch:

permissions:
contents: read

jobs:
action_hook:
runs-on: ubuntu-latest
name: Docstring Linter
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
name: Git Checkout

- uses: actions/setup-python@v7
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
name: Install Python ${{ vars.PYTHON_VERSION }}
with:
python-version: ${{ vars.PYTHON_VERSION }}

- uses: bastgau/docstring-linter@main
- uses: ./
name: Execute Docstring Linter via GitHub Action
with:
paths: src/
format: github-annotations

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
enable-cache: true

Expand Down
9 changes: 6 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,26 @@ on:
workflow_call:
workflow_dispatch:

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
name: Build
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
name: Git Checkout

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
enable-cache: true

- name: Build package
run: uv build

- uses: actions/upload-artifact@v7
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
name: Upload build artifacts
with:
name: dist
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ on:
branches: [main, develop]
workflow_dispatch:

permissions:
contents: read

jobs:
lint:
uses: ./.github/workflows/lint.yml
Expand All @@ -16,7 +19,8 @@ jobs:
needs: lint
uses: ./.github/workflows/tests.yml
name: Tests
secrets: inherit
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

build:
needs: tests
Expand Down
33 changes: 18 additions & 15 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ on:
workflow_call:
workflow_dispatch:

permissions:
contents: read

env:
GROUP: "github-src"

Expand All @@ -12,33 +15,33 @@ jobs:
runs-on: ubuntu-latest
name: Lint
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
name: Git Checkout

- uses: actions/setup-python@v7
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
name: Install Python ${{ vars.PYTHON_VERSION }}
with:
python-version: ${{ vars.PYTHON_VERSION }}

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
enable-cache: true

- name: Install dependencies
run: uv sync --no-dev --group ${{ env.GROUP }}

- name: Install dotenv-linter
run: curl -sSfL https://raw.githubusercontent.com/dotenv-linter/dotenv-linter/master/install.sh | sudo sh -s -- -b /usr/local/bin v4.0.0

- uses: j178/prek-action@v3.0.1
name: Execute Prek on push
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
with:
extra-args: --group ${{ env.GROUP }} --all-files

- uses: j178/prek-action@v3.0.1
name: Execute Prek on pull_request
if: github.event_name == 'pull_request'
env:
DOTENV_LINTER_VERSION: v4.0.0
DOTENV_LINTER_SHA256: 9e2f1f6eb88a71ac15ef209f78f5a68644db82f132d2677112b4f80ec2bd2127
run: |
archive="$RUNNER_TEMP/dotenv-linter.tar.gz"
curl -sSfL -o "$archive" "https://github.com/dotenv-linter/dotenv-linter/releases/download/${DOTENV_LINTER_VERSION}/dotenv-linter-linux-x86_64.tar.gz"
echo "${DOTENV_LINTER_SHA256} $archive" | sha256sum -c -
sudo tar -xzf "$archive" -C /usr/local/bin dotenv-linter

- uses: j178/prek-action@1382ad72dea72f9d53832f2bcb65b3e87a947204 # v3.0.1
name: Execute Prek
with:
extra-args: --group ${{ env.GROUP }} --files origin/${{ github.base_ref }}..HEAD
extra-args: --verbose --group ${{ env.GROUP }} --all-files
21 changes: 11 additions & 10 deletions .github/workflows/publish-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,16 @@ jobs:
needs: lint
uses: ./.github/workflows/tests.yml
name: Tests
secrets: inherit
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

guard:
needs: tests
if: ${{ !contains(github.ref_name, '-') }}
runs-on: ubuntu-latest
name: Guard
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
name: Git Checkout
with:
fetch-depth: 0
Expand All @@ -45,13 +46,13 @@ jobs:
runs-on: ubuntu-latest
name: Build
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
name: Git Checkout
with:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
enable-cache: true

Expand All @@ -62,7 +63,7 @@ jobs:
run: uv build

- name: Upload distributions
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: dist
path: dist/
Expand All @@ -74,13 +75,13 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
name: Git Checkout
with:
fetch-depth: 0

- name: Download distributions
uses: actions/download-artifact@v8
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: dist
path: dist/
Expand Down Expand Up @@ -119,7 +120,7 @@ jobs:

- name: Create GitHub Release
if: steps.check_release.outputs.exists == 'false'
uses: softprops/action-gh-release@v3
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
with:
name: Release ${{ github.ref_name }}
files: |
Expand All @@ -138,13 +139,13 @@ jobs:
id-token: write
steps:
- name: Download distributions
uses: actions/download-artifact@v8
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: dist
path: dist/

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0

- name: Publish to PyPI
run: uv publish --trusted-publishing always
10 changes: 7 additions & 3 deletions .github/workflows/pull-request-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@ on:
pull_request:
types: [opened, edited, synchronize, reopened]

permissions:
contents: read
pull-requests: read

jobs:
lint-pr-title:
if: github.base_ref != 'main'
runs-on: ubuntu-latest
name: Lint PR title
steps:
- uses: amannn/action-semantic-pull-request@v6
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
Expand All @@ -30,10 +34,10 @@ jobs:
runs-on: ubuntu-latest
name: Lint commits
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

- uses: wagoid/commitlint-github-action@v6
- uses: wagoid/commitlint-github-action@b948419dd99f3fd78a6548d48f94e3df7f6bf3ed # v6.2.1
with:
configFile: .commitlintrc.mjs
29 changes: 14 additions & 15 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@ name: Tests

on:
workflow_call:
secrets:
CODECOV_TOKEN:
required: false
workflow_dispatch:

permissions:
contents: read

env:
GROUP: "github-tests"

Expand All @@ -12,40 +18,33 @@ jobs:
runs-on: ubuntu-latest
name: Tests
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
name: Git Checkout

- uses: actions/setup-python@v7
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
name: Install Python ${{ vars.PYTHON_VERSION }}
with:
python-version: ${{ vars.PYTHON_VERSION }}

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
enable-cache: true

- name: Install dependencies
run: uv sync --no-dev --group ${{ env.GROUP }}

- uses: j178/prek-action@v3.0.1
name: Execute Prek on push
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
with:
extra-args: --group ${{ env.GROUP }} --all-files

- uses: j178/prek-action@v3.0.1
name: Execute Prek on pull_request
if: github.event_name == 'pull_request'
- uses: j178/prek-action@1382ad72dea72f9d53832f2bcb65b3e87a947204 # v3.0.1
name: Execute Prek
with:
extra-args: --group ${{ env.GROUP }} --files origin/${{ github.base_ref }}..HEAD
extra-args: --verbose --group ${{ env.GROUP }} --all-files

- uses: codecov/codecov-action@v7
- uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
name: Upload coverage to Codecov
with:
token: ${{ secrets.CODECOV_TOKEN }}

- uses: actions/upload-artifact@v7
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
name: Upload coverage report as artifact
with:
name: coverage-report
Expand Down
11 changes: 6 additions & 5 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
repos:
# ── Hooks génériques ─────────────────────────────────────────────────────────
# ── Generic hooks ────────────────────────────────────────────────────────────
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
Expand All @@ -17,7 +17,7 @@ repos:
- id: mixed-line-ending
args: ['--fix=lf']
stages: [pre-commit]
groups: [locals]
groups: [local]
- id: check-json
stages: [pre-commit]
groups: [local,github-src]
Expand Down Expand Up @@ -61,7 +61,7 @@ repos:
files: \.env(-example)?$
groups: [local,github-src]

# ── Fichiers interdits ───────────────────────────────────────────────────────
# ── Forbidden files ──────────────────────────────────────────────────────────
- repo: local
hooks:
- id: forbid-files
Expand Down Expand Up @@ -131,6 +131,7 @@ repos:
language: system
stages: [pre-commit]
types: [python]
files: ^src/
groups: [local,github-src]

# ── Docstring linters (src/) ──────────────────────────────────────────────────
Expand Down Expand Up @@ -187,7 +188,7 @@ repos:
files: ^tests/
groups: [local,github-tests]

# ── Tests & qualite ──────────────────────────────────────────────────────────
# ── Tests & quality ──────────────────────────────────────────────────────────
- repo: local
hooks:
- id: pytest-coverage-all-files
Expand All @@ -201,7 +202,7 @@ repos:

- id: vulture-all-files
name: vulture-all-files
entry: uv run vulture tests/ src/ .vulture
entry: uv run vulture tests/ src/
language: system
stages: [pre-commit]
pass_filenames: false
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-hooks.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
- id: docstring-linter
name: docstring-linter
description: Validate Python docstrings against style conventions.
entry: docstring-linter
entry: docstring-linter --force-exclude
language: python
types: [python]
8 changes: 0 additions & 8 deletions .vulture

This file was deleted.

Loading
Loading