Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
230 changes: 115 additions & 115 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ optional-dependencies.dev = [
"prek==0.4.1",
"pydocstringformatter==0.7.5",
"pylint[spelling]==4.0.5",
"pyproject-fmt==2.21.2",
"pyproject-fmt==2.23.0",
"pyrefly==1.0.0",
"pyright==1.1.409",
"pyroma==5.0.1",
Expand Down Expand Up @@ -94,13 +94,13 @@ scripts.vws-web-tools = "vws_web_tools:vws_web_tools_group"
dev = []

[tool.setuptools]
zip-safe = false
package-data.vws_web_tools = [
"py.typed",
]
packages.find.where = [
"src",
]
package-data.vws_web_tools = [
"py.typed",
]
zip-safe = false

[tool.distutils]
bdist_wheel.universal = true
Expand Down Expand Up @@ -154,11 +154,24 @@ lint.flake8-tidy-imports.banned-api."typing.cast".msg = "typing.cast is banned:
lint.pydocstyle.convention = "google"

[tool.pylint]
DEPRECATED_BUILTINS.bad-functions = [
# Use Pylint until Ruff can ban bare builtin calls, or until custom rules
# make this removable:
# https://github.com/astral-sh/ruff/issues/10079
# https://github.com/astral-sh/ruff/issues/970
"filter",
"getattr",
"hasattr",
"map",
"setattr",
]
# Allow the body of an if to be on the same line as the test if there is no
# else.
FORMAT.single-line-if-stmt = false
# Pickle collected data for later comparisons.
MASTER.persistent = true
# Return non-zero exit code if useless-suppression is emitted.
MAIN.fail-on = [
"useless-suppression",
]
# Use multiple processes to speed up Pylint.
MASTER.jobs = 0
# List of plugins (as comma separated values of python modules names) to load,
Expand Down Expand Up @@ -186,36 +199,11 @@ MASTER.load-plugins = [
"pylint.extensions.set_membership",
"pylint.extensions.typing",
]
# Pickle collected data for later comparisons.
MASTER.persistent = true
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
MASTER.unsafe-load-any-extension = false
# Return non-zero exit code if useless-suppression is emitted.
MAIN.fail-on = [
"useless-suppression",
]
DEPRECATED_BUILTINS.bad-functions = [
# Use Pylint until Ruff can ban bare builtin calls, or until custom rules
# make this removable:
# https://github.com/astral-sh/ruff/issues/10079
# https://github.com/astral-sh/ruff/issues/970
"filter",
"getattr",
"hasattr",
"map",
"setattr",
]
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
MESSAGES-CONTROL.enable = [
"bad-inline-option",
"deprecated-pragma",
"file-ignored",
"spelling",
"use-symbolic-message-instead",
"useless-suppression",
]
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
Expand All @@ -226,27 +214,39 @@ MESSAGES-CONTROL.enable = [
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
MESSAGES-CONTROL.disable = [
# Too difficult to please
"duplicate-code",
# Let ruff handle long lines
"line-too-long",
"locally-disabled",
"missing-return-type-doc",
# We don't need everything to be documented because of mypy
"missing-type-doc",
"too-few-public-methods",
"too-many-locals",
"too-many-arguments",
"too-many-instance-attributes",
"too-many-return-statements",
"too-many-lines",
"locally-disabled",
# Let ruff handle long lines
"line-too-long",
# Let ruff handle unused imports
"unused-import",
"too-many-locals",
"too-many-return-statements",
# Let isort deal with sorting
"ungrouped-imports",
# We don't need everything to be documented because of mypy
"missing-type-doc",
"missing-return-type-doc",
# Too difficult to please
"duplicate-code",
# Let ruff handle unused imports
"unused-import",
# Let ruff handle imports
"wrong-import-order",
]
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
MESSAGES-CONTROL.enable = [
"bad-inline-option",
"deprecated-pragma",
"file-ignored",
"spelling",
"use-symbolic-message-instead",
"useless-suppression",
]
# Spelling dictionary name. Available dictionaries: none. To make it working
# install python-enchant package.
SPELLING.spelling-dict = "en_US"
Expand All @@ -256,34 +256,39 @@ SPELLING.spelling-private-dict-file = "spelling_private_dict.txt"
# --spelling-private-dict-file option instead of raising a message.
SPELLING.spelling-store-unknown-words = "no"

[tool.interrogate]
fail-under = 100
verbose = 2
omit-covered-files = true

[tool.check-manifest]
ignore = [
"*.enc",
".checkmake-config.ini",
".git_archival.txt",
".pre-commit-config.yaml",
".prettierrc",
".vscode/**",
".yamlfmt",
"*.enc",
".pre-commit-config.yaml",
"admin",
"admin/**",
"CHANGELOG.rst",
"newsfragments",
"newsfragments/**",
"CODE_OF_CONDUCT.rst",
"CONTRIBUTING.rst",
"LICENSE",
"Makefile",
"ci",
"ci/**",
"CODE_OF_CONDUCT.rst",
"CONTRIBUTING.rst",
"docs",
"docs/**",
".git_archival.txt",
"LICENSE",
"lint.mk",
"Makefile",
"newsfragments",
"newsfragments/**",
"spelling_private_dict.txt",
"tests",
"tests-pylintrc",
"tests/**",
"vuforia_secrets.env.example",
"lint.mk",
".vscode/**",
"zizmor.yml",
]

Expand All @@ -293,16 +298,65 @@ optional_dependencies_dev_groups = [
"release",
]

[tool.vulture]
# Duplicate some of .gitignore
exclude = [ ".venv" ]
# Ideally we would limit the paths to the source code where we want to ignore names,
# but Vulture does not enable this.
ignore_names = [
# Sphinx
"autoclass_content",
"autoclass_content",
"autodoc_member_order",
"autodoc_typehints",
# public API used by downstream secret generation
"cad_data_url",
"copybutton_exclude",
"extensions",
# pytest fixtures - we name fixtures like this for this purpose
"fixture_*",
"get_model_target_web_api_details",
"html_show_copyright",
"html_show_sourcelink",
"html_show_sphinx",
"html_theme",
"html_theme_options",
"html_title",
"htmlhelp_basename",
"intersphinx_mapping",
"language",
"linkcheck_ignore",
"linkcheck_retries",
"master_doc",
"MODEL_TARGET_WEB_API_ADVANCED_SCOPE",
"MODEL_TARGET_WEB_API_ADVANCED_SCOPES",
"MODEL_TARGET_WEB_API_STANDARD_SCOPES",
"nitpicky",
"project_copyright",
"pygments_style",
# pytest configuration
"pytest_collect_file",
"pytest_plugins",
"rst_prolog",
"source_suffix",
"spelling_word_list_filename",
"templates_path",
"towncrier_draft_autoversion_mode",
"towncrier_draft_include_empty",
"towncrier_draft_working_directory",
"warning_is_error",
]

[tool.pyproject-fmt]
indent = 4
keep_full_version = true
max_supported_python = "3.14"

[tool.mypy]
strict = true
files = [ "." ]
exclude = [ "build" ]
follow_untyped_imports = true
strict = true
plugins = [
"mypy_strict_kwargs",
]
Expand All @@ -315,13 +369,13 @@ search_path = [
errors.non-exhaustive-match = "error"

[tool.pyright]
typeCheckingMode = "strict"
enableTypeIgnoreComments = false
reportUnnecessaryTypeIgnoreComment = true
typeCheckingMode = "strict"

[tool.pytest]
xfail_strict = true
log_cli = true
xfail_strict = true

[tool.coverage]
run.branch = true
Expand All @@ -342,11 +396,11 @@ filename = "CHANGELOG.rst"
# date) followed by a flat bullet list with no per-type sub-headings.
template = "docs/towncrier_template.rst.jinja"
title_format = "{version}"
issue_format = "#{issue}"
# ``title_format`` underline first, then any nested headings. A bare
# version such as ``2026.05.18`` underlined with ``-`` matches every
# pre-towncrier entry in CHANGELOG.rst.
underlines = [ "-", "~", "^" ]
issue_format = "#{issue}"
type = [
# A single, unnamed fragment type keeps the assembled output as one
# flat bullet list, matching the historical changelog (which never
Expand All @@ -360,11 +414,6 @@ split-summary-body = false
max-line-length = 75
linewrap-full-docstring = true

[tool.interrogate]
fail-under = 100
omit-covered-files = true
verbose = 2

[tool.doc8]
max_line_length = 2000
ignore_path = [
Expand All @@ -376,55 +425,6 @@ ignore_path = [
"./src/*/_setuptools_scm_version.txt",
]

[tool.vulture]
# Ideally we would limit the paths to the source code where we want to ignore names,
# but Vulture does not enable this.
ignore_names = [
# pytest configuration
"pytest_collect_file",
"pytest_plugins",
# public API used by downstream secret generation
"cad_data_url",
"get_model_target_web_api_details",
"MODEL_TARGET_WEB_API_ADVANCED_SCOPE",
"MODEL_TARGET_WEB_API_ADVANCED_SCOPES",
"MODEL_TARGET_WEB_API_STANDARD_SCOPES",
# pytest fixtures - we name fixtures like this for this purpose
"fixture_*",
# Sphinx
"autoclass_content",
"autoclass_content",
"autodoc_member_order",
"autodoc_typehints",
"copybutton_exclude",
"extensions",
"html_show_copyright",
"html_show_sourcelink",
"html_show_sphinx",
"html_theme",
"html_theme_options",
"html_title",
"htmlhelp_basename",
"intersphinx_mapping",
"language",
"linkcheck_ignore",
"linkcheck_retries",
"master_doc",
"nitpicky",
"project_copyright",
"pygments_style",
"rst_prolog",
"source_suffix",
"spelling_word_list_filename",
"templates_path",
"warning_is_error",
"towncrier_draft_autoversion_mode",
"towncrier_draft_include_empty",
"towncrier_draft_working_directory",
]
# Duplicate some of .gitignore
exclude = [ ".venv" ]

[tool.yamlfix]
section_whitelines = 1
whitelines = 1
Loading