[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "mkdocs"
description = "Project documentation with Markdown."
readme = "README.md"
license = "BSD-2-Clause"
authors = [
    {name = "Tom Christie", email = "tom@tomchristie.com"},
]
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Console",
    "Environment :: Web Environment",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: BSD License",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "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 :: Only",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
    "Topic :: Documentation",
    "Topic :: Text Processing",
]
dynamic = ["version"]
requires-python = ">=3.8"
dependencies = [
    "click >=7.0",
    "Jinja2 >=2.11.1",
    "markupsafe >=2.0.1",
    "Markdown >=3.3.6",
    "PyYAML >=5.1",
    "watchdog >=2.0",
    "ghp-import >=1.0",
    "pyyaml_env_tag >=0.1",
    "importlib-metadata >=4.4; python_version < '3.10'",
    "packaging >=20.5",
    "mergedeep >=1.3.4",
    "pathspec >=0.11.1",
    "mkdocs-get-deps >=0.2.0",
    "colorama >=0.4; platform_system == 'Windows'",
]
[project.optional-dependencies]
i18n = [
    "babel >=2.9.0",
]
min-versions = [
    "click ==7.0",
    "Jinja2 ==2.11.1",
    "markupsafe ==2.0.1",
    "Markdown ==3.3.6",
    "PyYAML ==5.1",
    "watchdog ==2.0",
    "ghp-import ==1.0",
    "pyyaml_env_tag ==0.1",
    "importlib-metadata ==4.4; python_version < '3.10'",
    "packaging ==20.5",
    "mergedeep ==1.3.4",
    "pathspec ==0.11.1",
    "mkdocs-get-deps ==0.2.0",
    "colorama ==0.4; platform_system == 'Windows'",
    "babel ==2.9.0",
]

[project.urls]
Documentation = "https://www.mkdocs.org/"
Source = "https://github.com/mkdocs/mkdocs"
Issues = "https://github.com/mkdocs/mkdocs/issues"
History = "https://www.mkdocs.org/about/release-notes/"

[project.scripts]
mkdocs = "mkdocs.__main__:cli"

[project.entry-points."mkdocs.themes"]
mkdocs = "mkdocs.themes.mkdocs"
readthedocs = "mkdocs.themes.readthedocs"

[project.entry-points."mkdocs.plugins"]
search = "mkdocs.contrib.search:SearchPlugin"

[tool.hatch.version]
path = "mkdocs/__init__.py"

[tool.hatch.build]
artifacts = ["/mkdocs/**/*.mo"]
[tool.hatch.build.targets.sdist]
include = ["/mkdocs"]
[tool.hatch.build.targets.wheel]
exclude = ["/mkdocs/tests", "*.po", "*.pot", "babel.cfg"]
[tool.hatch.build.hooks.custom]
dependencies = [
    "babel",
    "setuptools; python_version >= '3.12'",
]

[tool.hatch.env]
requires = ["hatch-mkdocs", "hatch-pip-compile"]

[tool.hatch.envs.default.scripts]
all = [
    "hatch run style:fix",
    "hatch run types:check",
    "hatch run test:test",
    "hatch run lint:check",
    "hatch run +type=default integration:test",
]

[tool.hatch.envs.test]
features = ["i18n"]
dependencies = [
    "coverage",
]
[tool.hatch.envs.test.scripts]
test = 'python -m unittest discover -s mkdocs -p "*tests.py"'
_coverage = [
    'coverage run --source=mkdocs --omit "mkdocs/tests/*" -m unittest discover -s mkdocs -p "*tests.py"',
    "coverage xml",
    "coverage report --show-missing"
]
with-coverage = "test"
[[tool.hatch.envs.test.matrix]]
python = ["3.8", "3.9", "3.10", "3.11", "3.12", "pypy3"]
type = ["default", "min-req"]
[tool.hatch.envs.test.overrides]
matrix.type.features = [
    { value = "min-versions", if = ["min-req"] },
]
matrix.type.scripts = [
    { key = "with-coverage", value = "_coverage", if = ["default"] },
]

