Your current code-validation pipeline rules may be changed more easily using custolint.
Source Code: https://github.com/a-da/custolint.
Custolint add new layer on top of:
You cannot just add a linter and activate 100% inspections when you have a large, ancient codebase with thousands of lines.
Instead, you only make 1% of the checks available, which is really frustrating for a decent developer.
You could enable those 100% checks just for your changes with "custolint".
Given we have a project alike this one, where we:
- had added a function
custolint/generics.py:filer_output
. - had modified the function
custolint/git.py:_blame
$ tree
...
|-- src
| |-- custolint
...
| | |-- generics.py <<<< 1
| | |-- git.py <<<< 2
| | |-- mypy.py
| | |-- pylint.py
| | `-- typing.py
|-- tests
| `-- test_custolint.py
...
When:
- Detect affected files with
git diff
andgit blame
custolint/git.py
custolint/generics.py
- Run the linter tool (pylint, flake8, mypy, coverage ...) with all available feature enables
(the configuration have to be placed into
config.d/
folder) only on changed affected files or parse log/result of the linter tool. - Match changed code with the linters output, and consider only the match lines as failed lint criteria.
It has to detect that
custolint/generics.py:filer_output
need unitest for coverage andcustolint/git.py:_blame
introduce a mypy typing issue.
Then:
- Fail or Report the build.
$ coverage run --rcfile=config.d/.coveragerc -m pytest && \
custolint coverage config.d/.coveragerc
INFO:custolint.git:Execute git diff command 'git diff origin/main -U0 --diff-filter=ACMRTUXB'
INFO:custolint.git:Git diff detected 16 filed affected
INFO:custolint.coverage:execute coverage command: 'coverage report --data-file=.coverage --show-missing'
src/custolint/git.py:66 not.committed.yet 2022-08-31
$ custolint mypy
INFO:custolint.mypy:MYPY COMPARE WITH 'main' branch
INFO:custolint.git:Execute git diff command 'git diff origin/main -U0 --diff-filter=ACMRTUXB'
INFO:custolint.git:Git diff detected 16 filed affected
INFO:custolint.mypy:execute command 'mypy --config-file=config.d/mypy.ini @/tmp/f/59..000gq/T/tmp...'
tests/test_custolint.py 31 Module has no attribute "bash" [attr-defined] not.committed.yet 2022-08-31
tests/test_custolint.py 125 Function is missing a return type annotation [no-untyped-def] not.committed.yet 2022-08-31
tests/test_custolint.py 140 Function is missing a return type annotation [no-untyped-def] not.committed.yet 2022-08-31
cd "${YOUR_CODE}/" # check typing custolint mypy # code smell checking with pylint custolint pylint # code smell checking with flake8 custolint flake8 # 100% coverage checking for new commits coverage run --rcfile=config.d/.coveragerc -m pytest custolint coverage config.d/.coverage