@@ -52,7 +52,7 @@ optional-dependencies.dev = [
5252 " prek==0.3.0" ,
5353 " pydocstringformatter==0.7.5" ,
5454 " pylint[spelling]==4.0.4" ,
55- " pyproject-fmt==2.12.1 " ,
55+ " pyproject-fmt==2.14.0 " ,
5656 " pyrefly==0.51.1" ,
5757 " pyright==1.1.408" ,
5858 " pyroma==5.0.1" ,
@@ -61,10 +61,6 @@ optional-dependencies.dev = [
6161 " pytest-regressions==2.9.1" ,
6262 " ruff==0.15.0" ,
6363 " setuptools-scm==9.2.2" ,
64- # We add shellcheck-py not only for shell scripts and shell code blocks,
65- # but also because having it installed means that ``actionlint-py`` will
66- # use it to lint shell commands in GitHub workflow files.
67- " shellcheck-py==0.11.0.1" ,
6864 " shfmt-py==3.12.0.2" ,
6965 " sphinx==9.1.0" ,
7066 " sphinx-click==6.2.0" ,
@@ -79,6 +75,10 @@ optional-dependencies.dev = [
7975 " vulture==2.14" ,
8076 " vws-python-mock==2025.3.10.1" ,
8177 " vws-test-fixtures==2023.3.5" ,
78+ # We add shellcheck-py not only for shell scripts and shell code blocks,
79+ # but also because having it installed means that ``actionlint-py`` will
80+ # use it to lint shell commands in GitHub workflow files.
81+ " shellcheck-py==0.11.0.1" ,
8282 " yamlfix==1.19.1" ,
8383 " zizmor==1.22.0" ,
8484]
@@ -93,14 +93,10 @@ scripts.vws = "vws_cli:vws_group"
9393
9494[tool .setuptools ]
9595zip-safe = false
96-
97- [tool .setuptools .package-data ]
98- vws_cli = [
96+ package-data.vws_cli = [
9997 " py.typed" ,
10098]
101-
102- [tool .setuptools .packages .find ]
103- where = [
99+ packages.find.where = [
104100 " src" ,
105101]
106102
@@ -112,44 +108,40 @@ version_file = "src/vws_cli/_setuptools_scm_version.py"
112108
113109[tool .ruff ]
114110line-length = 79
115-
116111lint.select = [
117112 " ALL" ,
118113]
119114lint.ignore = [
120- # Ruff warns that this conflicts with the formatter.
121- " COM812" ,
122- # Allow our chosen docstring line-style - pydocstringformatter handles formatting
123- # but doesn't enforce D205 (blank line after summary) or D212 (summary on first line).
124- " D205" ,
125- " D212" ,
115+ # Allow 'assert' as we use it for tests and type narrowing.
116+ " S101" ,
126117 # Allow backslashes in a docstring.
127118 # See https://click.palletsprojects.com/en/8.0.x/documentation/#preventing-rewrapping.
128119 " D301" ,
120+ # Allow our chosen docstring line-style - pydocstringformatter handles formatting
121+ # but doesn't enforce D205 (blank line after summary) or D212 (summary on first line).
122+ " D205" ,
123+ # Ignore 'too-many-*' errors as they seem to get in the way more than
124+ # helping.
125+ " PLR0913" ,
129126 # Let the formatter handle line lengths, and ignore the errors.
130127 " E501" ,
131128 # Ruff warns that this conflicts with the formatter.
129+ " COM812" ,
130+ # Ruff warns that this conflicts with the formatter.
132131 " ISC001" ,
133- # Ignore 'too-many-*' errors as they seem to get in the way more than
134- # helping.
135- " PLR0913" ,
136- # Allow 'assert' as we use it for tests and type narrowing.
137- " S101" ,
132+ " D212" ,
138133]
139-
140134lint.per-file-ignores."doccmd_*.py" = [
135+ # Allow asserts in docs.
136+ " S101" ,
141137 # Allow our chosen docstring line-style - pydocstringformatter handles
142138 # formatting but docstrings in docs may not match this style.
143139 " D200" ,
144- # Allow asserts in docs.
145- " S101" ,
146140]
147-
148141lint.per-file-ignores."tests/test_*.py" = [
149142 # Do not require tests to have a one-line summary.
150143 " D205" ,
151144]
152-
153145# Do not automatically remove commented out code.
154146# We comment out code during development, and with VSCode auto-save, this code
155147# is sometimes annoyingly removed.
@@ -159,21 +151,13 @@ lint.unfixable = [
159151lint.pydocstyle.convention = " google"
160152
161153[tool .pylint ]
162-
163- [tool .pylint .'FORMAT' ]
164-
165154# Allow the body of an if to be on the same line as the test if there is no
166155# else.
167- single-line-if-stmt = false
168-
169- [tool .pylint .'MASTER' ]
170-
156+ "FORMAT".single-line-if-stmt = false
171157# Pickle collected data for later comparisons.
172- persistent = true
173-
158+ "MASTER".persistent = true
174159# Use multiple processes to speed up Pylint.
175- jobs = 0
176-
160+ "MASTER".jobs = 0
177161# List of plugins (as comma separated values of python modules names) to load,
178162# usually to register additional checkers.
179163# See https://chezsoi.org/lucas/blog/pylint-strict-base-configuration.html.
@@ -182,7 +166,7 @@ jobs = 0
182166# - pylint.extensions.magic_value
183167# - pylint.extensions.while_used
184168# as they seemed to get in the way.
185- load-plugins = [
169+ "MASTER". load-plugins = [
186170 " pylint.extensions.bad_builtin" ,
187171 " pylint.extensions.comparison_placement" ,
188172 " pylint.extensions.consider_refactoring_into_while_condition" ,
@@ -199,30 +183,24 @@ load-plugins = [
199183 " pylint.extensions.set_membership" ,
200184 " pylint.extensions.typing" ,
201185]
202-
203186# Allow loading of arbitrary C extensions. Extensions are imported into the
204187# active Python interpreter and may run arbitrary code.
205- unsafe-load-any-extension = false
206-
207- ignore = [
188+ "MASTER".unsafe-load-any-extension = false
189+ "MASTER".ignore = [
208190 " _setuptools_scm_version.py" ,
209191]
210-
211- [tool .pylint .'MESSAGES CONTROL' ]
212-
213192# Enable the message, report, category or checker with the given id(s). You can
214193# either give multiple identifier separated by comma (,) or put this option
215194# multiple time (only on the command line, not in the configuration file where
216195# it should appear only once). See also the "--disable" option for examples.
217- enable = [
196+ "MESSAGES CONTROL". enable = [
218197 " bad-inline-option" ,
219198 " deprecated-pragma" ,
220199 " file-ignored" ,
221200 " spelling" ,
222201 " use-symbolic-message-instead" ,
223202 " useless-suppression" ,
224203]
225-
226204# Disable the message, report, category or checker with the given id(s). You
227205# can either give multiple identifiers separated by comma (,) or put this
228206# option multiple times (only on the command line, not in the configuration
@@ -232,8 +210,7 @@ enable = [
232210# --enable=similarities". If you want to run only the classes checker, but have
233211# no Warning level messages displayed, use"--disable=all --enable=classes
234212# --disable=W"
235-
236- disable = [
213+ "MESSAGES CONTROL".disable = [
237214 " too-few-public-methods" ,
238215 " too-many-locals" ,
239216 " too-many-arguments" ,
@@ -255,22 +232,16 @@ disable = [
255232 # Let ruff handle imports
256233 " wrong-import-order" ,
257234]
258-
259- [tool .pylint .'SPELLING' ]
260-
261235# Spelling dictionary name. Available dictionaries: none. To make it working
262236# install python-enchant package.
263- spelling-dict = ' en_US'
264-
237+ "SPELLING".spelling-dict = " en_US"
265238# A path to a file that contains private dictionary; one word per line.
266- spelling-private-dict-file = ' spelling_private_dict.txt'
267-
239+ "SPELLING".spelling-private-dict-file = " spelling_private_dict.txt"
268240# Tells whether to store unknown words to indicated private dictionary in
269241# --spelling-private-dict-file option instead of raising a message.
270- spelling-store-unknown-words = ' no '
242+ "SPELLING". spelling-store-unknown-words = " no "
271243
272244[tool .check-manifest ]
273-
274245ignore = [
275246 " .checkmake-config.ini" ,
276247 " .prettierrc" ,
@@ -313,25 +284,20 @@ indent = 4
313284keep_full_version = true
314285max_supported_python = " 3.14"
315286
316- [tool .pytest .ini_options ]
317-
318- xfail_strict = true
319- log_cli = true
287+ [tool .pytest ]
288+ ini_options.xfail_strict = true
289+ ini_options.log_cli = true
320290
321- [tool .coverage . report ]
322- exclude_also = [
291+ [tool .coverage ]
292+ report. exclude_also = [
323293 " if TYPE_CHECKING:" ,
324294]
325-
326- [tool .coverage .run ]
327-
328- branch = true
329- omit = [
295+ run.branch = true
296+ run.omit = [
330297 " src/vws_cli/_setuptools_scm_version.py" ,
331298]
332299
333300[tool .mypy ]
334-
335301strict = true
336302files = [ " ." ]
337303exclude = [ " build" ]
@@ -341,7 +307,6 @@ plugins = [
341307]
342308
343309[tool .pyright ]
344-
345310enableTypeIgnoreComments = false
346311reportUnnecessaryTypeIgnoreComment = true
347312typeCheckingMode = " strict"
@@ -361,7 +326,6 @@ exclude = [
361326]
362327
363328[tool .doc8 ]
364-
365329max_line_length = 2000
366330ignore_path = [
367331 " ./.eggs" ,
@@ -409,7 +373,6 @@ ignore_names = [
409373 " templates_path" ,
410374 " warning_is_error" ,
411375]
412-
413376exclude = [
414377 # Duplicate some of .gitignore
415378 " .venv" ,
0 commit comments