Przejdź do treści

Pakiet, instalacja i testy

Trzy warstwy toru gramatycznego mają własny pakiet (olski/parse/, olski/subset/, olski/skład/), a dwie leżą luzem w olski/: morfologia w czterech modułach, które wylicza tabela w docs/architecture.md, oraz to, co nad parserem, czyli olski/werdykt.py, olski/rozstrzyganie.py, olski/odniesienia.py, olski/pokrycie.py i olski/check.py. Obok nich leżą moduły, którym tabela nie przypisuje żadnej warstwy, a olski/lematy.py mówi w docstringu, że pyta o niego więcej niż jedna. Usterką to nie jest, bo granica warstwy jest tam granicą modułu albo pakietu, a import między pakietami idzie w jedną stronę. Ruchem jest osobny pakiet dla morfologii, na wzór tamtych trzech, a nie przebieg po całym wierzchu. Podejmuje go dopiero sesja, która tej warstwie dopisuje moduł albo i tak przemianowuje jej ścieżki. Cena jest w ścieżkach: moduły morfologii nazywa z dokumentów i rejestru kilkanaście plików, a każdą taką nazwę pilnuje tests/test_docs.py. Do przeczytania przed ruchem są importy olski/segmentacja.py, bo czyta on olski/grammar.py, więc morfologia nie leży pod formalizmem, tylko obok niego, i pakiet tę zależność albo przyjmuje, albo przecina.

witryna/skrypt.js jest jedynym plikiem w repozytorium, którego nic nie uruchamia. Suita pyta o niego z zewnątrz jedno — czy strona woła trasy, które serwer ma (tests/test_witryna.py) — a samego skryptu nie wykonuje, bo w bloku checków nie ma node'a i dopisanie go tam kosztuje drugie środowisko w workflowie. Decyzja robi się potrzebna wtedy, gdy skrypt zacznie cokolwiek liczyć; dziś rysuje dane, a po stronie Pythona jest prawie wszystko, co może być nie tak — poza tekstem, który przycisk kopiuje do schowka (docs/witryna.md). Ruchy są dwa i różnią się tym, co przyjmują za granicę: albo node wchodzi do checków wraz z jednym testem strony w przeglądarce bezgłowej, albo skrypt zostaje bez testu, a regułą staje się to, że logika nie schodzi do przeglądarki. Przeczytaj przed decyzją tests/test_wydruki.py, bo pokazuje on, ile pilnowania da się zrobić bez drugiego środowiska.

ruff format nie stoi w bloku checków, a nad kilkudziesięcioma plikami ma zdanie inne niż to, co w nich stoi: wypisuje je ruff format --check ., a --diff pokazuje, że różnica jest w miejscach łamania wiersza, nie w kodzie. Wyborem to nie jest, bo reguła o łamaniu oddaje kod zwykłemu narzędziu języka, a tym narzędziem jest tutaj ten formater. Płaci za to ten, kto puści go na pliku, który akurat poprawia: diff obejmuje wtedy wiersze, których nie tknął. Ruchem jest jedno z dwojga — ruff format --check . dopisany do bloku checków i do workflowu wraz z jednym przebiegiem po całym drzewie, albo zdanie w CLAUDE.md, że formatera tu nie używamy, a ruff check jest całym sprawdzeniem kodu. Do przeczytania jest ruff format --diff olski/parse/las.py, bo mówi, co ten przebieg zrobiłby z adnotacją typu rozbitą ręką na trzy wiersze.