Перейти до вмісту

Clazy

Категорії:   Розробка
Знімок вікна Clazy
Clazy є додатком до компілятора Clang, який попереджає про порушення правил правильного програмування з використанням Qt.
Встановити у
Linux
Ця кнопка працює, лише якщо використано Discover та інші крамниці програм з підтримкою AppStream. Ви також можете скористатися програмою для керування пакунками вашого дистрибутива.

Випуски RSS

1.17.1 2026-03-22

У цьому випуску виправлено таку ваду:

  • fully-qualified-moc-types: виправлено регресію з помилковим спрацьовуванням для типів вказівників/посилань у загальних змінних.
1.16.1 2026-03-22

Це проміжних випуск для виправлення проблем з інтеграцією QtCreator і

сумісністю з новими версіями Qt. У цьому випуску реалізовано підтримку версій LLVM 19 і 21.

У цьому випуску виправлено такі вади:

  • Безумовне надсилання діагностичних повідомлень, навіть якщо у них не міститься fixit. Використовується
  • для інтеграції з комплексними середовищами розробки, де процес clazy записує файл YAML, у якому містяться
  • повідомлення, діапазони та необов'язкові повідомлення щодо виправлення
  • Скориговано перевірку readlock-detaching так, щоб вона належно працювала зі змінами у Qt 6.11
1.17 2026-02-15

У цьому випуску виправлено такі вади:

  • Виправлено попередження, яке пов'язане з перевіркою non-pod-static, для кожного запису контейнера
  • Виправлено помилкове спрацьовування use-arrow-operator-instead-of-data під час приведення значення
  • Усунено додавання QVariant до білого списку для detaching-temporary. QVariant::toString надасть QString, який не є від'єднаним.
  • У новій версії detaching-temporary належно перевіряє умови, якщо у ланцюжку понад два виклики методів
  • Fixit для detaching-temporary/detaching-member надійніші з діапазонами fixit для викликів операторів
  • Якщо використано QT_NAMESPACE, clazy належним чином оброблятиме класи Qt, що перебувають у цьому просторі назв
  • Виправлено помилковий метод-замінник для QMap::operator[]
  • Уможливлено збирання проєкту з LLVM22. Виправлено перевірки qhash-namespace, fully-qualified-moc-types, old-style-connect
  • Скориговано перевірку readlock-detaching так, щоб вона належно працювала зі змінами у Qt 6.11
  • qstring-ref пересунуто до manuallevel, оскільки вона не сумісна з Qt6

У цьому випуску додано таку можливість:

  • Нові перевірки: - compare-member-check: перевіряє, чи використовують оператори порівняння усі змінні-учасники класу.

Для збирання тепер потрібен C++20

Вилучено перевірки портування на qt6-\*

1.16 2025-09-03

У цьому випуску виправлено такі вади:

  • unused-result-check: усунено аварійне завершення роботи, якщо не вдасться визначити оголошення методу
  • use-chrono-in-qtimer: усунено аварійне завершення роботи при використанні попередньо зібраних заголовків
  • qt6-qhash-signature: адаптовано перевірку для використання належнішої логіки для викликів і усунено аварійне завершення роботи у крайніх випадках
  • Забезпечено належну роботу clang21 з clazy та видачу того самого номера рядка/літери, що й раніше (невідповідність з викликами операторів)
  • non-pod-global-static: виправлено хибне спрацювання з Q_IMPORT_PLUGIN у Qt-6.10

У цьому випуску додано такі можливості:

  • Нарешті clazy може бути інтегровано до clang-tidy — одна команда для керування
  • усіма ними! Усі перевірки може бути увімкнено за допомогою "clazy-<назва_перевірки>". Приклад:
  • `clazy-qstring-arg,clazy-qfileinfo-exists`, вмикання усіх використаних перевірок
  • `clazy-*` також увімкне перевірки вручну. Рекомендуємо точне налаштовування.
  • Додаток може бути завантажено за допомогою `-load=ClazyClangTidy.so`, для цього, додаток
  • має бути у LD_LIBRARY_PATH. Інакше слід вказувати абсолютний шлях.
  • У новій версії isempty-vs-count надаються підказки щодо виправлення для усіх сценаріїв. Також програма повідомлятиме про випадки,
  • де довжина порівнюється за допомогою "== 0", "< 1", "> 0" і додає підказки щодо виправлення.
  • Перевірки портування qt6-\* тепер вважаються застарілими; їх буде вилучено у наступному випуску clazy
  • detaching-temporary і detaching-member надають підказки щодо виправлення для методів, у яких є сталі відповідники
  • NOLINT/NOLINTNEXTLINE/NOLINTBEGIN/NOLINTEND усі працюють у clazy, як
  • належить. Окремі перевірки clazy можна вимкнути за допомогою префікса "clazy-".
  • Приклад: "NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)"
