Skip to content

Commit 7e2542a

Browse files
authored
Better ruff rules (#1236)
1 parent be5a87b commit 7e2542a

File tree

1 file changed

+154
-10
lines changed

1 file changed

+154
-10
lines changed

pyproject.toml

Lines changed: 154 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -129,33 +129,177 @@ exclude_lines = [
129129
]
130130

131131
[tool.ruff]
132+
# preview = true # TODO: Enable this when we have the bandwidth
132133
line-length = 99
133134
extend-exclude = [
134135
"pytest_django/_version.py",
135136
]
136137

137138
[tool.ruff.lint]
138139
extend-select = [
139-
"B", # flake8-bugbear
140+
"AIR", # Airflow
141+
"ERA", # eradicate
142+
"FAST", # FastAPI
143+
"YTT", # flake8-2020
144+
"ANN", # flake8-annotations
145+
"ASYNC", # flake8-async
146+
"S", # flake8-bandit
140147
"BLE", # flake8-blind-except
148+
"FBT", # flake8-boolean-trap
149+
"B", # flake8-bugbear
150+
"A", # flake8-builtins
151+
"COM", # flake8-commas
152+
"C4", # flake8-comprehensions
153+
"CPY", # flake8-copyright
141154
"DTZ", # flake8-datetimez
155+
"T10", # flake8-debugger
156+
"DJ", # flake8-django
157+
"EM", # flake8-errmsg
158+
"EXE", # flake8-executable
159+
"FIX", # flake8-fixme
142160
"FA", # flake8-future-annotations
161+
"INT", # flake8-gettext
162+
"ISC", # flake8-implicit-str-concat
163+
"ICN", # flake8-import-conventions
164+
"LOG", # flake8-logging
143165
"G", # flake8-logging-format
144-
"I", # isort
145-
"PGH", # pygrep-hooks
166+
"INP", # flake8-no-pep420
146167
"PIE", # flake8-pie
147-
"PL", # pylint
148-
"PT", # flake8-pytest-style
168+
"T20", # flake8-print
149169
"PYI", # flake8-pyi
150-
"RUF", # Ruff-specific rules
170+
"PT", # flake8-pytest-style
171+
"Q", # flake8-quotes
172+
"RSE", # flake8-raise
173+
"RET", # flake8-return
174+
"SLF", # flake8-self
175+
"SIM", # flake8-simplify
151176
"SLOT", # flake8-slots
152-
"T10", # flake8-debugger
177+
"TID", # flake8-tidy-imports
178+
"TD", # flake8-todos
179+
"TC", # flake8-type-checking
180+
"ARG", # flake8-unused-arguments
181+
"PTH", # flake8-use-pathlib
182+
"FLY", # flynt
183+
"I", # isort
184+
"C90", # mccabe
185+
"PD", # pandas-vet
186+
"N", # pep8-naming
187+
"PERF", # Perflint
188+
"E", # pycodestyle Error
189+
"W", # pycodestyle Warning
190+
"DOC", # pydoclint
191+
"D", # pydocstyle
192+
"F", # Pyflakes
193+
"PGH", # pygrep-hooks
194+
"PL", # Pylint
153195
"UP", # pyupgrade
154-
"YTT", # flake8-2020
196+
"FURB", # refurb
197+
"TRY", # tryceratops
198+
"RUF", # Ruff-specific rules
155199
]
156200
ignore = [
157-
"PLR0913", # Too many arguments in function definition
158-
"PLR2004", # Magic value used in comparison, consider replacing 3 with a constant variable
201+
"D100", # Missing docstring in public module
202+
"D101", # Missing docstring in public class
203+
"D102", # Missing docstring in public method
204+
"D103", # Missing docstring in public function
205+
"D104", # Missing docstring in public package
206+
"D105", # Missing docstring in magic method
207+
"D107", # Missing docstring in __init__
208+
"D200", # One-line docstring should fit on one line
209+
"D202", # No blank lines allowed after function docstring
210+
"D203", # Class definitions that are not preceded by a blank line
211+
"D205", # 1 blank line required between summary line and description
212+
"D209", # Multi-line docstring closing quotes should be on a separate line
213+
"D212", # Multi-line docstring summary should start at the first line
214+
"D213", # Multi-line docstring summary should start at the second line
215+
"D400", # First line should end with a period
216+
"D401", # First line of docstring should be in imperative mood
217+
"D404", # First word of the docstring should not be "This"
218+
"D415", # First line should end with a period, question mark, or exclamation point
219+
"S101", # Use of `assert` detected
220+
221+
# TODO - need to fix these
222+
"ANN001", # Missing type annotation for function argument
223+
"ANN002", # Missing type annotation for public function
224+
"ANN003", # Missing type annotation for public method
225+
"ANN201", # Missing return type annotation for public function
226+
"ANN202", # Missing return type annotation for private function
227+
"ANN204", # Missing return type annotation for special method
228+
"ANN401", # Dynamically typed expressions .. are disallowed
229+
"ARG001", # Unused function argument
230+
"ARG002", # Unused method argument
231+
"C901", # .. is too complex
232+
"COM812", # Trailing comma missing
233+
"E501", # Line too long
234+
"EM101", # Exception must not use a string literal, assign to variable first
235+
"EM102", # Exception must not use an f-string literal, assign to variable first
236+
"FBT001", # Boolean-typed positional argument in function definition
237+
"FBT002", # Boolean default positional argument in function definition
238+
"FBT003", # Boolean positional value in function call
239+
"N802", # Function name `assertRedirects` should be lowercase
240+
"N806", # Variable `UserModel` in function should be lowercase
241+
"PLC0415", # `import` should be at the top-level of a file
242+
"PLR0913", # Too many arguments in function definition
243+
"PLR2004", # Magic value used in comparison, consider replacing .. with a constant variable
244+
"RET504", # Unnecessary assignment to .. before `return` statement
245+
"RET505", # Unnecessary `elif` after `return` statement
246+
"S105", # Possible hardcoded password assigned
247+
"SIM102", # Use a single `if` statement instead of nested `if` statements
248+
"SIM108", # Use ternary operator .. instead of `if`-`else`-block
249+
"SIM114", # Combine `if` branches using logical `or` operator
250+
"SLF001", # Private member accessed
251+
"TC002", # Move third-party import `django.contrib.messages.Message` into a type-checking block
252+
"TC003", # Move standard library import `collections.abc.Sequence` into a type-checking block
253+
"TRY003", # Avoid specifying long messages outside the exception class
254+
]
255+
[tool.ruff.lint.per-file-ignores]
256+
"tests/*.py" = [
257+
"ANN", # Disable all annotations
258+
"FIX003", # Line contains XXX, consider resolving the issue
259+
"DJ008", # Model does not define .. method
260+
"N801", # Class name should use CapWords convention
261+
"N802", # Function name should be lowercase
262+
"S", # Disable all security checks
263+
"TD001", # Invalid TODO tag
264+
"TD002", # Missing author in TODO
265+
"TD003", # Missing issue link for this TODO
266+
267+
# TODO - need to fix these
268+
"ARG005", # Unused lambda argument
269+
"D300", # Use triple double quotes `"""`
270+
"D403", # First word of the docstring should be capitalized
271+
"ERA001", # Found commented-out code
272+
"SIM117", # Use a single `with` statement with multiple contexts instead of nested `with` statements
273+
"TC001", # Move application import .. into a type-checking block
274+
"TC006", # Add quotes to type expression in `typing.cast()`
275+
"PTH108", # `os.unlink()` should be replaced by `Path.unlink()`
276+
"PTH110", # `os.path.exists()` should be replaced by `Path.exists()`
277+
"RET503", # Missing explicit `return` at the end of function able to return non-`None` value
278+
"RSE102", # Unnecessary parentheses on raised exception
279+
]
280+
"pytest_django_test/*.py" = [
281+
"ANN", # Disable all annotations
282+
"FIX003", # Line contains XXX, consider resolving the issue
283+
"DJ008", # Model does not define .. method
284+
"N801", # Class name should use CapWords convention
285+
"N802", # Function name should be lowercase
286+
"S", # Disable all security checks
287+
"TD001", # Invalid TODO tag
288+
"TD002", # Missing author in TODO
289+
"TD003", # Missing issue link for this TODO
290+
291+
# TODO - need to fix these
292+
"ARG005", # Unused lambda argument
293+
"D300", # Use triple double quotes `"""`
294+
"D403", # First word of the docstring should be capitalized
295+
"ERA001", # Found commented-out code
296+
"SIM117", # Use a single `with` statement with multiple contexts instead of nested `with` statements
297+
"TC001", # Move application import .. into a type-checking block
298+
"TC006", # Add quotes to type expression in `typing.cast()`
299+
"PTH108", # `os.unlink()` should be replaced by `Path.unlink()`
300+
"PTH110", # `os.path.exists()` should be replaced by `Path.exists()`
301+
"RET503", # Missing explicit `return` at the end of function able to return non-`None` value
302+
"RSE102", # Unnecessary parentheses on raised exception
159303
]
160304

161305
[tool.ruff.lint.isort]

0 commit comments

Comments
 (0)