TOOMIX: Doporučuji se zamyslet, jak moc pokročilé formátování potřebuješ. Pokud potřebuješ pouze odsazování, jde to udělat celkem naivním způsobem, kdy každý řádek odsadíš na základě počtu otevřených závorek před ním.
Pokud bys chtěl pokročilejší formátování (jako má např. clang-format), musíš to celé naparsovat a pak znovu vygenerovat, jak navrhuje
KLIP. Ovšem tohle není zdaleka tak jednoduché, jak by se mohlo zdát. Potřebuješ totiž „nedestruktivní“ parser:
– Potřebuješ parsovat a uchávavat komentáře (namísto zahazování v lexeru).
– Potřebuješ uchovávat původní literály, protože člověk může napsat
1.6 nebo
1.600 – překladači to je jedno, ale při reformátování to chceš zachovat.
– Potřebuješ uchovávat informace o závorkách. Opět, překladači je (obvykle) jedno jestli napíšeš
x = a + b; nebo
x = (a + b);, ale reformatteru ne.
– Atd.
V tomto je ještě o dost vypečenější C(++), kde máš preprocessor, který byl původně zamýšlen tak, že o něm samotný kompilátor vlastně nepotřebuje vědět, ale pro formatting to musí být všechno v jednom parseru.
Možná by se ten problém dal trochu redefinovat – celé formátovaní je vlastně jednom editace whitespace mezi tokeny. Informace z parseru by se daly použít na editace whitespace místo generování celého zdrojáku nanovo.