[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"


[tool.poetry]
name = "jinjax"
version = "0.46"
description = "Replace your HTML templates with Python server-Side components"
authors = ["Juan-Pablo Scaletti <juanpablo@jpscaletti.com>"]
license = "MIT"
readme = "README.md"
homepage = "https://jinjax.scaletti.dev/"
repository = "https://github.com/jpsca/jinjax"
documentation = "https://jinjax.scaletti.dev/guides/"
classifiers = [
    "Development Status :: 4 - Beta",
    "Environment :: Web Environment",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
    "Topic :: Software Development :: Libraries",
    "Topic :: Software Development :: Libraries :: Python Modules",
    "Topic :: Software Development :: User Interfaces",
    "Topic :: Text Processing :: Markup :: HTML",
    "Typing :: Typed",
]

[tool.poetry.dependencies]
python = "^3.10"
jinja2 = ">=3.0"
markupsafe = ">=2.0"
whitenoise = ">=5.3"

[tool.poetry.group.dev]
optional = true

[tool.poetry.group.dev.dependencies]
pyright = ">=1.1.282"
pre-commit = "*"
tox = "*"
typing-extensions = "^4.11.0"

[tool.poetry.group.test]
optional = true

[tool.poetry.group.test.dependencies]
pytest = "^8.1.1"
pytest-cov = "*"
ruff = ">0.3"


[tool.coverage.run]
branch = true

[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "TYPE_CHECKING",
    "def __repr__",
    "def __str__",
    "raise AssertionError",
    "raise NotImplementedError",
    "if __name__ == .__main__.:"
]

[tool.coverage.html]
directory = "covreport"


[tool.pyright]
include = ["src"]
exclude = [
    "**/node_modules",
    "**/__pycache__",
    "**/tests",
]
ignore = []
reportPrivateImportUsage = false
reportWildcardImportFromLibrary = false


[tool.pytest.ini_options]
addopts = "--doctest-modules"


[tool.tox]
legacy_tox_ini = """
[tox]
skipsdist = True
envlist = py310,py311,py312,pypy3.10

[testenv]
skip_install = true
allowlist_externals = poetry
commands =
    pip install -U pip wheel
    poetry install --with test
    pytest -x src/jinjax tests
"""


[tool.ruff]
line-length = 90
indent-width = 4
target-version = "py311"

exclude = [
  ".*",
  "_build",
  "build",
  "covreport",
  "dist",
]
include = ["*.py"]


[tool.ruff.format]
# Like Black, use double quotes for strings.
quote-style = "double"

# Like Black, indent with spaces, rather than tabs.
indent-style = "space"

# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false

# Like Black, automatically detect the appropriate line ending.
line-ending = "auto"

# Enable auto-formatting of code examples in docstrings. Markdown,
# reStructuredText code/literal blocks and doctests are all supported.
#
# This is currently disabled by default, but it is planned for this
# to be opt-out in the future.
docstring-code-format = false

# Set the line length limit used when formatting code snippets in
# docstrings.
#
# This only has an effect when the `docstring-code-format` setting is
# enabled.
docstring-code-line-length = "dynamic"


[tool.ruff.lint]
fixable = ["ALL"]

ignore = [
	# x is too complex
	"C901",
	# whitespace before ':'
	"E203",
	"E501",
	# x defined from star imports
	"F405",
	# line break before binary operator
	"W505",
	"W605",
]
select = [
	# bugbear
	"B",
	# mccabe"", comprehensions, commas
	"C",
	# pycodestyle errors
	"E",
	# pyflakes
	"F",
	# logging format
	"G",
	# imports
	"I",
	# quotes
	"Q",
	# pycodestyle warnings
	"W",
]


[tool.ruff.lint.isort]
known-first-party = ["jinjax"]

# Use two line after imports.
lines-after-imports = 2
