aboutsummaryrefslogtreecommitdiffstats
path: root/ruff.toml
blob: b7162a55b7e14a51ea5b9a5306c344583fe51276 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# How the Python in this tree is formatted, and how its imports are ordered.
# `.githooks/pre-commit` applies both to what you staged (install it with
# `git config core.hooksPath .githooks`); `ruff format --check .` asks.
#
# Adopted when PR #1 arrived black-formatted: ruff's formatter IS black's
# output, it is one static binary instead of a Python dependency chain, and it
# is fast enough that a pre-commit hook is free. Configuration is deliberately
# left at the defaults -- every knob turned here is an argument somebody has to
# have again later.

# The version this tree was formatted with, enforced by ruff itself: a
# formatter whose output moves between releases turns "formatted" into
# "formatted by whoever committed last", and the diff lands on the next
# person. A mismatch is refused with both versions named rather than quietly
# reformatting everything. Bumping it is one line here, one in the hook's
# install hint, and a reformat commit (added to .git-blame-ignore-revs) --
# the honest cost of a new version.
required-version = "==0.16.3"

target-version = "py311"
line-length = 88

[format]
# 0.16 formats Python fenced blocks inside markdown by default. The snippets
# in docs/ are deliberately terse repro recipes (a `try: x` one-liner reads as
# one step); a formatter blowing them up to three lines makes them worse, and
# nothing executes them. Real code lives in .py files, which are formatted.
exclude = ["*.md"]

[lint]
# Import sorting, and nothing else. `ruff check` can enforce a great deal more
# and one day it might, but this hook's job is formatting: one that also
# refused a commit over an unused variable would be a different feature, and
# not one anybody asked for.
#
# Sorting is safe here because ruff sorts import BLOCKS and never hoists across
# a statement: every test file's `sys.path.insert(...)` sits between the
# standard library and the `idatui` imports, and that line is exactly what
# makes them importable.
select = ["I"]