
Il s'agit d'un simple script Python conçu pour filtrer les violations de codage (probablement identifiées par un analyseur statique) pour uniquement les lignes qui ont été modifiées dans un référentiel GIT.
Cet outil fonctionne avec n'importe quel linter ou analyseur de code statique, y compris, mais sans s'y limiter:
pip install ondiviAssurez-vous que vous êtes dans le répertoire racine de votre référentiel GIT.
Exécutez le script:
flake8 script.py | ondivi
# with ruff:
ruff check file.py --output-format=concise | ondiviou:
flake8 script.py > violations.txt
ondivi --fromfile=violations.txt $ ondivi --help
Usage: ondivi [OPTIONS]
Ondivi (Only diff violations).
Python script filtering coding violations, identified by static analysis,
only for changed lines in a Git repo. Usage example:
flake8 script.py | ondivi
Options:
--baseline TEXT Commit or branch which will contain legacy code. Program
filter out violations on baseline (default: "master")
--fromfile TEXT Path to file with violations. Expected "utf-8" encoding
--format TEXT Template for parsing linter messages. The template should
include the following named parts:
{filename} The name of the file with the error/warning
{line_num} The line number with the error/warning
(integer)
Example usage:
--format "{filename}:{line_num:d}{other}"
In this example, the linter message
"src/app_types/listable.py:23:1: UP035 Import from
collections.abc instead: Sequence"
will be recognized and parsed into the following
components:
- filename: "src/app_types/listable.py"
- line_num: 23
- other: :1: "UP035 Import from collections.abc instead:
Sequence"
Ensure that the template matches the format of the
messages generated by your linter.
(default: "{filename}:{line_num:d}{other}")
--only-violations Show only violations
--help Show this message and exit.
Le script analyse la sortie Git Diff pour identifier les lignes modifiées dans chaque fichier.
Il filtre ensuite les violations de codage données pour inclure uniquement les violations qui correspondent aux lignes modifiées.
Flakeheaven et Flakehell ne sont pas soutenus car ils s'appuient sur l'API interne Flake8, ce qui peut entraîner des problèmes de compatibilité à mesure que Flake8 évolue. En revanche, Ondivi utilise uniquement la sortie du texte des violations et l'état du référentiel GIT, ce qui le rend plus robuste et plus facile à entretenir.
Flake8 sur dossier:
$ flake8 file.py
file.py:3:1: E302 expected 2 blank lines, found 1
file.py:9:1: E302 expected 2 blank lines, found 1
file.py:10:121: E501 line too long (123 > 120 characters)
file.py:14:1: E305 expected 2 blank lines after class or function definition, found 1Exemple de changements:
from dataclasses import dataclass
@dataclass
class User(object):
name: str
age: int
def greet(user: User):
print('Long string in initial commit ################################################################################')
print(f'Hello, {user.name}!')
+ print('Long string in new commit ################################################################################')
if __name__ == '__main__':
greet(User(345, 23))
+ greet(User('Bob', '23'))Par Git Diff, nous voyons que deux nouvelles lignes ont été annexées (12 et 16):
Ondivi filtre les violations et n'en montre qu'une pour la ligne 12:
$ flake8 script.py | ondivi
file.py:12:80: E501 line too long (119 > 79 characters)Ce projet est autorisé sous la licence du MIT. Voir le fichier de licence pour plus de détails.