[project]
name = "ty"
version = "0.0.32"
requires-python = ">=3.8"
dependencies = []
description = "An extremely fast Python type checker, written in Rust."
readme = "README.md"
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
keywords = ["ty", "typing", "analysis", "check"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "Operating System :: OS Independent",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Rust",
    "Topic :: Software Development :: Quality Assurance",
    "Topic :: Software Development :: Testing",
    "Topic :: Software Development :: Libraries",
    "Topic :: Software Development :: Libraries :: Python Modules",
]

[project.urls]
Repository = "https://github.com/astral-sh/ty"
Changelog = "https://github.com/astral-sh/ty/blob/main/CHANGELOG.md"
Releases = "https://github.com/astral-sh/ty/releases"
Discord = "https://discord.gg/astral-sh"

[build-system]
requires = ["maturin>=1.0,<2.0"]
build-backend = "maturin"

[dependency-groups]
release = ["rooster"]

[tool.uv]
cache-keys = [
    { file = "pyproject.toml" },
    { file = "dist-workspace.toml" },
    { file = "ruff/Cargo.toml" },
    { file = "ruff/Cargo.lock" },
    { file = "**/*.rs" },
]

[tool.uv.dependency-groups]
release = {requires-python = ">=3.12"}

[tool.ruff]
extend-exclude = ["ruff"]
per-file-target-version = { "scripts/**" = "py313" }

[tool.ruff.lint]
select = [
    "E",   # pycodestyle (error)
    "F",   # pyflakes
    "B",   # bugbear
    "B9",
    "C4",  # flake8-comprehensions
    "SIM", # flake8-simplify
    "I",   # isort
    "UP",  # pyupgrade
    "PIE", # flake8-pie
    "PGH", # pygrep-hooks
    "PYI", # flake8-pyi
    "RUF",
]

ignore = [
    # only relevant if you run a script with `python -0`,
    # which seems unlikely for any of the scripts in this repo
    "B011",
    # Leave it to the formatter to split long lines and
    # the judgement of all of us.
    "E501",
]

[tool.ruff.lint.isort]
required-imports = ["from __future__ import annotations"]

[tool.maturin]
bindings = "bin"
manifest-path = "ruff/crates/ty/Cargo.toml"
module-name = "ty"
python-source = "python"
strip = true
include = [
    { path = "dist-workspace.toml", format = [
        "sdist",
    ] },
    { path = "LICENSE", format = "sdist" },
]

[tool.rooster]
version-files = [
    "pyproject.toml",
    { path = "dist-workspace.toml", field = "workspace.version", format = "cargo" },
    "docs/installation.md",
]
submodules = ["ruff"]
require-labels = [{ submodule = "ruff", labels = ["ty"] }]
ignore-labels = [
    "internal",
    "testing",
    "ci",
    "playground",
    "documentation",
    "release",
]
changelog-ignore-authors = ["github-actions"]
major-labels = [] # We do not use the major version number yet
minor-labels = [] # We do not use the minor version number yet
version-format = "cargo"
trim-title-prefixes = ["[ty]"]

[tool.rooster.section-labels]
"Breaking changes" = ["breaking"]
"Preview features" = ["preview"]
"Bug fixes" = ["bug"]
"LSP server" = ["server"]
"CLI" = ["cli"]
"Configuration" = ["configuration"]
