Metadata-Version: 2.4
Name: flake8-kotoha
Version: 0.1.1
Summary: flake8 plugin to improve your type hints
Author-email: nikkie <takuyafjp+develop@gmail.com>
License: MIT License
Project-URL: Repository, https://github.com/ftnext/kotoha-python-linter
Keywords: flake8,type hints
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Framework :: Flake8
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Quality Assurance
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: flake8
Provides-Extra: dev
Requires-Dist: taskipy; extra == "dev"
Requires-Dist: autoflake; extra == "dev"
Requires-Dist: pyupgrade; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: isort; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-randomly; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Dynamic: license-file

# flake8-kotoha

[**K**o**T**o**H**a](https://millionlive-theaterdays.idolmaster-official.jp/idol/kotoha/): **K**aizen **T**ype **H**int

## Install

### uvx (Recommended)

The easiest way to run `flake8` (without manually installation).

```sh
$ uvx --with flake8-kotoha flake8 .
```

### Other options

pipx

```sh
$ pipx install --preinstall flake8-kotoha flake8
$ flake8 -h
...
Installed plugins: flake8-kotoha: 0.1.0, ...
```

venv + pip

```sh
$ python -m venv .venv --upgrade-deps
$ .venv/bin/python -m pip install flake8-kotoha
$ .venv/bin/flake8 -h
...
Installed plugins: flake8-kotoha: 0.1.0, ...
```

uv

```sh
$ uv tool install flake8 --with flake8-kotoha
$ flake8 -h
...
Installed plugins: flake8-kotoha: 0.1.0, ...
```

## Usage

```python
def plus_one(numbers: list[int]) -> list[int]:
    return [n + 1 for n in numbers]
```

```sh
$ flake8 example.py
example.py:1:14: KTH101 Type hint with abstract type `collections.abc.Iterable` or `collections.abc.Sequence`, instead of concrete type `list`
```

## Error codes

Type hints in function **parameters**

Use abstract types instead of concrete ones

| error code | description |
|:----:|:------------|
| KTH101 | Use `Iterable` or `Sequence` instead of `list` |
| KTH102 | Use `Iterable` or `Sequence` instead of `tuple` |
| KTH103 | Use `Iterable` instead of `set` |
| KTH104 | Use `Iterable` instead of `dict` |

## Rationale

https://docs.python.org/ja/3/library/typing.html#typing.List

>Note that to annotate arguments, it is preferred to use an abstract collection type such as `Sequence` or `Iterable` rather than to use `list` or `typing.List`.

https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html#standard-duck-types

>Use Iterable for generic iterables (anything usable in "`for`"), and Sequence where a sequence (supporting "`len`" and "`__getitem__`") is required

https://typing.readthedocs.io/en/latest/reference/best_practices.html#arguments-and-return-types

>For arguments, prefer protocols and abstract types (`Mapping`, `Sequence`, `Iterable`, etc.).
