Clazy
Kategorie:
Vydání RSS
1.17.1 2026-03-22
Toto vydání opravuje následující chybu:
- fully-qualified-moc-types: Oprava falešně pozitivního regresního testu u typů ukazatelů a referencí v generikách.
1.16.1 2026-03-22
Toto je opravná verze, která řeší problémy s integrací QtCreatoru a
kompatibilitu s novými verzemi Qt. Tato verze podporuje verze LLVM 19 až 21.
Toto vydání opravuje následující chyby:
- Diagnostika se vždy vygeneruje, i když neobsahuje žádné řešení. To se používá
- pro integraci do IDE, kde proces clazy zapíše soubor YAML obsahující
- zprávy, rozsahy a případně opravy
- Upravena kontrola odpojení readlocku tak, aby správně fungovala se změnami v Qt 6.11
1.17 2026-02-15
Toto vydání opravuje následující chyby:
- Opravena kontrola non-pod-static, která generovala varování pro každou položku kontejneru
- Opraven falešně pozitivní výsledek operátoru use-arrow-operator-instead-of-data, který se objevuje při typovém převodu hodnoty
- QVariant se nezařazuje na seznam povolených typů pro funkci detaching-temporary. Metoda QVariant::toString vrátí objekt typu QString, který není oddělený
- detaching-temporary řádně kontroluje podmínky v případě, že jsou zařazena více než dvě volání metod
- Opravy pro detaching-temporary a detaching-member jsou spolehlivější, pokud se pro volání operátorů použijí rozsahy oprav
- Při použití QT_NAMESPACE si clazy správně poradí s třídami Qt, které se nacházejí v tomto konkrétním jmenném prostoru
- Oprava nesprávného způsobu nahrazení v QMap::operator[]
- Zajištěno, aby se projekt zkompiloval s LLVM22. Byly opraveny testy qhash-namespace, fully-qualified-moc-types a old-style-connect
- Upravena kontrola odpojení readlocku tak, aby správně fungovala se změnami v Qt 6.11
- qstring-ref přesunut do manuallevel, protože není kompatibilní s Qt6
Toto vydání přidává následující novinku:
- Nové kontroly: - compare-member-check: Kontroluje, zda srovnávací operátory nepoužívají všechny proměnné členů dané třídy.
Pro kompilaci je nyní vyžadováno C++20
Odstraněny kontroly portování qt6-\*
1.16 2025-09-03
Toto vydání opravuje následující chyby:
- unused-result-check: Oprava pádu aplikace v případě, že nelze vyřešit deklaraci metody
- use-chrono-in-qtimer: Oprava pádu při použití předkompilovaných hlaviček
- qt6-qhash-signature: Úprava kontroly tak, aby při typových konverzích používala vhodnější logiku, a oprava pádu v okrajových případech
- Ujistěte se, že clang21 správně funguje s clazy a vykazuje stejný počet řádků a znaků jako dříve (nesrovnalosti při volání operátorů)
- non-pod-global-static: Oprava falešného poplachu s Q_IMPORT_PLUGIN v Qt-6.10
Toto vydání přidává následující novinky:
- Clazy lze konečně integrovat do clang-tidy – jeden příkaz vládne
- všem! Všechny kontroly lze aktivovat pomocí "clazy-<checkname>". Například:
- `clazy-qstring-arg, clazy-qfileinfo-exists`, povolení všech kontrol pomocí
- `clazy-*` také umožní provádět ruční kontroly. Doporučuje se volit podrobnější nastavení.
- Modul lze načíst pomocí `-load=ClazyClangTidy.so`; k tomu je třeba, aby modul
- byl v proměnné LD_LIBRARY_PATH. V opačném případě lze zadat absolutní cestu.
- isempty-vs-count nyní nabízí řešení pro všechny možné situace. Dále pak případy, kdy
- se délka porovnává pomocí "== 0", "< 1" a "> 0" – tyto případy jsou nyní nahlášeny a byly opraveny.
- qt6-\* Kontroly portování jsou nyní považovány za zastaralé a v příštím vydání clazy budou odstraněny
- Kontroly detaching-temporary a detaching-member poskytují opravy pro metody, které mají protějšky typu const
- NOLINT/NOLINTNEXTLINE/NOLINTBEGIN/NOLINTEND nyní v clazy fungují
- jak se dalo očekávat. Jednotlivé kontroly clazy lze při použití předpony "clazy-" deaktivovat
- Například "NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)"
1.15 2025-06-12
Toto vydání opravuje následující chyby:
- install-event-filter: Oprava pádu aplikace v případě, že v dané hloubce není žádný podřízený prvek. CHYBA: 464372
- fully-qualified-moc-types: Oprava nevyhodnocování výčtu (enum) a třídy enum. CHYBA: 423780
- Opravena chyba způsobující pád při porovnání qstring s implicitním typem char. CHYBA: 502458
- Opravena chyba způsobující pád programu, když se typy fully-qualified-moc-types setkají se signály obsahujícími výrazy typu "std::bitset<int(8)>"
- Opravena chyba v qvariant-template-instantiation
Toto vydání přidává následující novinky:
- Nové kontroly:
- readlock-detaching
- Aktualizace minimální verze Clang/LLVM na 19
- `clazy-standalone --version` obsahuje verzi z Git (výstup `git describe`), pokud se nejedná o označený commit
- Přidány chybějící metody pro kontrolu odpojení dočasných seznamů a seznamů členů nebo map
1.14 2025-04-27
Varování clazy pro následující řádek lze například deaktivovat takto: clazy:exclude-next-line=check1,check2
Podpora kompilace s Clang 20
zvyšuje podrobnosti některých varovných hlášení
kontroluje `function-args-by-value` a `function-args-by-ref`: do varovné zprávy přidá název funkce a název parametru
kontroluje `unused-non-trivial-variable` a `non-pod-global-static`: přidá název proměnné do varovné zprávy
Toto vydání přidává následující novinky:
- Nové kontroly:
- qbytearray-conversion-to-c-style
1.13 2024-12-28
Toto vydání přidává následující novinky:
- Nové kontroly:
- used-qunused-variable
Toto vydání opravuje následující chyby:
- qstring-arg nabízí nástroj pro opravu
- Opraveno unused-non-trivial-variable, které se již nezobrazí, pokud je nastavena proměnná [[maybe_unused]]
- Opraveno qstring-arg pro připravovanou verzi Qt 6.9
- Opraveno falešně pozitivní hlášení u plně kvalifikovaných typů MOC u modifikátorů const u generických argumentů
- Potlačeno varování o falešně pozitivním non-pod-global-static při inicializaci modulu QML
- Opravena falešně pozitivní chyba týkající se předávání argumentů funkcí podle hodnoty, která způsobovala chybu při kompilaci
- v konstruktoru pro kopírování, v operátorech přiřazení a při porovnávání rovnosti
- Opraveny falešné pozitivní výsledky u `Q_EMIT(someSignal())`
1.12 2024-06-30
Toto vydání přidává následující novinky:
- Nové kontroly:
- qt-keyword-emit
- sanitize-inline-keyword
1.11 2022-01-21
Toto vydání přidává následující novinky:
- Nové kontroly:
- use-arrow-operator-instead-of-data
- use-static-qregularexpression
- unexpected-flag-enumerator-value
- Odstraněna neefektivní kontrola qlist (opraveno v Qt6)
1.10 2021-07-20
Toto vydání opravuje následující chyby:
- Vyžadováno C++17
- Opravy chyb:
- Opraveno falešná pozitivita -Wclazy-lambda-in-connect
- Opravena chyba způsobující pád v kopírovatelně-polymorfním režimu při zapnuté funkci PCH
1.9 2021-01-10
Toto vydání opravuje následující chyby:
- Opraveno zpomalení způsobené clazy, které se objevilo ve verzi 1.8. Nyní může být až čtyřikrát rychlejší.
- Funkce `range-loop` byla rozdělena na funkce `range-loop-detach` a `range-loop-reference`
- Opravena falešná pozitivita -Wclazy-connect-non-signal
1.8 2020-11-22
Toto vydání přidává následující novinky:
- Nové kontroly:
- qt6-qhash-signature
- qt6-header-fixes
- qt6-deprecated-api-fixes
- use-chrono-in-qtimer
- oprava pro missing-qobject-macro
1.7 2020-06-29
Toto vydání přidává následující novinky:
- Nové kontroly:
- přetížený signál
- neplatné podpisy JNI
- qstring-comparison-to-implicit-char
- qt6-qlatin1string-to-u
- heap-allocated-small-trivial-type: méně falešné pozitivity
Toto vydání opravuje následující chyby:
- connect-non-signal: Oprava případu, kdy se nepodařilo najít pmf
- qstring-arg vydá varování při použití QLatin1String::arg(int), protože dochází k převodu na typ QChar
Samotné sestavení clazy je o 30 % rychlejší
1.6 2019-10-12
Toto vydání přidává následující novinky:
- Nové kontroly:
- heap-allocated-small-trivial-type
- signal-with-return-value
- qproperty-type-mismatch, přispěl Jean-Michaël Celerier
Úroveň 3 byla odstraněna. Všechny kontroly úrovně 3 byly přesunuty do ručního režimu. Nemá smysl je všechny povolit.
Každou z nich je třeba pečlivě zvážit.
Minimální verze LLVM byla zvýšena na 5.0
Clazy již soubory nepřepisuje přímo, aby se zabránilo situacím, kdy by při paralelním spuštění docházelo ke změnám stejného záhlaví.
Clazy nyní exportuje soubor YAML s nahrazenými částmi, které se mají aplikovat pomocí clang-apply-replacements.
Stejně jako u ostatních nástrojů Clangu.
Přepínače pro povolení přepisování kódu jsou nyní následující: -Xclang -plugin-arg-clazy -Xclang export-fixes pro clang
nebo -export-fixes=somefile.yaml pro clazy-standalone
Všechny ostatní argumenty příkazu fixit a proměnné prostředí fixit byly odstraněny
Děkujeme Christianu Gagneraudovi za poskytnutí exportéru fixit YAML!
Toto vydání opravuje následující chyby:
- Opraveny regrese s LLVM 9.0
- Infrastruktura fixit prošla kompletní revizí
1.5 2019-01-31
Toto vydání přidává následující novinky:
- Nové kontroly:
- ifndef-define-typo
- lowercase-qml-type-name
- qrequiredresult-candidates
- Nové opravy:
- range-loop nyní podporuje přidávání chybějících odkazů nebo konstantních odkazů
- range-loop nyní podporuje přidávání qAsConst()
- function-args-by-ref nyní doplňuje chybějící odkazy nebo konstantní odkazy (experimentální)
- Zavedena proměnná prostředí CLAZY_FIXIT_SUFFIX
Odstraněna podpora málo známého parametru -DCLAZY_BUILD_UTILS_LIB za účelem zjednodušení souboru CMakeLists.txt
Přejmenován modul clazy z ClangLazy.so na ClazyPlugin.so
fully-qualified-moc-types nyní vydává varování i u návratových hodnot slotů a invokable. Tymusí být pro QML plně kvalifikované.
Toto vydání opravuje následující chybu:
- Opravena chyba způsobující pád programu (clang assert) v raw-environment-function
1.4 2018-09-23
Toto vydání přidává následující novinky:
- Nové kontroly:
- connect-by-name
- skipped-base-method
- qstring-varargs
- fully-qualified-moc-types
- qt-keywords, with fixit included
- qhash-with-char-pointer-key
- wrong-qevent-cast
- static-pmf
- raw-environment-function
- empty-qstringliteral
- auto-unexpected-qstringbuilder nyní také upozorňuje na lambda výrazy, které vrací QStringBuilderlder
optimalizace výkonu
Do nástroje clazy-standalone byla přidána volba -header-filter=<regex>. Pouze hlavičky, kteréodpovídají regulárnímu výrazu, budou
obsahovat varování, kromě souboru .cpp z překladové jednotky, který se nikdyneodfiltruje.
Do nástroje clazy-standalone byla přidána volba -ignore-dirs=<regex> a její ekvivalent v proměnné prostředí CLAZY_IGNORE_DIRS.
Přidána proměnná prostředí CLAZY_HEADER_FILTER, která přidává výše uvedenou funkcionalitu jak kclazy, tak k clazy-standalone
unused-non-trivial-variable má možnost unused-non-trivial-variable-no-whitelist
unused-non-trivial-variable nyní podporuje černou a bílou listinu uživatelů
container-inside-loop je nyní ruční kontrola namísto úrovně 2
HiddenLevel byl přejmenován na ManualLevel
Funkce connect-3arg-lambda nyní zobrazuje varování při předání lambdy do QTimer::singleShot() nebo QMenu::addAction()
bez kontextového objektu
old-style-connect nyní vydává varování také u QMenu::addAction() a QMessageBox::open()
1.3 2017-11-26
Toto vydání přidává následující novinky:
- Nové kontroly:
- thread-with-slots
- connect-3arg-lambda
- qproperty-without-notify
- virtual-signal
- overridden-signal
- qhash-namespace
- const-signal-or-slot
- lambda-unique-connection
missing-qobject-macro je nyní kontrolou úrovně 2 namísto úrovně 1. Důvodem je, že uživatelémohou záměrně vynechat Q_OBJECT.
Přidána možnost -only-qt, díky níž program clazy předčasně ukončí zpracování souborů, které nejsou soubory Qt. Protento účel se soubor Qt definuje jako takový, u kterého je předán parametr -DQT_CORE_LIB,což je ve většině systémů pro sestavování softwaru obvyklé.
Přidána možnost -qt-developer; při kompilaci Qt pomocí clazy se budou dodržovat konkrétnípokyny pro Qt, kterých je zatím sice málo, ale jejich počet se bude zvyšovat.
1.2 2017-07-08
Toto vydání přidává následující novinky:
- Nové kontroly:
- install-event-filter
- qcolor-from-literal
- strict-iterators
- connect-not-normalized
Toto vydání opravuje následující chyby:
- Spustitelný soubor clazy-standalone. Umožňuje spustit clazy s využitím kompilační databáze JSONnamísto použití jako modulu. clang-tidy nepodporuje načítání externích modulů(https://github.com/llvm/llvm-project/issues/32086), takže se jedná o dobréřešení tohoto problému.
- Režim qt-compat. Umožňuje deaktivovat kontroly specifické pro Qt5 zadáním parametrů -Xclang -plugin-arg-clazy -Xclang qt4-compat
- returning-data-from-temporary nyní kontroluje, zda se dočasné objekty QByteArray při vrácení převádějí nachar*
- returning-data-from-temporary nyní kontroluje i přiřazení, nejen příkazy return
- unused-non-trivial-variable nyní vydává varování v případě nepoužitých typů QList, QVector a mnoha dalšíchtypů
- Nyní jsou podporovány kontroly založené na ASTMatchers
- Verze clang 3.7 byla vyřazena kvůli nekompatibilitám zdrojového kódu s knihovnou ASTMatchers.
- Pro podporu clang >= 3.6 použijte clazy v1.1
- clazylib.so se již ve výchozím nastavení nekompiluje, kompiluje se pouze modul (ClangLazy.so).Chcete-li povolit knihovnu utilit, zadejte parametr -DCLAZY_BUILD_UTILS_LIB=ON, pokudvyvíjíte nástroje s využitím pomocných funkcí clazy, což ale pravděpodobněneděláte.
- Možnost CLAZY_INSTALL_NO_HEADERS byla odstraněna. Buď nainstalujte knihovnu utilsa hlavičkové soubory, nebo vůbec nic. Ve výchozím nastavení se neinstaluje nic, kromě modulua manuálových stránek.
1.1 2017-02-20
Toto vydání přidává následující novinky:
- Podpora systémů macOS a Windows
- Nové kontroly:
- child-event-qobject-cast
- ctor-missing-parent-argument
- returning-data-from-temporary
- qt-macros
- base-class-event
- connect-non-signal
- incorrect-emit
- tr-non-literal
- Opravy týkající se:
- clang 4.0
- Qt 5.9
- Poznámky:
- 60% zvýšení výkonu
- Opraveno mnoho falešných pozitiv