forked from streamlit/streamlit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.ruff.toml
More file actions
176 lines (164 loc) · 8.61 KB
/
.ruff.toml
File metadata and controls
176 lines (164 loc) · 8.61 KB
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
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# In addition to the standard set of exclusions, omit all tests:
extend-exclude = [
# Autogenerated files:
"lib/streamlit/proto",
"lib/streamlit/emojis.py",
"lib/streamlit/material_icon_names.py",
# File with an expected compilation error:
"e2e_playwright/compilation_error_dialog.py",
# Ignore frontend directory:
"frontend/**",
]
target-version = 'py310'
line-length = 88
[format]
docstring-code-format = true
docstring-code-line-length = "dynamic"
line-ending = "lf"
[lint]
preview = true
explicit-preview-rules = false
# We activate all rules and only ignore the rules that we don't want to enforce
# or that are not relevant for our codebase.
select = ["ALL"]
ignore = [
# Rules planned to be supported in the future:
"EM101", # Checks for the use of string literals in exception constructors.
"EM102", # Checks for the use of f-strings in exception constructors.
"TRY003", # Checks for exception messages that are not defined in the exception class itself.
# Ignored rule sets:
"DTZ", # Checks for usage of unsafe naive datetime class.
"PTH", # Enforces usage of pathlib.
"C90", # Checks for McCabe complexity.
"FBT", # Forbids boolean positional arguments.
"SLF", # Checks unexpected for private member access.
"BLE", # Checks for blind except statements.
"CPY", # Checks for copyright statement.
"DOC", # Checks for correct docstring format.
# Ignored rules:
"A002", # Checks if function argument shadows a Python builtin.
"ANN401", # Checks that `any` is not used as an annotation.
"B904", # Checks for raise statements in exception handlers that lack a from clause.
"COM812", # Checks for absence of trailing commas. Not recommended with formatter.
"COM819", # Checks for presence of prohibited trailing commas. Not recommended with formatter.
"D100", # Checks for missing docstring in public module.
"D101", # Checks for missing docstring in public class.
"D102", # Checks for missing docstring in public method.
"D103", # Checks for missing docstring in public function.
"D104", # Checks for missing docstring in public package.
"D105", # Checks for missing docstring in magic method.
"D106", # Checks for missing docstring in public nested class.
"D107", # Checks for missing docstring in __init__.
"D202", # Checks for no-blank line after docstring.
"D205", # Checks for missing blank line after docstring summary.
"D401", # Checks for docstring to start with imperative mood.
"E266", # Checks for multiple leading hashes in block comments.
"FIX002", # Checks todo comments (which we want to allow).
"FURB101", # Checks for open and read calls that can be replaced by pathlib.
"FURB103", # Checks for open and write calls that can be replaced by pathlib.
"FURB113", # Checks for repeated append calls that can be replaced by extend.
"FURB152", # Checks for math constants that could use math module.
"PD009", # Checks for usage of pd.DataFrame.iat.
"PGH003", # Checks for blanket type ignore.
"PLC0415", # Enforces imports to be at the top-level of the file.
"PLC1901", # Checks for comparisons to empty string.
"PLC2701", # Checks for imports of private names.
"PLR0904", # Checks for classes with too many public methods.
"PLR0911", # Checks for functions with too many return statements.
"PLR0912", # Checks for functions with too many branches.
"PLR0913", # Checks for functions with too many arguments.
"PLR0914", # Checks for functions with too many local variables.
"PLR0915", # Checks for functions with too many statements.
"PLR0916", # Checks for too many boolean expressions in if statements.
"PLR0917", # Checks for functions with too many positional arguments.
"PLR1702", # Checks for functions with too many nested blocks.
"PLR2004", # Checks for numerical values that could be put into a constant.
"PLR6301", # Checks for methods that do not use self.
"PLW0108", # Checks for lambdas that can be replaced by existing functions.
"PLW3201", # Checks for bad dunder method names.
"PT012", # Checks for pytest.raises context managers with multiple statements.
"PT019", # Checks for tests that should use @pytest.mark.usefixtures (incompatible with unittest.patch)
"PYI041", # Checks for parameter annotations that contain redundant unions between builtin numeric types (e.g., int | float).
"PYI051", # Checks for redundant unions between a Literal and a builtin supertype of that Literal.
"RET504", # Checks for assignments that immediately precede a return of the assigned variable (too opinionated).
"RSE102", # Checks for unnecessary parentheses on raised exceptions.
"RUF052", # Checks for dummy variables that are used.
"RUF067", # Checks for non empty __init__ modules.
"SIM105", # Enforces use of contextlib.suppress.
"SIM108", # Enforces ternary operators instead of if-else.
"SIM115", # Enforces context manager for opening files.
"SIM117", # Enforces single with statement with multiple contexts.
"SIM905", # Enforces list instead of st.split.
"TD002", # Checks for missing author in TODO comment.
"TD003", # Checks for missing issue link in TODO comment.
"TRY300", # Checks for return statements in try blocks.
]
exclude = [
# pympler is a vendored dependency that doesn't conform to our linting rules:
"lib/streamlit/vendor/**",
]
extend-safe-fixes = ["TC002", "TC003"]
[lint.per-file-ignores]
# Only add ignores for entire folders here. To ignore rules in individual
# files, use the noqa ignore comment on top of the given file.
"e2e_playwright/**" = [
"B018", # Allow useless expressions (e.g., for side effects in tests).
"N999", # Allow invalid module names (test files use descriptive names).
"NPY002", # Allow legacy numpy random generation.
"PD", # Ignore pandas-vet rules (test data manipulation patterns).
"PERF", # Ignore performance rules (clarity over speed in tests).
"RUF029", # Allow async functions without await (intentional for testing async behavior).
"S", # Ignore bandit security rules (test code doesn't need security hardening).
"T20", # Allow print statements (useful for test debugging).
"TRY", # Ignore tryceratops rules (simpler exception handling in tests).
]
"lib/tests/**" = [
"ANN", # Ignore annotation rules (test functions don't need full typing).
"ARG", # Allow unused arguments (common in test fixtures and mocks).
"D", # Ignore docstring rules (tests are self-documenting via names).
"FURB118", # Allow all operators (tests may use operator module intentionally).
"FURB189", # Allow subclassing of builtin types (for test mocking).
"INP", # Allow implicit namespace packages (test directories).
"N", # Ignore naming conventions (test names can be descriptive/long).
"NPY002", # Allow legacy numpy random generation.
"PD", # Ignore pandas-vet rules (test data manipulation patterns).
"PERF", # Ignore performance rules (clarity over speed in tests).
"PLC2801", # Allow dunder calls (e.g., object.__setattr__ for frozen dataclasses).
"RUF029", # Allow async functions without await (test fixtures, mocks, ASGI callables).
"S", # Ignore bandit security rules (test code doesn't need security hardening).
"TRY", # Ignore tryceratops rules (simpler exception handling in tests).
]
"scripts/**" = ["T20", "INP", "PERF", "S", "TRY002"]
[lint.flake8-tidy-imports]
# Disallow all relative imports.
ban-relative-imports = "all"
[lint.isort]
known-first-party = ["streamlit", "shared", "tests", "e2e_playwright"]
[lint.pydocstyle]
convention = "numpy"
[lint.pycodestyle]
# Allow lines (e.g. comments) up to 120 characters instead of 88,
# which works well with Github.
max-line-length = 120
[lint.flake8-comprehensions]
# Allow dict calls that make use of keyword arguments (e.g., dict(a=1, b=2)).
allow-dict-calls-with-keyword-arguments = true
[lint.flake8-unused-arguments]
# Ignore unused variadic argument, like *args and **kwargs.
ignore-variadic-names = true
[lint.flake8-annotations]
# Allow missing return annotation on functions that return None:
suppress-none-returning = true