[project]
name = "Herkules"
dynamic = ["version"]
description = "Crawl directories with style"
keywords = ["file search", "simple", "pure"]
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: BSD License",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 3",
    "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",
    "Topic :: Utilities",
    "Typing :: Typed",
]
authors = [{ name = "Martin Zuther", email = "code@mzuther.de" }]
requires-python = ">=3.10,<4.0"
readme = "README.md"
license = "BSD-3-Clause"
license-files = ["LICENSE.md"]
dependencies = []

[project.scripts]
herkules = "herkules.Herkules:main_cli"

[project.urls]
Homepage = "https://github.com/mzuther/Herkules"
Repository = "https://github.com/mzuther/Herkules.git"
Changelog = "https://github.com/mzuther/Herkules/blob/main/CHANGELOG.md"

[dependency-groups]
dev = [
    "mypy>=1.19.0",
    "pip-licenses>=5.0.0",
    "pytest>=7.3.0",
    "pytest-cov>=6.2.0",
    "pytest-datafiles>=3.0.0",
    "ruff>=0.12.0",
]

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

[tool.hatch.version]
path = "herkules/Herkules.py"

[tool.coverage.run]
branch = true

[tool.coverage.report]
skip_covered = true
skip_empty = true

[tool.pytest.ini_options]
markers = [
    "current: marks tests as current (select with '-m current')",
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
]
testpaths = [
    "tests",
]

[tool.mypy]
strict = true

[tool.ruff]
line-length = 79

[tool.ruff.format]
quote-style = "single"

[tool.ruff.lint]
select = [
    # pycodestyle (errors)
    "E",
    # pycodestyle (warnings)
    "W",
    # Pyflakes
    "F",

    # flake8-bugbear
    "B",
    # mccabe
    "C90",
    # isort
    "I",
    # pyupgrade
    "UP",
    # flake8-simplify
    "SIM",
]

[tool.ruff.lint.mccabe]
max-complexity = 7
