
Este é um script python simples projetado para filtrar violações de codificação (provavelmente identificadas por um analisador estático) apenas para as linhas que foram alteradas em um repositório Git.
Esta ferramenta funciona com qualquer liner ou analisador de código estático, incluindo, entre outros,:
pip install ondiviVerifique se você está no diretório raiz do seu repositório Git.
Execute o 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.
O script analisa a saída Git Diff para identificar as linhas alteradas em cada arquivo.
Em seguida, filtra as violações de codificação dadas para incluir apenas as violações que correspondem às linhas alteradas.
Flakeheaven e Flakehell não são suportados porque dependem da API interna do Flake8, o que pode levar a problemas de compatibilidade à medida que o Flake8 evolui. Por outro lado, o OnDivi usa apenas a saída de texto de violações e o estado do repositório Git, tornando -o mais robusto e fácil de manter.
Flake8 em arquivo:
$ 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 1Exemplo de alterações:
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 Dif, vemos, que duas novas linhas foram anexadas (12 e 16):
OnDivi filtra violações e mostra apenas uma para a linha 12:
$ flake8 script.py | ondivi
file.py:12:80: E501 line too long (119 > 79 characters)Este projeto está licenciado sob a licença do MIT. Consulte o arquivo de licença para obter detalhes.