# Ondivi (Only diff violations)

[![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide)
[![PyPI version](https://badge.fury.io/py/ondivi.svg)](https://badge.fury.io/py/ondivi)
![CI status](https://github.com/blablatdinov/ondivi/actions/workflows/pr-check.yml/badge.svg?branch=master)
[![Lines of code](https://tokei.rs/b1/github/blablatdinov/ondivi)](https://github.com/XAMPPRocky/tokei_rs)
[![Hits-of-Code](https://hitsofcode.com/github/blablatdinov/ondivi)](https://hitsofcode.com/github/blablatdinov/quranbot-aiogram/view)

This is a simple Python script designed to filter coding violations (likely identified by a static analyzer) for only the lines that have been changed in a Git repository.

## Prerequisites:

- Python 3.9 or higher
- Git

## Installation

```bash
pip install ondivi
```

## Usage

Ensure you are in the root directory of your Git repository.

Run the script:

```bash
flake8 script.py | ondivi
```

```bash
ondivi -h
```

```
usage: ondivi [-h] [--baseline BASELINE] [--format VIOLATION_FORMAT]

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

optional arguments:
usage: ondivi [-h] [--baseline BASELINE] [--format VIOLATION_FORMAT]

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

optional arguments:
  -h, --help            show this help message and exit
  --baseline BASELINE   Commit or branch which will contain legacy code. Program filter out violations on baseline (default: "master")
  --format VIOLATION_FORMAT
                        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}")
```

## How it Works

The script parses the Git diff output to identify the changed lines in each file.

It then filters the given coding violations to include only those violations that correspond to the changed lines.

## License

This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
