Skip to content

Commit fc3efe9

Browse files
committed
Merge remote-tracking branch 'origin/main' into adamtheturtle/custom-timeouts
2 parents 5d0a729 + 4fa03cc commit fc3efe9

File tree

2 files changed

+71
-111
lines changed

2 files changed

+71
-111
lines changed

.github/workflows/lint.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ jobs:
1919
matrix:
2020
python-version: ['3.13']
2121
platform: [ubuntu-latest, windows-latest]
22+
hook-stage: [pre-commit, pre-push, manual]
2223

2324
runs-on: ${{ matrix.platform }}
2425

@@ -37,10 +38,8 @@ jobs:
3738
# Use bash to ensure the step fails if any command fails.
3839
# PowerShell does not fail on intermediate command failures by default.
3940
shell: bash
40-
run: |
41-
uv run --extra=dev prek run --all-files --hook-stage pre-commit --verbose
42-
uv run --extra=dev prek run --all-files --hook-stage pre-push --verbose
43-
uv run --extra=dev prek run --all-files --hook-stage manual --verbose
41+
run: uv run --extra=dev prek run --all-files --hook-stage ${{ matrix.hook-stage }}
42+
--verbose
4443
env:
4544
UV_PYTHON: ${{ matrix.python-version }}
4645

pyproject.toml

