-
Notifications
You must be signed in to change notification settings - Fork 30
/
pyproject.toml
192 lines (178 loc) · 6.03 KB
/
pyproject.toml
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# https://docs.astral.sh/ruff/configuration/
[tool.ruff]
target-version = "py310"
line-length = 120
select = ["ALL"]
preview = true
# https://docs.astral.sh/ruff/rules/
ignore = [
###
# Not needed or wanted
###
"D1", # pydocstyle Missing doctring
"D401", # pydocstyle: non-imperative-mood
"EM", # flake8-errmsg
"FBT", # flake8-boolean-trap
"INP", # flake8-no-pep420
"ISC003", # flake8-implicit-str-concat: explicit-string-concatenation
# Short messages are still considered "long" messages
"TRY003", # tryceratops : raise-vanilla-args
# Don't remove commented code, also too inconsistant
"ERA001", # eradicate: commented-out-code
# contextlib.suppress is roughly 3x slower than try/except
"SIM105", # flake8-simplify: use-contextlib-suppress
# Negative performance impact
"UP038", # non-pep604-isinstance
# Checked by type-checker (pyright)
"ANN", # flake-annotations
"PGH003", # blanket-type-ignore
"TCH", # flake8-type-checking
# Already shown by Pylance, checked by pyright, and can be caused by overloads.
"ARG002", # Unused method argument
# We want D213: multi-line-summary-second-line and D211: no-blank-line-before-class
"D203", # pydocstyle: one-blank-line-before-class
"D212", # pydocstyle: multi-line-summary-first-line
# Allow differentiating between broken (FIXME) and to be done/added/completed (TODO)
"TD001", # flake8-todos: invalid-todo-tag
###
# These should be warnings (https://github.com/astral-sh/ruff/issues/1256 & https://github.com/astral-sh/ruff/issues/1774)
###
"FIX", # flake8-fixme
# Not all TODOs are worth an issue, this would be better as a warning
"TD003", # flake8-todos: missing-todo-link
# False-positives
"TCH004", # https://github.com/astral-sh/ruff/issues/3821
###
# Specific to this project
###
"D205", # Not all docstrings have a short description + desrciption
# We have some Pascal case module names
"N999", # pep8-naming: Invalid module name
# Print are used as debug logs
"T20", # flake8-print
# This is a relatively small, low contributors project. Git blame suffice.
"TD002", # missing-todo-author
# Python 3.11, introduced "zero cost" exception handling
"PERF203", # try-except-in-loop
### FIXME/TODO (no warnings in Ruff yet: https://github.com/astral-sh/ruff/issues/1256 & https://github.com/astral-sh/ruff/issues/1774):
"CPY001", # flake8-copyright
"PTH", # flake8-use-pathlib
# Ignore until linux support
"EXE", # flake8-executable
]
[tool.ruff.per-file-ignores]
"typings/**/*.pyi" = [
"F811", # Re-exports false positives
"F821", # https://github.com/astral-sh/ruff/issues/3011
# The following can't be controlled for external libraries:
"A", # Shadowing builtin names
"ICN001", # unconventional-import-alias
"N8", # Naming conventions
"PLR0904", # Too many public methods
"PLR0913", # Argument count
"PLR0917", # Too many positional arguments
"PLW3201", # misspelled dunder method name
"PYI042", # CamelCase TypeAlias
]
# https://docs.astral.sh/ruff/settings/#flake8-implicit-str-concat
[tool.ruff.flake8-implicit-str-concat]
allow-multiline = false
# https://docs.astral.sh/ruff/settings/#isort
[tool.ruff.isort]
combine-as-imports = true
split-on-trailing-comma = false
# Unlike isort, Ruff only counts relative imports as local-folder by default for know.
# https://github.com/astral-sh/ruff/issues/3115
known-local-folder = [
"AutoControlledThread",
"AutoSplit",
"AutoSplitImage",
"capture_method",
"compare",
"error_messages",
"gen",
"hotkeys",
"menu_bar",
"region_selection",
"split_parser",
"user_profile",
"utils",
]
# https://docs.astral.sh/ruff/settings/#mccabe
[tool.ruff.mccabe]
# Hard limit, arbitrary to 4 bytes
max-complexity = 31
# Arbitrary to 2 bytes, same as SonarLint
# max-complexity = 15
[tool.ruff.pylint]
# Arbitrary to 1 byte, same as SonarLint
max-args = 7
# At least same as max-complexity
max-branches = 15
# https://github.com/hhatto/autopep8#usage
# https://github.com/hhatto/autopep8#more-advanced-usage
[tool.autopep8]
max_line_length = 120
aggressive = 3
exclude = ".venv/*,src/gen/*"
ignore = [
"E124", # Closing bracket may not match multi-line method invocation style (enforced by add-trailing-comma)
"E70", # Allow ... on same line as def
# Autofixed by Ruff
# Check for the "Fix" flag https://docs.astral.sh/ruff/rules/#pycodestyle-e-w
"E2", # Whitespace
"E703", # useless-semicolon
"E71", # Statement (comparisons)
"E731", # lambda-assignment
"W29", # Whitespace warning
"W605", # invalid-escape-sequence
# Autofixed by other Ruff rules
"E401", # I001: unsorted-imports
"W690", # UP: pyupgrade
]
# https://github.com/microsoft/pyright/blob/main/docs/configuration.md#sample-pyprojecttoml-file
[tool.pyright]
typeCheckingMode = "strict"
pythonVersion = "3.10"
# Prefer `pyright: ignore`
enableTypeIgnoreComments = false
###
# Downgraded diagnostics
###
# Type stubs may not be completable
reportMissingTypeStubs = "warning"
# Extra runtime safety
reportUnnecessaryComparison = "warning"
# Using Flake8/Ruff instead. Name is already grayed out and red squiggle looks like a mistyped import
reportUnusedImport = "none"
# pywin32 has way too many Unknown parameters left
reportUnknownMemberType = "none"
###
# Off by default even in strict mode
###
deprecateTypingAliases = true
enableExperimentalFeatures = true
reportCallInDefaultInitializer = "error"
reportImplicitOverride = "error"
reportImplicitStringConcatenation = "error"
# False positives with TYPE_CHECKING
reportImportCycles = "information"
# Too strict. False positives on base classes
reportMissingSuperCall = "none"
reportPropertyTypeMismatch = "error"
reportShadowedImports = "error"
reportUninitializedInstanceVariable = "error"
reportUnnecessaryTypeIgnoreComment = "error"
reportUnusedCallResult = "none"
# Exclude from scanning when running pyright
exclude = [
".venv/",
# Auto generated, fails some strict pyright checks
"build/",
"src/gen/",
]
# Ignore must be specified for Pylance to stop displaying errors
ignore = [
# We expect stub files to be incomplete or contain useless statements
"**/*.pyi",
]