ml-lints 0.12.1__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.
- ml_lints-0.12.1/.githooks/pre-commit +9 -0
- ml_lints-0.12.1/.github/workflows/ci.yml +37 -0
- ml_lints-0.12.1/.github/workflows/release-please.yml +101 -0
- ml_lints-0.12.1/.gitignore +13 -0
- ml_lints-0.12.1/.release-please-manifest.json +3 -0
- ml_lints-0.12.1/CHANGELOG.md +272 -0
- ml_lints-0.12.1/CLAUDE.md +1 -0
- ml_lints-0.12.1/CONTRIBUTING_RULES.md +256 -0
- ml_lints-0.12.1/GEMINI.md +64 -0
- ml_lints-0.12.1/PKG-INFO +7 -0
- ml_lints-0.12.1/README.md +214 -0
- ml_lints-0.12.1/docs/rules/ML100.md +31 -0
- ml_lints-0.12.1/docs/rules/ML101.md +30 -0
- ml_lints-0.12.1/docs/rules/ML102.md +42 -0
- ml_lints-0.12.1/docs/rules/ML103.md +30 -0
- ml_lints-0.12.1/docs/rules/ML104.md +26 -0
- ml_lints-0.12.1/docs/rules/ML105.md +29 -0
- ml_lints-0.12.1/docs/rules/ML106.md +31 -0
- ml_lints-0.12.1/docs/rules/ML107.md +28 -0
- ml_lints-0.12.1/docs/rules/ML108.md +44 -0
- ml_lints-0.12.1/docs/rules/ML109.md +39 -0
- ml_lints-0.12.1/docs/rules/ML110.md +37 -0
- ml_lints-0.12.1/docs/rules/ML200.md +30 -0
- ml_lints-0.12.1/docs/rules/ML201.md +34 -0
- ml_lints-0.12.1/docs/rules/ML202.md +41 -0
- ml_lints-0.12.1/docs/rules/ML300.md +48 -0
- ml_lints-0.12.1/docs/rules/ML400.md +34 -0
- ml_lints-0.12.1/docs/rules/ML500.md +50 -0
- ml_lints-0.12.1/docs/rules/ML501.md +32 -0
- ml_lints-0.12.1/docs/rules/ML600.md +50 -0
- ml_lints-0.12.1/justfile +131 -0
- ml_lints-0.12.1/pyproject.toml +79 -0
- ml_lints-0.12.1/release-please-config.json +9 -0
- ml_lints-0.12.1/scripts/branch_summary.py +74 -0
- ml_lints-0.12.1/scripts/generate_rule_docs.py +120 -0
- ml_lints-0.12.1/scripts/generate_rules_table.py +69 -0
- ml_lints-0.12.1/src/ml_lints/__init__.py +4 -0
- ml_lints-0.12.1/src/ml_lints/analyzers/__init__.py +0 -0
- ml_lints-0.12.1/src/ml_lints/analyzers/forbidden_types.py +136 -0
- ml_lints-0.12.1/src/ml_lints/analyzers/newtype_casts.py +344 -0
- ml_lints-0.12.1/src/ml_lints/analyzers/newtype_index.py +326 -0
- ml_lints-0.12.1/src/ml_lints/cli.py +512 -0
- ml_lints-0.12.1/src/ml_lints/noqa.py +27 -0
- ml_lints-0.12.1/src/ml_lints/rules/__init__.py +136 -0
- ml_lints-0.12.1/src/ml_lints/rules/_newtype_cast_base.py +103 -0
- ml_lints-0.12.1/src/ml_lints/rules/_template.py +59 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml100_bare_dict.py +72 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml101_bare_tuple.py +71 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml102_dict_of_primitives.py +87 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml103_fixed_tuple.py +71 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml104_variable_tuple.py +67 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml105_newtype_forbidden.py +74 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml106_bare_mapping.py +72 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml107_mapping_of_primitives.py +69 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml108_newtype_self_cast.py +71 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml109_newtype_cross_cast.py +70 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml110_variable_tuple_param.py +88 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml200_frozen_dataclass.py +75 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml201_wrapper_class.py +79 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml202_dict_spread_constructor.py +103 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml300_inner_class.py +81 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml400_untrusted_data.py +200 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml500_australian_english.py +322 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml501_hacky_pluralisation.py +124 -0
- ml_lints-0.12.1/src/ml_lints/rules/ml600.py +120 -0
- ml_lints-0.12.1/src/ml_lints/rules/spelling_map.json +1768 -0
- ml_lints-0.12.1/src/ml_lints/runner.py +95 -0
- ml_lints-0.12.1/src/ml_lints/violation.py +45 -0
- ml_lints-0.12.1/tests/__init__.py +0 -0
- ml_lints-0.12.1/tests/conftest.py +39 -0
- ml_lints-0.12.1/tests/rules/__init__.py +0 -0
- ml_lints-0.12.1/tests/rules/_template.py +45 -0
- ml_lints-0.12.1/tests/rules/test_ml100.py +49 -0
- ml_lints-0.12.1/tests/rules/test_ml101.py +41 -0
- ml_lints-0.12.1/tests/rules/test_ml102.py +149 -0
- ml_lints-0.12.1/tests/rules/test_ml103.py +70 -0
- ml_lints-0.12.1/tests/rules/test_ml104.py +24 -0
- ml_lints-0.12.1/tests/rules/test_ml105.py +79 -0
- ml_lints-0.12.1/tests/rules/test_ml106.py +36 -0
- ml_lints-0.12.1/tests/rules/test_ml107.py +42 -0
- ml_lints-0.12.1/tests/rules/test_ml108.py +228 -0
- ml_lints-0.12.1/tests/rules/test_ml109.py +215 -0
- ml_lints-0.12.1/tests/rules/test_ml110.py +118 -0
- ml_lints-0.12.1/tests/rules/test_ml200.py +107 -0
- ml_lints-0.12.1/tests/rules/test_ml201.py +108 -0
- ml_lints-0.12.1/tests/rules/test_ml202_dict_spread_constructor.py +186 -0
- ml_lints-0.12.1/tests/rules/test_ml300.py +57 -0
- ml_lints-0.12.1/tests/rules/test_ml400.py +265 -0
- ml_lints-0.12.1/tests/rules/test_ml500_australian_english.py +424 -0
- ml_lints-0.12.1/tests/rules/test_ml501_hacky_pluralisation.py +148 -0
- ml_lints-0.12.1/tests/rules/test_ml600.py +123 -0
- ml_lints-0.12.1/tests/test_cli_exclusions.py +127 -0
- ml_lints-0.12.1/tests/test_cli_explain.py +50 -0
- ml_lints-0.12.1/tests/test_cli_filtering.py +179 -0
- ml_lints-0.12.1/tests/test_rule_examples.py +92 -0
- ml_lints-0.12.1/tests/test_runner.py +53 -0
- ml_lints-0.12.1/uv.lock +487 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Git pre-commit hook — runs the full justfile precommit suite before each commit.
|
|
3
|
+
#
|
|
4
|
+
# This file is version-controlled in .githooks/. To activate it on a fresh clone:
|
|
5
|
+
#
|
|
6
|
+
# git config core.hooksPath .githooks
|
|
7
|
+
#
|
|
8
|
+
# Or run: just setup-git-hooks
|
|
9
|
+
just precommit
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
# The justfile is the single source of truth for all check commands.
|
|
4
|
+
# This workflow calls justfile recipes directly — the same commands
|
|
5
|
+
# that pre-commit hooks invoke locally. To add or change a check,
|
|
6
|
+
# edit the justfile recipe and update the steps here to match.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
branches: ["main"]
|
|
11
|
+
pull_request:
|
|
12
|
+
branches: ["main"]
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
ci:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v6
|
|
19
|
+
|
|
20
|
+
- uses: actions/setup-python@v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.13"
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
uses: astral-sh/setup-uv@v8.1.0
|
|
26
|
+
|
|
27
|
+
- name: Install just
|
|
28
|
+
uses: taiki-e/install-action@v2
|
|
29
|
+
with:
|
|
30
|
+
tool: just
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: uv sync
|
|
34
|
+
|
|
35
|
+
# Pre-commit logic is defined in the justfile `precommit` target — do not add steps here.
|
|
36
|
+
- name: Validate project
|
|
37
|
+
run: just precommit
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
name: Release Please
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release-please:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
outputs:
|
|
16
|
+
release_created: ${{ steps.release.outputs.release_created }}
|
|
17
|
+
pr: ${{ steps.release.outputs.pr }}
|
|
18
|
+
tag_name: ${{ steps.release.outputs.tag_name }}
|
|
19
|
+
steps:
|
|
20
|
+
- uses: googleapis/release-please-action@v5
|
|
21
|
+
id: release
|
|
22
|
+
with:
|
|
23
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
24
|
+
config-file: release-please-config.json
|
|
25
|
+
manifest-file: .release-please-manifest.json
|
|
26
|
+
|
|
27
|
+
ci:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
needs: release-please
|
|
30
|
+
if: ${{ needs.release-please.outputs.release_created }}
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v6
|
|
33
|
+
|
|
34
|
+
- uses: actions/setup-python@v6
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.13"
|
|
37
|
+
|
|
38
|
+
- name: Install uv
|
|
39
|
+
uses: astral-sh/setup-uv@v8.1.0
|
|
40
|
+
|
|
41
|
+
- name: Install just
|
|
42
|
+
uses: taiki-e/install-action@v2
|
|
43
|
+
with:
|
|
44
|
+
tool: just
|
|
45
|
+
|
|
46
|
+
- name: Install dependencies
|
|
47
|
+
run: uv sync
|
|
48
|
+
|
|
49
|
+
- name: Validate project
|
|
50
|
+
run: just precommit
|
|
51
|
+
|
|
52
|
+
update-lockfile:
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
needs: release-please
|
|
55
|
+
if: ${{ needs.release-please.outputs.pr }}
|
|
56
|
+
permissions:
|
|
57
|
+
contents: write
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/checkout@v6
|
|
60
|
+
with:
|
|
61
|
+
ref: release-please--branches--main
|
|
62
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
63
|
+
|
|
64
|
+
- name: Install uv
|
|
65
|
+
uses: astral-sh/setup-uv@v8.1.0
|
|
66
|
+
|
|
67
|
+
- name: Update lock file
|
|
68
|
+
run: uv lock
|
|
69
|
+
|
|
70
|
+
- name: Commit updated lock file
|
|
71
|
+
run: |
|
|
72
|
+
git config user.name "github-actions[bot]"
|
|
73
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
74
|
+
git add uv.lock
|
|
75
|
+
git diff --staged --quiet || git commit -m "chore: update uv.lock for version bump"
|
|
76
|
+
git push
|
|
77
|
+
|
|
78
|
+
publish-release:
|
|
79
|
+
needs: [release-please, ci]
|
|
80
|
+
if: ${{ needs.release-please.outputs.release_created }}
|
|
81
|
+
runs-on: ubuntu-latest
|
|
82
|
+
environment: pypi
|
|
83
|
+
permissions:
|
|
84
|
+
contents: write
|
|
85
|
+
id-token: write
|
|
86
|
+
steps:
|
|
87
|
+
- uses: actions/checkout@v6
|
|
88
|
+
|
|
89
|
+
- name: Install uv
|
|
90
|
+
uses: astral-sh/setup-uv@v8.1.0
|
|
91
|
+
|
|
92
|
+
- name: Build package
|
|
93
|
+
run: uv build
|
|
94
|
+
|
|
95
|
+
- name: Publish GitHub release
|
|
96
|
+
env:
|
|
97
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
98
|
+
run: gh release edit "${{ needs.release-please.outputs.tag_name }}" --draft=false
|
|
99
|
+
|
|
100
|
+
- name: Publish package to PyPI
|
|
101
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.12.1](https://github.com/lawther/python-lint-hooks/compare/v0.12.0...v0.12.1) (2026-07-26)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **ci:** correct PyPI GitHub Action repository path ([a101777](https://github.com/lawther/python-lint-hooks/commit/a101777e8f51d7b698ad15936171fa36caab1281))
|
|
9
|
+
|
|
10
|
+
## [0.12.0](https://github.com/lawther/python-lint-hooks/compare/v0.11.0...v0.12.0) (2026-07-26)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* rename project to ml-lints and module to ml_lints ([4e2e1aa](https://github.com/lawther/python-lint-hooks/commit/4e2e1aa89e5b2bfe244838ae43383412bbb0aa9c))
|
|
16
|
+
* **rules:** add ML600 to ban [@patch](https://github.com/patch)(new=Mock(...)) decorators ([765b94d](https://github.com/lawther/python-lint-hooks/commit/765b94de03aff2d0530e640dfb902f018487e5e8))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
* **cli:** load pyproject.toml per target project root when linting external directories ([81f45f9](https://github.com/lawther/python-lint-hooks/commit/81f45f91fa87a206d45c9ebba8c936b3ecb5dab4)), closes [#32](https://github.com/lawther/python-lint-hooks/issues/32)
|
|
22
|
+
* **cli:** resolve path objects in _collect_out_of_root_files consistently ([516e1dd](https://github.com/lawther/python-lint-hooks/commit/516e1dd631b7c5ea4f08397ce4ec5d46bd6db67d))
|
|
23
|
+
* **cli:** stop --select/--ignore/--exclude from swallowing paths ([6f367e3](https://github.com/lawther/python-lint-hooks/commit/6f367e3c8dae80e63e2190ac58db8cd197f16f0a))
|
|
24
|
+
* resolve project root and gitignore per target path ([cbb8c0d](https://github.com/lawther/python-lint-hooks/commit/cbb8c0d63ee5eb80199c55a29fe8b3a779848549)), closes [#30](https://github.com/lawther/python-lint-hooks/issues/30)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Documentation
|
|
28
|
+
|
|
29
|
+
* add missing rule-category rows to CONTRIBUTING_RULES.md ([f4fc7ae](https://github.com/lawther/python-lint-hooks/commit/f4fc7ae89570ef4f810db82ac8307f6f907308a2))
|
|
30
|
+
|
|
31
|
+
## [0.11.0](https://github.com/lawther/python-lint-hooks/compare/v0.10.1...v0.11.0) (2026-06-08)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Features
|
|
35
|
+
|
|
36
|
+
* **rules:** add ML110 to detect variable-length tuple parameter annotations ([863896f](https://github.com/lawther/python-lint-hooks/commit/863896fd8a87a45033856412c96ce81cdcd16425))
|
|
37
|
+
* **rules:** add ML202 to detect __dict__/vars() spread into constructors ([348ef41](https://github.com/lawther/python-lint-hooks/commit/348ef418039a73da70c28bc1e326de7eedf03a61))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
* make register decorator generic to preserve subclass types ([3032f66](https://github.com/lawther/python-lint-hooks/commit/3032f661524db2a08622b64d7968ea4c14c399cb))
|
|
43
|
+
|
|
44
|
+
## [0.10.1](https://github.com/lawther/python-lint-hooks/compare/v0.10.0...v0.10.1) (2026-06-03)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### Bug Fixes
|
|
48
|
+
|
|
49
|
+
* remove American-to-British spelling mappings for practice variants ([804caf1](https://github.com/lawther/python-lint-hooks/commit/804caf10aa6b772ed3c87f6aa542c40563e28448))
|
|
50
|
+
* remove incorrect spelling mapping for ankle ([483a58b](https://github.com/lawther/python-lint-hooks/commit/483a58b3bac71b9f862e25669a203311553ff648))
|
|
51
|
+
|
|
52
|
+
## [0.10.0](https://github.com/lawther/python-lint-hooks/compare/v0.9.0...v0.10.0) (2026-06-03)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Features
|
|
56
|
+
|
|
57
|
+
* **ml500:** exempt override methods from Australian English check ([eb4a7b3](https://github.com/lawther/python-lint-hooks/commit/eb4a7b39f69bad45f248bd70cedc96abb594dfa7))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Bug Fixes
|
|
61
|
+
|
|
62
|
+
* **ml500:** resolve base-class chains longer than two levels ([5a67b40](https://github.com/lawther/python-lint-hooks/commit/5a67b40eac20115fc741df445829336e3ff42634))
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
### Documentation
|
|
66
|
+
|
|
67
|
+
* remove bad merge from README ([b8f1cb1](https://github.com/lawther/python-lint-hooks/commit/b8f1cb18b1857908a71e6a7d00ce0ebd5b7ef92d))
|
|
68
|
+
* update ML500 rule documentation and test examples to exclude overridden methods ([57ed9e0](https://github.com/lawther/python-lint-hooks/commit/57ed9e026aa9ca28a332f4f9b344208a27af9a39))
|
|
69
|
+
|
|
70
|
+
## [0.9.0](https://github.com/lawther/python-lint-hooks/compare/v0.8.0...v0.9.0) (2026-05-29)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
### Features
|
|
74
|
+
|
|
75
|
+
* **rules:** add ML501 to detect hacky pluralisation in strings ([ace61d7](https://github.com/lawther/python-lint-hooks/commit/ace61d756c79274e6661d3b618ce9b2b07a97c48))
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
### Documentation
|
|
79
|
+
|
|
80
|
+
* **rules:** improve ML300 rationale to explain Python's scoping illusion ([4d85cea](https://github.com/lawther/python-lint-hooks/commit/4d85ceac35717a88f6ea43e7e3e7dfb364ebed45))
|
|
81
|
+
|
|
82
|
+
## [0.8.0](https://github.com/lawther/python-lint-hooks/compare/v0.7.7...v0.8.0) (2026-05-15)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
### Features
|
|
86
|
+
|
|
87
|
+
* **rules:** add ML108 and ML109 for redundant NewType casts ([ecfffd9](https://github.com/lawther/python-lint-hooks/commit/ecfffd9bd59091367d80113fc30564b454c74b01))
|
|
88
|
+
* **rules:** catch redundant NewType casts on for-loop and comprehension targets ([6ac09b6](https://github.com/lawther/python-lint-hooks/commit/6ac09b69229f3431df207df17692c8f247333555))
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
### Bug Fixes
|
|
92
|
+
|
|
93
|
+
* **rules:** make ML108 and ML109 messages name a concrete fix ([6ab3aee](https://github.com/lawther/python-lint-hooks/commit/6ab3aee797a6d1465cc924017bcf69b4798e461b))
|
|
94
|
+
|
|
95
|
+
## [0.7.7](https://github.com/lawther/python-lint-hooks/compare/v0.7.6...v0.7.7) (2026-05-15)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
### Bug Fixes
|
|
99
|
+
|
|
100
|
+
* **rules:** exempt to_dict and as_dict from ML102 ([5eb8939](https://github.com/lawther/python-lint-hooks/commit/5eb8939543f41078c5c9d56e1c731a5174776605))
|
|
101
|
+
* **rules:** exempt URLs and dotted names from ML500 spelling checks ([d12f659](https://github.com/lawther/python-lint-hooks/commit/d12f659f68698ce1f27f9f07cc737d5b88051e87))
|
|
102
|
+
|
|
103
|
+
## [0.7.6](https://github.com/lawther/python-lint-hooks/compare/v0.7.5...v0.7.6) (2026-05-15)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
### Bug Fixes
|
|
107
|
+
|
|
108
|
+
* **rules:** allow noqa on closing docstring line to suppress ML500 ([f91548a](https://github.com/lawther/python-lint-hooks/commit/f91548acacbaa9e0dd348ec6255baa53f546160e))
|
|
109
|
+
* **rules:** exempt imported names from ML500 spelling checks ([48945fa](https://github.com/lawther/python-lint-hooks/commit/48945fa6cb60026370ceaf7d180f32db6d343db4))
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
### Documentation
|
|
113
|
+
|
|
114
|
+
* **rules:** document ML500 automatic exemptions in README ([6ff1a3a](https://github.com/lawther/python-lint-hooks/commit/6ff1a3a22131d2164dbcd944a07bcbaa6b27d7f1))
|
|
115
|
+
|
|
116
|
+
## [0.7.5](https://github.com/lawther/python-lint-hooks/compare/v0.7.4...v0.7.5) (2026-05-15)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
### Documentation
|
|
120
|
+
|
|
121
|
+
* **cli:** clarify override behavior of exclude, select, and ignore flags ([801ad84](https://github.com/lawther/python-lint-hooks/commit/801ad84ce4fdc3767661571be933382d96ee0c88))
|
|
122
|
+
|
|
123
|
+
## [0.7.4](https://github.com/lawther/python-lint-hooks/compare/v0.7.3...v0.7.4) (2026-05-10)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
### Bug Fixes
|
|
127
|
+
|
|
128
|
+
* **rules:** add 'initializer' to ML500 spelling map ([dfdf10a](https://github.com/lawther/python-lint-hooks/commit/dfdf10a98e56f2f79ba26105745f259403e5e573))
|
|
129
|
+
|
|
130
|
+
## [0.7.3](https://github.com/lawther/python-lint-hooks/compare/v0.7.2...v0.7.3) (2026-05-10)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
### Bug Fixes
|
|
134
|
+
|
|
135
|
+
* **rules:** implement case-preserving and aggregated suggestions for ML500 ([c0a96b1](https://github.com/lawther/python-lint-hooks/commit/c0a96b17f0c1cad3474c42c35edbf68fb706e9d5))
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
### Documentation
|
|
139
|
+
|
|
140
|
+
* remove mention of inner class exemptions from README ([9d566d6](https://github.com/lawther/python-lint-hooks/commit/9d566d670818aa9fc550a46d2e005bfe8aa04969))
|
|
141
|
+
|
|
142
|
+
## [0.7.2](https://github.com/lawther/python-lint-hooks/compare/v0.7.1...v0.7.2) (2026-05-10)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
### Bug Fixes
|
|
146
|
+
|
|
147
|
+
* **rules:** flag American English in docstrings (ML500) ([5f083f5](https://github.com/lawther/python-lint-hooks/commit/5f083f5ba2e8241d71434591832a06e31df4d57d))
|
|
148
|
+
|
|
149
|
+
## [0.7.1](https://github.com/lawther/python-lint-hooks/compare/v0.7.0...v0.7.1) (2026-05-10)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
### Bug Fixes
|
|
153
|
+
|
|
154
|
+
* removed erroneous words ([352f682](https://github.com/lawther/python-lint-hooks/commit/352f682996a0454cd2fbd048dc42c8ebcd93ed56))
|
|
155
|
+
|
|
156
|
+
## [0.7.0](https://github.com/lawther/python-lint-hooks/compare/v0.6.1...v0.7.0) (2026-05-10)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
### Features
|
|
160
|
+
|
|
161
|
+
* **rules:** add ML106 and ML107 to detect forbidden Mapping types ([8db371c](https://github.com/lawther/python-lint-hooks/commit/8db371c91460ea58084d43233ca60754788c33ac))
|
|
162
|
+
* **rules:** add ML500 to enforce Australian English spelling ([8041781](https://github.com/lawther/python-lint-hooks/commit/80417816f564cbbc44636a1cd1c5f89e1ef62c1a))
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
### Bug Fixes
|
|
166
|
+
|
|
167
|
+
* **cli:** implement Ruff-style path exclusion logic ([d0686f3](https://github.com/lawther/python-lint-hooks/commit/d0686f3a4c106ad3accf632e574ef72b44535249)), closes [#15](https://github.com/lawther/python-lint-hooks/issues/15)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
### Documentation
|
|
171
|
+
|
|
172
|
+
* implement rationale and examples for all lint rules ([7aa5d7e](https://github.com/lawther/python-lint-hooks/commit/7aa5d7e9c91288c15a8e4570bc2b9f17875218c3))
|
|
173
|
+
* update legacy rule references in README ([4af4329](https://github.com/lawther/python-lint-hooks/commit/4af43290f1af49baf89fd336ca88f458e752dabd))
|
|
174
|
+
|
|
175
|
+
## [0.6.1](https://github.com/lawther/python-lint-hooks/compare/v0.6.0...v0.6.1) (2026-05-08)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
### Bug Fixes
|
|
179
|
+
|
|
180
|
+
* exclude ClassVar fields from ML201 all-forbidden-types check ([42cf5b1](https://github.com/lawther/python-lint-hooks/commit/42cf5b1f474488af94f7a23bee7db6559b36ab97))
|
|
181
|
+
* recognise [@alias](https://github.com/alias).dataclass regardless of module alias name ([d51ae7e](https://github.com/lawther/python-lint-hooks/commit/d51ae7e67b83d24d7e9473b70524027ac302b96e))
|
|
182
|
+
* recognise t.NewType regardless of typing module alias name ([0f26908](https://github.com/lawther/python-lint-hooks/commit/0f26908bf9201b62101741b47d261438ac6bf800))
|
|
183
|
+
|
|
184
|
+
## [0.6.0](https://github.com/lawther/python-lint-hooks/compare/v0.5.0...v0.6.0) (2026-05-08)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
### Features
|
|
188
|
+
|
|
189
|
+
* add per-file branch coverage breakdown to just test output ([417afcb](https://github.com/lawther/python-lint-hooks/commit/417afcb6cf887829873298e98616219c86a9c55e))
|
|
190
|
+
* introduce RuleCode StrEnum for type-safe rule codes ([f72ecd6](https://github.com/lawther/python-lint-hooks/commit/f72ecd64c007a41086815a189c985b99b9acc2ef))
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
### Bug Fixes
|
|
194
|
+
|
|
195
|
+
* handle ast.Starred in _get_names so starred unpack variables are tainted ([46be6e0](https://github.com/lawther/python-lint-hooks/commit/46be6e0115087cad9626c41c50eefa626e77aef9))
|
|
196
|
+
* isolate comprehension variable taint with per-comprehension scope ([a0731f7](https://github.com/lawther/python-lint-hooks/commit/a0731f75d6846ce2cfcebd2eb7f68c77014cee3a))
|
|
197
|
+
* unconditionally update loop-variable taint in enter_For ([e49073d](https://github.com/lawther/python-lint-hooks/commit/e49073dfeda9ad114ce2ad128600868d28970b52))
|
|
198
|
+
* use gen.iter as source_node in comprehension taint propagation ([54750ac](https://github.com/lawther/python-lint-hooks/commit/54750ac60d46f24636baa107f88658c8572d5579))
|
|
199
|
+
|
|
200
|
+
## [0.5.0](https://github.com/lawther/python-lint-hooks/compare/v0.4.0...v0.5.0) (2026-05-08)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
### Features
|
|
204
|
+
|
|
205
|
+
* add docs-rules, check-rules-docs, and new-rule justfile recipes ([e5ac3f5](https://github.com/lawther/python-lint-hooks/commit/e5ac3f5657548104bc7d97690e7d6e30617a8ff5))
|
|
206
|
+
* add ML400 rule to detect unvalidated external data usage ([8bd289b](https://github.com/lawther/python-lint-hooks/commit/8bd289b8e530642cae8161dadfce69cfe02af8cb))
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
### Bug Fixes
|
|
210
|
+
|
|
211
|
+
* disallow bare # noqa suppressions to prevent over-suppression ([9e6e668](https://github.com/lawther/python-lint-hooks/commit/9e6e6689b9f0befc8c1c38a4eca9c5ca2c3268cc))
|
|
212
|
+
* include ml400_untrusted_data.py omitted from previous staging ([53f31a6](https://github.com/lawther/python-lint-hooks/commit/53f31a63fcfcb688d6ae6b5d1c1da6524f0132ff))
|
|
213
|
+
* suppress ML400 on tomllib.load in cli (pre-validation navigation) ([4b65652](https://github.com/lawther/python-lint-hooks/commit/4b6565272ce57b1d044c719c2082fe580b3b7fd0))
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
### Documentation
|
|
217
|
+
|
|
218
|
+
* add CONTRIBUTING_RULES.md and link from GEMINI.md ([485b189](https://github.com/lawther/python-lint-hooks/commit/485b189259fedc2379739011be4fd9017c0e4059))
|
|
219
|
+
* update justfile integration example in README ([e6d12ef](https://github.com/lawther/python-lint-hooks/commit/e6d12efcceb5b7a3c927514bedcc061bd07234d0))
|
|
220
|
+
|
|
221
|
+
## [0.4.0](https://github.com/lawther/python-lint-hooks/compare/v0.3.0...v0.4.0) (2026-05-06)
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
### Features
|
|
225
|
+
|
|
226
|
+
* add ML105 to catch NewType bypasses of return type rules ([0321c6d](https://github.com/lawther/python-lint-hooks/commit/0321c6db90c8b67f28296bd43028ad84fc7ccd65))
|
|
227
|
+
* add ML201 to catch classes wrapping only forbidden types ([4e9886d](https://github.com/lawther/python-lint-hooks/commit/4e9886de156bb132d4bd6002f9662e4f76a9300e))
|
|
228
|
+
|
|
229
|
+
## [0.3.0](https://github.com/lawther/python-lint-hooks/compare/v0.2.0...v0.3.0) (2026-05-06)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
### Features
|
|
233
|
+
|
|
234
|
+
* add pytest-randomly to development dependencies ([14cd9f8](https://github.com/lawther/python-lint-hooks/commit/14cd9f800263df0d6979556e370dd5db4e4dbd68))
|
|
235
|
+
* add Ruff-like --select and --ignore CLI filtering ([71e76aa](https://github.com/lawther/python-lint-hooks/commit/71e76aa158e53d6aa764bb3aca92437a6622c2b7))
|
|
236
|
+
* enforce frozen=True for dataclasses (ML005) ([5b46303](https://github.com/lawther/python-lint-hooks/commit/5b46303192d9830e837b6a3480ff2a60a842dfd3))
|
|
237
|
+
* expanded return type enforcement and thematic renumbering ([ed4a0f4](https://github.com/lawther/python-lint-hooks/commit/ed4a0f4403e1db7f2b71137ca626fb4784ce72f5)), closes [#5](https://github.com/lawther/python-lint-hooks/issues/5)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
### Documentation
|
|
241
|
+
|
|
242
|
+
* document --select, --ignore and prefix matching behavior ([988de6a](https://github.com/lawther/python-lint-hooks/commit/988de6a6428da1ce20b08c6d1684c753244f64f5))
|
|
243
|
+
* update README with ML005 and new CLI options ([49400bf](https://github.com/lawther/python-lint-hooks/commit/49400bfee22fc5dae417e14246085a6a2a6b2494))
|
|
244
|
+
|
|
245
|
+
## [0.2.0](https://github.com/lawther/python-lint-hooks/compare/v0.1.0...v0.2.0) (2026-05-06)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
### Features
|
|
249
|
+
|
|
250
|
+
* add Ruff-like exclusion options to CLI ([8a137ff](https://github.com/lawther/python-lint-hooks/commit/8a137ffba6278a62f62999863a9efd4c46d6ba18))
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
### Documentation
|
|
254
|
+
|
|
255
|
+
* add GEMINI.md coding conventions and link in CLAUDE.md ([407948d](https://github.com/lawther/python-lint-hooks/commit/407948d51f03a7f5e6ae4e7d8276df053e31aeb8))
|
|
256
|
+
|
|
257
|
+
## 0.1.0 (2026-05-06)
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
### Features
|
|
261
|
+
|
|
262
|
+
* initial implementation of ML001 (bare dict/tuple returns) and ML002 (class inside function) ([d2756d7](https://github.com/lawther/python-lint-hooks/commit/d2756d74c603058852c30b11c35bf2e5295dad41))
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
### Bug Fixes
|
|
266
|
+
|
|
267
|
+
* commit ruff auto-fixes missed by precommit staging; rename noqa section comment ([b2a0fc3](https://github.com/lawther/python-lint-hooks/commit/b2a0fc3550624600ecb4e96e46a1ad47bf967bad))
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
### Documentation
|
|
271
|
+
|
|
272
|
+
* add README covering installation, rules, configuration and integration ([eee9cf1](https://github.com/lawther/python-lint-hooks/commit/eee9cf1777510086c34478adb8e938edf0494d1b))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@GEMINI.md
|