Lines changed: 68 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -42,26 +42,26 @@ optional-dependencies.dev = [
4242
"check-manifest==0.51",
4343
"deptry==0.24.0",
4444
"doc8==2.0.0",
45-
"doccmd==2026.1.28",
45+
"doccmd==2026.1.31.3",
4646
"freezegun==1.5.5",
4747
"furo==2025.12.19",
4848
"interrogate==1.7.0",
4949
"mypy[faster-cache]==1.19.1",
5050
"mypy-strict-kwargs==2026.1.12",
51-
"prek==0.3.0",
51+
"prek==0.3.2",
5252
"pydocstringformatter==0.7.5",
5353
"pydocstyle==6.3",
5454
"pygments==2.19.2",
5555
"pylint[spelling]==4.0.4",
5656
"pylint-per-file-ignores==3.2.0",
57-
"pyproject-fmt==2.11.1",
58-
"pyrefly==0.50.1",
57+
"pyproject-fmt==2.16.0",
58+
"pyrefly==0.52.0",
5959
"pyright==1.1.408",
6060
"pyroma==5.0.1",
6161
"pytest==9.0.2",
6262
"pytest-cov==7.0.0",
6363
"pyyaml==6.0.3",
64-
"ruff==0.14.14",
64+
"ruff==0.15.1",
6565
# We add shellcheck-py not only for shell scripts and shell code blocks,
6666
# but also because having it installed means that ``actionlint-py`` will
6767
# use it to lint shell commands in GitHub workflow files.
@@ -74,7 +74,7 @@ optional-dependencies.dev = [
7474
"sphinx-substitution-extensions==2026.1.12",
7575
"sphinxcontrib-spelling==8.0.2",
7676
"sybil==9.3.0",
77-
"ty==0.0.14",
77+
"ty==0.0.16",
7878
"types-requests==2.32.4.20260107",
7979
"vulture==2.14",
8080
"vws-python-mock==2026.2.15",
@@ -88,22 +88,17 @@ urls.Source = "https://github.com/VWS-Python/vws-python"
8888

8989
[tool.setuptools]
9090
zip-safe = false
91-
92-
[tool.setuptools.packages.find]
93-
where = [
94-
"src",
95-
]
96-
97-
[tool.setuptools.package-data]
98-
vws = [
91+
package-data.vws = [
9992
"py.typed",
10093
]
94+
packages.find.where = [
95+
"src",
96+
]
10197

102-
[tool.distutils.bdist_wheel]
103-
universal = true
98+
[tool.distutils]
99+
bdist_wheel.universal = true
104100

105101
[tool.setuptools_scm]
106-
107102
# This keeps the start of the version the same as the last release.
108103
# This is useful for our documentation to include e.g. binary links
109104
# to the latest released binary.
@@ -113,7 +108,6 @@ version_scheme = "post-release"
113108

114109
[tool.ruff]
115110
line-length = 79
116-
117111
lint.select = [
118112
"ALL",
119113
]
@@ -126,26 +120,22 @@ lint.ignore = [
126120
"D212",
127121
# Ruff warns that this conflicts with the formatter.
128122
"ISC001",
129-
# Ignore "too-many-*" errors as they seem to get in the way more than
123+
# Ignore 'too-many-*' errors as they seem to get in the way more than
130124
# helping.
131125
"PLR0913",
132126
]
133-
134127
lint.per-file-ignores."doccmd_*.py" = [
135128
# Allow asserts in docs.
136129
"S101",
137130
]
138-
139131
lint.per-file-ignores."docs/source/*.py" = [
140132
# Allow asserts in docs.
141133
"S101",
142134
]
143-
144135
lint.per-file-ignores."tests/*.py" = [
145136
# Allow asserts in tests.
146137
"S101",
147138
]
148-
149139
# Do not automatically remove commented out code.
150140
# We comment out code during development, and with VSCode auto-save, this code
151141
# is sometimes annoyingly removed.
@@ -155,15 +145,13 @@ lint.unfixable = [
155145
lint.pydocstyle.convention = "google"
156146

157147
[tool.pylint]
158-
159-
[tool.pylint.'MASTER']
160-
148+
# Allow the body of an if to be on the same line as the test if there is no
149+
# else.
150+
"FORMAT".single-line-if-stmt = false
161151
# Pickle collected data for later comparisons.
162-
persistent = true
163-
152+
"MASTER".persistent = true
164153
# Use multiple processes to speed up Pylint.
165-
jobs = 0
166-
154+
"MASTER".jobs = 0
167155
# List of plugins (as comma separated values of python modules names) to load,
168156
# usually to register additional checkers.
169157
# See https://chezsoi.org/lucas/blog/pylint-strict-base-configuration.html.
@@ -173,44 +161,39 @@ jobs = 0
173161
# - pylint.extensions.magic_value
174162
# - pylint.extensions.while_used
175163
# as they seemed to get in the way.
176-
load-plugins = [
164+
"MASTER".load-plugins = [
177165
"pylint_per_file_ignores",
178-
'pylint.extensions.bad_builtin',
179-
'pylint.extensions.comparison_placement',
180-
'pylint.extensions.consider_refactoring_into_while_condition',
181-
'pylint.extensions.docparams',
182-
'pylint.extensions.dunder',
183-
'pylint.extensions.eq_without_hash',
184-
'pylint.extensions.for_any_all',
185-
'pylint.extensions.mccabe',
186-
'pylint.extensions.no_self_use',
187-
'pylint.extensions.overlapping_exceptions',
188-
'pylint.extensions.private_import',
189-
'pylint.extensions.redefined_loop_name',
190-
'pylint.extensions.redefined_variable_type',
191-
'pylint.extensions.set_membership',
192-
'pylint.extensions.typing',
166+
"pylint.extensions.bad_builtin",
167+
"pylint.extensions.comparison_placement",
168+
"pylint.extensions.consider_refactoring_into_while_condition",
169+
"pylint.extensions.docparams",
170+
"pylint.extensions.dunder",
171+
"pylint.extensions.eq_without_hash",
172+
"pylint.extensions.for_any_all",
173+
"pylint.extensions.mccabe",
174+
"pylint.extensions.no_self_use",
175+
"pylint.extensions.overlapping_exceptions",
176+
"pylint.extensions.private_import",
177+
"pylint.extensions.redefined_loop_name",
178+
"pylint.extensions.redefined_variable_type",
179+
"pylint.extensions.set_membership",
180+
"pylint.extensions.typing",
193181
]
194-
195182
# Allow loading of arbitrary C extensions. Extensions are imported into the
196183
# active Python interpreter and may run arbitrary code.
197-
unsafe-load-any-extension = false
198-
199-
[tool.pylint.'MESSAGES CONTROL']
200-
184+
"MASTER".unsafe-load-any-extension = false
201185
# Enable the message, report, category or checker with the given id(s). You can
202186
# either give multiple identifier separated by comma (,) or put this option
203187
# multiple time (only on the command line, not in the configuration file where
204188
# it should appear only once). See also the "--disable" option for examples.
205-
enable = [
206-
'bad-inline-option',
207-
'deprecated-pragma',
208-
'file-ignored',
209-
'spelling',
210-
'use-symbolic-message-instead',
211-
'useless-suppression',
189+
"MESSAGES CONTROL".enable = [
190+
"bad-inline-option",
191+
"deprecated-pragma",
192+
"file-ignored",
193+
"spelling",
194+
"use-symbolic-message-instead",
195+
"useless-suppression",
212196
]
213-
214197
# Disable the message, report, category or checker with the given id(s). You
215198
# can either give multiple identifiers separated by comma (,) or put this
216199
# option multiple times (only on the command line, not in the configuration
@@ -220,63 +203,49 @@ enable = [
220203
# --enable=similarities". If you want to run only the classes checker, but have
221204
# no Warning level messages displayed, use"--disable=all --enable=classes
222205
# --disable=W"
223-
224-
disable = [
225-
'too-few-public-methods',
226-
'too-many-locals',
227-
'too-many-arguments',
228-
'too-many-instance-attributes',
229-
'too-many-return-statements',
230-
'too-many-lines',
231-
'locally-disabled',
206+
"MESSAGES CONTROL".disable = [
207+
"too-few-public-methods",
208+
"too-many-locals",
209+
"too-many-arguments",
210+
"too-many-instance-attributes",
211+
"too-many-return-statements",
212+
"too-many-lines",
213+
"locally-disabled",
232214
# Let ruff handle long lines
233-
'line-too-long',
215+
"line-too-long",
234216
# Let ruff handle unused imports
235-
'unused-import',
217+
"unused-import",
236218
# Let ruff deal with sorting
237-
'ungrouped-imports',
219+
"ungrouped-imports",
238220
# We don't need everything to be documented because of mypy
239-
'missing-type-doc',
240-
'missing-return-type-doc',
221+
"missing-type-doc",
222+
"missing-return-type-doc",
241223
# Too difficult to please
242-
'duplicate-code',
224+
"duplicate-code",
243225
# Let ruff handle imports
244-
'wrong-import-order',
226+
"wrong-import-order",
245227
# mypy does not want untyped parameters.
246-
'useless-type-doc',
228+
"useless-type-doc",
247229
]
248-
249230
# We ignore invalid names because:
250231
# - We want to use generated module names, which may not be valid, but are never seen.
251232
# - We want to use global variables in documentation, which may not be uppercase.
252233
# - conf.py is a Sphinx configuration file which requires lowercase global variable names.
253-
per-file-ignores = [
234+
"MESSAGES CONTROL".per-file-ignores = [
254235
"docs/source/conf.py:invalid-name",
255236
"docs/source/doccmd_*.py:invalid-name",
256237
"doccmd_README_rst_*.py:invalid-name",
257238
]
258-
259-
[tool.pylint.'FORMAT']
260-
261-
# Allow the body of an if to be on the same line as the test if there is no
262-
# else.
263-
single-line-if-stmt = false
264-
265-
[tool.pylint.'SPELLING']
266-
267239
# Spelling dictionary name. Available dictionaries: none. To make it working
268240
# install python-enchant package.
269-
spelling-dict = 'en_US'
270-
241+
"SPELLING".spelling-dict = "en_US"
271242
# A path to a file that contains private dictionary; one word per line.
272-
spelling-private-dict-file = 'spelling_private_dict.txt'
273-
243+
"SPELLING".spelling-private-dict-file = "spelling_private_dict.txt"
274244
# Tells whether to store unknown words to indicated private dictionary in
275245
# --spelling-private-dict-file option instead of raising a message.
276-
spelling-store-unknown-words = 'no'
246+
"SPELLING".spelling-store-unknown-words = "no"
277247

278248
[tool.check-manifest]
279-
280249
ignore = [
281250
".checkmake-config.ini",
282251
".prettierrc",
@@ -314,22 +283,17 @@ indent = 4
314283
keep_full_version = true
315284
max_supported_python = "3.14"
316285

317-
[tool.pytest.ini_options]
318-
319-
xfail_strict = true
320-
log_cli = true
321-
322-
[tool.coverage.run]
286+
[tool.pytest]
287+
ini_options.xfail_strict = true
288+
ini_options.log_cli = true
323289

324-
branch = true
325-
326-
[tool.coverage.report]
327-
exclude_also = [
290+
[tool.coverage]
291+
run.branch = true
292+
report.exclude_also = [
328293
"if TYPE_CHECKING:",
329294
]
330295

331296
[tool.mypy]
332-
333297
strict = true
334298
files = [ "." ]
335299
exclude = [ "build" ]
@@ -339,7 +303,6 @@ plugins = [
339303
]
340304

341305
[tool.pyright]
342-
343306
enableTypeIgnoreComments = false
344307
reportUnnecessaryTypeIgnoreComment = true
345308
typeCheckingMode = "strict"
@@ -359,7 +322,6 @@ omit-covered-files = true
359322
verbose = 2
360323

361324
[tool.doc8]
362-
363325
max_line_length = 2000
364326
ignore_path = [
365327
"./.eggs",
@@ -408,7 +370,6 @@ ignore_names = [
408370
"templates_path",
409371
"warning_is_error",
410372
]
411-
412373
# Duplicate some of .gitignore
413374
exclude = [ ".venv" ]
414375

0 commit comments

Comments
 (0)