
Este es un simple script de Python diseñado para filtrar violaciones de codificación (probablemente identificadas por un analizador estático) solo para las líneas que se han cambiado en un repositorio GIT.
Esta herramienta funciona con cualquier analizador de código estático o de enlace, incluyendo, entre otros::
pip install ondiviAsegúrese de estar en el directorio raíz de su repositorio Git.
Ejecute el guión:
flake8 script.py | ondivi
# with ruff:
ruff check file.py --output-format=concise | ondivio:
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.
El script analiza la salida Git Diff para identificar las líneas cambiadas en cada archivo.
Luego filtra las violaciones de codificación dadas para incluir solo aquellas violaciones que corresponden a las líneas cambiadas.
FlakeHeaven y Flakehell no son compatibles porque dependen de la API interna de Flake8, lo que puede conducir a problemas de compatibilidad a medida que evoluciona a Flake8. En contraste, OnDivi usa solo la salida de texto de violaciones y el estado del repositorio de Git, lo que lo hace más robusto y más fácil de mantener.
Flake8 en el archivo:
$ 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 1Ejemplo de cambios:
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'))Por Git Diff, vemos que se agregaron dos nuevas líneas (12 y 16):
Ondivi filtra violaciones y muestra solo una para la línea 12:
$ flake8 script.py | ondivi
file.py:12:80: E501 line too long (119 > 79 characters)Este proyecto tiene licencia bajo la licencia MIT. Consulte el archivo de licencia para obtener más detalles.