Programujeme letenky

Vývojáři GOL IBE v C.E.E. Group Travelport
Programátorský web
Background image - Futurama office park

Zavádíme jednotný auto formatter pro C++

Lukáš Niedoba, 18. 11. 2020

Nač plýtvat časem nejednoho programátora opravováním bílých znaků a předáváním issue při vyjednávání správné podoby formátování. Není potřeba tratit energii tím, co lze vyřešit automaticky. A proto se pouštíme do zavedení auto formatteru.

Objevily se i argumenty proč formatter raději nezavádět - při hromadném přeformátování se historie GITu značně zastíní velkým počtem změněných řádků. Náš projekt je již značně rozsáhlý a jeho historie je cenná. Z té často čerpáme při dopátrávání business požadavků pojícím se k záhadnému kódu, či při pátrání po důvodech již dávno zapomenutých a vedoucích k danému řešení. Lákavá možnost by byla pomocí git-filter-branch historii GITu přepsat, ale to by mohlo rozhodit napojená data vzniklá v Gitlabu. Nakonec jsme se shodli, že lehké zastínění historie překousneme s tím, že již existuje dost šikovných nástrojů, které nám dohledávání v historii ulehčí. Navíc jsou takové nástroje často již zabudované v moderních IDE.

Po krátkém průzkumu jsem zjistil že existují dva hlavní hráči ve formátování C++ kódu a to:

Zvolili jsme clang-format, zejména kvůli možnostem integrace do IDE a dědění z nejznámějších coding standardů. Protože náš stávající coding standart je založen na tom od Googlu.

Aby byl coding standart jednotný, je potřeba, aby si jej systém vynutil. Jasná cesta je tedy přidání kontroly naformátování do CI, kdy v případě nesouladu se build rozsvítí červeně. Vývojáři na svých prostředí použijí možnost integrace do IDE, či vlastní řešení.

V krajních případech se může stát, že nám formatter bude nutit problematické naformátování a v těch jsme připraveni použít:

int naformatovanyKod;
// clang-format off
    std::string       formatovaniVypnuto  ;
// clang-format on
int opetNaformatovanyKod;

Většinou ale drobné nuance mezi naší představou a automatickým formátem přijmeme a budeme se těšit krásnému, jednotnému kódu.