[tool.hatch.env.collectors.mkdocs.integration]
path = "mkdocs.yml"
[tool.hatch.envs.integration]
detached = false
[tool.hatch.envs.integration.scripts]
test = "python -m mkdocs.tests.integration"
[[tool.hatch.envs.integration.matrix]]
python = ["3.8", "3.9", "3.10", "3.11", "3.12", "pypy3"]
type = ["default", "no-babel"]
[tool.hatch.envs.integration.overrides]
matrix.type.features = [
    { value = "i18n", if = ["default"] },
]

[tool.hatch.envs.types]
dependencies = [
    "mypy",
    "babel",
    "types-Markdown",
    "types-pytz",
    "types-PyYAML",
    "types-setuptools",
    "typing-extensions",
]
[tool.hatch.envs.types.scripts]
check = "mypy mkdocs"

[tool.hatch.envs.style]
type = "pip-compile"
detached = true
dependencies = [
    "black",
    "isort",
    "ruff",
]
[tool.hatch.envs.style.scripts]
check = [
    "isort --check-only --diff mkdocs docs",
    "black -q --check --diff mkdocs docs",
    "lint",
]
lint = [
    "ruff check mkdocs docs {args}"
]
fix = [
    "lint --fix",
    "format",
]
format = [
    "isort -q mkdocs docs",
    "black -q mkdocs docs",
]

[tool.hatch.envs.lint]
detached = true
dependencies = [
    "codespell==2.2.6",
]
[tool.hatch.envs.lint.scripts]
spelling = 'codespell mkdocs docs *.* -S LC_MESSAGES -S "*.min.js" -S "lunr*.js" -S fontawesome-webfont.svg -S tinyseg.js -S "*.map"'
markdown = "npm exec --yes -- markdownlint-cli README.md CONTRIBUTING.md docs/ --ignore docs/CNAME"
js = "npm exec --yes -- jshint mkdocs/"
check = ["markdown", "js", "css", "spelling"]

[tool.hatch.env.collectors.mkdocs.docs]
path = "mkdocs.yml"
[tool.hatch.envs.docs]
type = "pip-compile"
detached = false

[tool.black]
line-length = 100
skip-string-normalization = true

[tool.isort]
profile = "black"
line_length = 100

[tool.ruff]
select = [
    "F", "W", "E", "UP", "YTT", "C4", "DTZ", "FA", "ISC", "PIE", "T20", "RSE", "TCH",
    "B002", "B003", "B005", "B007", "B009", "B012", "B013", "B014", "B015", "B018", "B020", "B021", "B023", "B026", "B033", "B034", "B905",
    "COM818",
    "D200", "D201", "D202", "D204", "D207", "D208", "D209", "D210", "D211", "D213", "D214", "D300", "D301", "D400", "D402", "D403", "D405", "D412", "D414", "D415", "D416", "D417", "D419",
    "PERF101",
    "PGH002", "PGH004", "PGH005",
    "FLY002",
    "PLC", "PLE", "PLR0124", "PLR0133", "PLR0206", "PLR0402", "PLR1701", "PLR1722", "PLW0120", "PLW0127", "PLW0129", "PLW0131", "PLW0406", "PLW0602", "PLW0603", "PLW0711",
    "RUF001", "RUF005", "RUF007", "RUF010", "RUF013", "RUF100", "RUF200",
    "SIM101", "SIM107", "SIM201", "SIM202", "SIM208", "SIM210", "SIM211", "SIM300", "SIM401", "SIM910",
]
ignore = ["E501", "E731"]

[tool.ruff.flake8-comprehensions]
allow-dict-calls-with-keyword-arguments = true

[tool.mypy]
warn_unreachable = true
no_implicit_optional = true
show_error_codes = true