1.15 2025-06-12

This release fixes the following bugs:

  • install-event-filter: Fix crash when there is no child at the given depth. BUG: 464372
  • fully-qualified-moc-types: Fix enum/enum class not being evaluated. BUG: 423780
  • Fixed crash in qstring-comparison-to-implicit-char. BUG: 502458
  • Fixed crash when fully-qualified-moc-types encounters signals with expressions like "std::bitset<int(8)>"
  • Fixed crash in qvariant-template-instantiation

This release adds the following features:

  • New checks:
  • readlock-detaching
  • Update minimum Clang/LLVM to 19
  • `clazy-standalone --version` contains git version ( output of `git describe`) if it is not a tagged commit
  • Added missing methods to checks for detaching temporary/member lists or maps
1.14 2025-04-27

Clazy warnings for the following line can be disabled, for example: clazy:exclude-next-line=check1,check2

Support for compilation against Clang 20

increase verbosity of some warning messages

checks `function-args-by-value` and `function-args-by-ref`: add function name and parameter name to warning message

checks `unused-non-trivial-variable` and `non-pod-global-static`: add variable name to warning message

This release adds the following features:

  • New checks:
  • qbytearray-conversion-to-c-style
1.13 2024-12-28

У цьому випуску додано такі можливості:

  • Нові перевірки:
  • used-qunused-variable

У цьому випуску виправлено такі вади:

  • У новій версії перевірка qstring-arg додає повідомлення щодо виправлення
  • Виправлено unused-non-trivial-variable так, щоб перевірка не попереджала, якщо встановлено [[maybe_unused]]
  • Виправлено qstring-arg для сумісності з Qt 6.9
  • Виправлено фіктивне спрацювання fully-qualified-moc-types для модифікаторів const загальних аргументів
  • Притлумлено фіктивні спрацювання попередження non-pod-global-static для ініціалізації модуля QML
  • Виправлено фіктивне спрацювання function-args-by-value, яке може спричинити помилку компіляції
  • у конструкторах копіювання, операторах призначення та перевірках рівності
  • Виправлено фіктивне спрацювання для `Q_EMIT(someSignal())`
1.12 2024-06-30

У цьому випуску додано такі можливості:

  • Нові перевірки:
  • qt-keyword-emit
  • sanitize-inline-keyword
1.11 2022-01-21

This release adds the following features:

  • New Checks:
  • use-arrow-operator-instead-of-data
  • use-static-qregularexpression
  • unexpected-flag-enumerator-value
  • Removed inefficient-qlist check (Fixed in Qt6)
1.10 2021-07-20

This release fixes the following bugs:

  • Requires C++17
  • Bugfixes:
  • Fixed a -Wclazy-lambda-in-connect false-positive
  • Fixed crash in copyable-polymorphic when PCH was enabled
1.9 2021-01-10

This release fixes the following bugs:

  • Fixed clazy slowdown introduced in 1.8. I can be up to 4x faster now.
  • range-loop was split in range-loop-detach and range-loop-reference
  • Fixed -Wclazy-connect-non-signal false positives
1.8 2020-11-22

This release adds the following features:

  • New Checks:
  • qt6-qhash-signature
  • qt6-header-fixes
  • qt6-deprecated-api-fixes
  • use-chrono-in-qtimer
  • fixit for missing-qobject-macro
1.7 2020-06-29

This release adds the following features:

  • New Checks:
  • overloaded signal
  • invalid JNI signatures
  • qstring-comparison-to-implicit-char
  • qt6-qlatin1string-to-u
  • heap-allocated-small-trivial-type: less false-positives

This release fixes the following bugs:

  • connect-non-signal: Fix case where it didn't find the pmf
  • qstring-arg warns when using QLatin1String::arg(int), as it casts to QChar

Building clazy itself is 30% faster

1.6 2019-10-12

This release adds the following features:

  • New Checks:
  • heap-allocated-small-trivial-type
  • signal-with-return-value
  • qproperty-type-mismatch, contributed by Jean-Michaël Celerier

Removed level3. Moved all level3 checks to manual level. Doesn't make sense to enable all of them.

Each one must be carefully considered.

Minimum LLVM was bumped to 5.0

Clazy no longer rewrites files directly, to avoid races when parallel invocations change the same header.

