Rust로 만든 매우 빠른 Python Linter
2022년에 공개된 후 Star가 빠른 속도로 증가 중 (깃허브 링크)
pyproject.toml
로 config를 관리함Flake8
, isort
, pydocstyle
, yesqa
, eradicate
, pyupgrade
, autoflake
대신 Ruff 하나로 대체 가능안 쓸 이유가..? 없다..!
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: 'v0.0.256'
hooks:
- id: ruff
args: ["--fix"]
repo에 ruff를 추가해주고 원하는 버전을 추가해주면 된다.
autofix
기능을 사용하고 싶다면 args에 --fix
를 추가해준다.
# ref: https://beta.ruff.rs/docs/rules/
select = ["B", "C4", "E", "F", "N", "I", "W", "UP"]
ignore = ["F403","F405","E501","E402"]
# Allow autofix for all enabled rules (when `--fix`) is provided.
fixable = ["A", "B", "C", "D", "E", "F", "I", "UP"]
unfixable = []
per-file-ignores = {}
# Same as Black.
line-length = 88
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
# Assume Python 3.9.
target-version = "py39"
[tool.ruff.mccabe]
# Unlike Flake8, default to a complexity level of 10.
max-complexity = 10
Ruff는 toml로 config를 관리한다.(참고)
공식 문서를 참고해서 괜찮은 플러그인들을 적용했다.
select
에 있는 rule들이 내가 사용하는 플러그인이고, ignore
는 사용하지 않는 플러그인이다.
select
에 있는 rule 중 사용하고 싶지 않은 code들이 있다면 ignore
에 넣어주면 된다.
ex) E는 사용하지만 E501은 사용하고 싶지 않을때
`E501 - “Line too long ({length} > {limit} characters)“` ([참고](https://beta.ruff.rs/docs/rules/#pycodestyle-e-w))
Ruff는 autofix도 지원하기 때문에 사용하고 싶은 플러그인을 fixable
에 넣어주면 된다.