[build-system]
#  Wyrażenie SPDX w polu `license` niżej jest z PEP 639, a rozumie je setuptools
#  od wydania 77; starsze przepuszcza je jako nazwę licencji i metadane wychodzą
#  wtedy nieprawdziwe.
requires = ["setuptools>=77"]
build-backend = "setuptools.build_meta"

[project]
name = "olski"
version = "0.0.1"
description = "A parser for a designed subset of Polish"
requires-python = ">=3.11"
#  Wyrażenie mówi o tym, co niesie paczka, a nie o tym, co stoi w repozytorium:
#  kod idzie na MIT, a razem z nim jadą dwa pliki danych na warunkach swoich
#  źródeł (`[tool.setuptools.package-data]` niżej). Zdania cudze z `próba/` do
#  paczki nie wchodzą, więc nie ma ich w tym wyrażeniu. Który plik stoi pod
#  którą licencją, mówi `REUSE.toml` i on jest właścicielem tej deklaracji.
license = "MIT AND CC-BY-SA-4.0 AND GPL-3.0-or-later"
license-files = ["LICENSES/*.txt"]
#  Parser Markdownu jest zależnością paczki, bo `olski-check` bierze plik, który
#  autor napisał, i prozę wyjmuje z niego sam (`olski/markdown.py`). Ceną jest ten
#  jeden wpis, i tyle ma być tej ceny: własnej obsługi formatu nie piszemy.
dependencies = ["markdown-it-py>=3", "morfeusz2>=1.99"]

[project.optional-dependencies]
#  `reuse` sprawdza deklarację z `REUSE.toml` i wchodzi tędy z tego samego powodu
#  co reszta: instaluje ją blok checków.
dev = ["pytest>=8", "reuse>=6", "ruff>=0.5"]
#  Serwer HTTP witryny, czyli jedyna zależność bocznego toru. Aplikacja jest
#  funkcją WSGI ze standardowej biblioteki, więc suita nie woła gunicorna, a
#  klon bez tego dodatku uruchamia witrynę przez `python3 -m witryna`.
witryna = ["gunicorn>=22"]
#  Strona dokumentów, czyli drugi tor poza paczką: mkdocs składa prozę
#  repozytorium, a mkdocstrings wypisuje w niej referencję z docstringów. Suita
#  ich nie instaluje, tak jak nie instaluje gunicorna, bo blok checków nie buduje
#  strony (docs/publikacja.md). pymdown-extensions przychodzi z motywem, a stoi
#  tu wprost, bo `mkdocs.yml` woła z niego slugify. Tak samo griffe: przychodzi
#  z mkdocstrings, a `dokumentacja.py` czyta nim drzewo modułów i przekłada rolę
#  reStructuredText na odsyłacz. Paczka nazywa się `griffelib`, a moduł `griffe`.
#  Górna granica na mkdocs jest nazwana: wydanie 2.0 zdejmuje system wtyczek
#  i przepisuje motywy, a strona stoi na motywie i na dwóch wtyczkach.
dokumentacja = [
  "griffelib>=2",
  "mkdocs>=1.6,<2",
  "mkdocs-material>=9",
  "mkdocstrings[python]>=1",
  "pymdown-extensions>=10",
]

[project.scripts]
olski-check = "olski.check:main"
olski-pokrycie = "olski.pokrycie:main"

[tool.setuptools.packages.find]
include = ["olski*"]

#  Leksykon walencyjny jest danymi, a nie kodem, więc wchodzi do paczki stąd.
#  Gramatyka czyta go przy imporcie, więc instalacja bez niego nie startuje.
#  Tabela skłonności przyłączeniowych i plik żądań idą tą samą drogą i z tym się
#  różnią, że bez nich warstwa nad nimi milczy, zamiast nie wstać.
#  Wszystkie trzy mówią o polszczyźnie, więc są te same dla każdego, kto olskiego
#  zainstaluje.
#  Leksykon projektu tędy nie idzie i dlatego, że mówi o jednym projekcie:
#  `olski.toml` leży w katalogu, nad którym olskiego uruchomiono
#  (`znajdź` w `olski/konfiguracja.py`).
[tool.setuptools.package-data]
olski = ["leksykon.txt", "skłonności.txt", "żądania.txt"]

[tool.pytest.ini_options]
testpaths = ["tests"]
#  The harness is not part of the package and is not installed with it, so its
#  tests reach it the way a run from a clone does.
pythonpath = ["."]

[tool.ruff]
line-length = 100

[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM"]
# Komentarz i docstring są prozą pod sembr, a ta każe wierszom się różnić,
# więc stała szerokość mierzy tu nie to, co trzeba
# (CLAUDE.md#semantic-line-breaks). Kodu to nie rozprzęga, bo `line-length`
# wyżej zostaje i wedle niego łamią się importy.
ignore = ["E501"]