Clazy now exports a yaml file with the replacements, to be applied with clang-apply-replacements.

The same way other clang tooling does it.

The way to enable code rewrite is now: -Xclang -plugin-arg-clazy -Xclang export-fixes for clang

or -export-fixes=somefile.yaml for clazy-standalone

All other fixit arguments and fixit env variables were removed

Thanks to Christian Gagneraud for contributing the fixit yaml exporter!

This release fixes the following bugs:

  • Fixed regressions with LLVM 9.0
  • Fixit infrastructure was overhauled
1.5 2019-01-31

This release adds the following features:

  • New Checks:
  • ifndef-define-typo
  • lowercase-qml-type-name
  • qrequiredresult-candidates
  • New Fixits:
  • range-loop now supports adding missing refs or const-ref
  • range-loop now supports adding qAsConst()
  • function-args-by-ref now adding missing refs or const-ref (experimental)
  • Introduced CLAZY_FIXIT_SUFFIX env variable

Removed support for the obscure -DCLAZY_BUILD_UTILS_LIB to simplify the CMakeLists.txt

Renamed the clazy plugin from ClangLazy.so to ClazyPlugin.so

fully-qualified-moc-types now warns for slot/invokable return values too. They need to be fully qualified for QML.

This release fixes the following bug:

  • Fixed a crash (clang assert) in raw-environment-function
1.4 2018-09-23

This release adds the following features:

  • New Checks:
  • 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 now also warns for lambdas returning QStringBuilder

performance optimizations

Added -header-filter=<regex> option to clazy-standalone. Only headers matching the regexp will

have warnings, besides the .cpp file from the translation unit, which is never filtered out.

Added -ignore-dirs=<regex> option to clazy-standalone, and its CLAZY_IGNORE_DIRS env variable equivalent.

Added CLAZY_HEADER_FILTER env variable which adds above functionality to both clazy and clazy-standalone

unused-non-trivial-variable got unused-non-trivial-variable-no-whitelist option

unused-non-trivial-variable got user-blacklist and user-whitelist support

container-inside-loop is now a manual check instead of level2

HiddenLevel was renamed to ManualLevel

connect-3arg-lambda now warns when passing a lambda to QTimer::singleShot() or QMenu::addAction()

without a context object

old-style-connect warns for QMenu::addAction() and QMessageBox::open() too now

1.3 2017-11-26

This release adds the following features:

  • New checks:
  • 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 is now a level2 check, instead of level1. Because, people can omit Q_OBJECT intentionally.

Added -only-qt option, which will make clazy bailout early on non-Qt files. For this purpose, the definition of a Qt file is whenever -DQT_CORE_LIB is passed, which is usually the case in most build systems.

Added -qt-developer option, when building Qt with clazy it will honour specific guidelines for Qt, which are not many right now but the list will grow.

1.2 2017-07-08

This release adds the following features:

  • New checks:
  • install-event-filter
  • qcolor-from-literal
  • strict-iterators
  • connect-not-normalized

This release fixes the following bugs:

  • clazy-standalone executable. Allows to run clazy against a JSON compilation database instead of as a plugin. clang-tidy doesn't support loading external modules (https://github.com/llvm/llvm-project/issues/32086) so this is a good workaround.
  • qt-compat mode. Allows to disable Qt5 specific checks by passing -Xclang -plugin-arg-clazy -Xclang qt4-compat
  • returning-data-from-temporary now checks for temporary QByteArrays casting to char* when returned
  • returning-data-from-temporary now checks for assignment too, not only return statements
  • unused-non-trivial-variable now warns for unused QList, QVector and many more types
  • ASTMatchers based checks are now supported
  • clang 3.7 was dropped due to ASTMatchers source incompatibilities.
  • Use clazy v1.1 for clang >= 3.6 support
  • clazylib.so no longer gets built by default, only the plugin (ClangLazy.so) gets built. Pass -DCLAZY_BUILD_UTILS_LIB=ON to enable the utils library if you're developing tools using clazy's convenience functions, which you're probably not.
  • CLAZY_INSTALL_NO_HEADERS option was removed. Either install the utils library and headers or nothing at all. By default nothing is installed, except the plugin and man pages.
1.1 2017-02-20

У цьому випуску додано такі можливості:

  • Підтримка macOS і Windows
  • Нові перевірки:
  • 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
  • Виправлення для такого:
  • clang 4.0
  • Qt 5.9
  • Нотатки:
  • Пришвидшено на 60%
  • Виправлено багато хибнопозитивних спрацювань
1.0 2016-09-12
0.0.1 2015-06-10
Перший випуск