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

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

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

  • install-event-filter: усунено аварійне завершення роботи, якщо немає дочірнього методу вказаної глибини. BUG: 464372
  • fully-qualified-moc-types: виправлено неможливість обробки enum/класу enum. BUG: 423780
  • Усунено аварійне завершення роботи у qstring-comparison-to-implicit-char. BUG: 502458
  • Усунено аварійне завершення роботи при виявленні у fully-qualified-moc-types сигналів за допомогою виразів подібних до «std::bitset<int(8)>»
  • Усунено аварійне завершення роботи у qvariant-template-instantiation

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

  • Нові перевірки:
  • readlock-detaching
  • Оновлено мінімальні вимоги до Clang/LLVM до 19
  • `clazy-standalone --version` містить версію git (результат виконання `git describe`), якщо це внесок без мітки
  • Додано пропущені методи до перевірок для від'єднання тимчасових списків або карт або списків чи карт учасників
1.14 2025-04-27

Можна вимкнути попередження clazy для наступного рядка, приклад: clazy:exclude-next-line=check1,check2

Підтримка компіляції з Clang 20

збільшення докладності деяких попереджень

перевірки `function-args-by-value` і `function-args-by-ref`: до повідомлення попередження додано назву функції і назву параметра

перевірки `unused-non-trivial-variable` і `non-pod-global-static`: до повідомлення попередження додано назву змінної

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

  • Нові перевірки:
  • 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

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

  • Нові перевірки:
  • use-arrow-operator-instead-of-data
  • use-static-qregularexpression
  • unexpected-flag-enumerator-value
  • Вилучено перевірку inefficient-qlist (виправлено у Qt6)
1.10 2021-07-20

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

  • Потребує C++17
  • Виправлення вад:
  • Виправлено -Wclazy-lambda-in-connect false-positive
  • Виправлено аварійне завершення роботи у copyable-polymorphic, якщо було увімкнено PCH
1.9 2021-01-10

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

  • Виправлено уповільнення clazy у версії 1.8. Пришвидшення може сягати чотирьох разів.
  • range-loop було розділено на range-loop-detach і range-loop-reference
  • Виправлено фіктивні спрацювання -Wclazy-connect-non-signal
1.8 2020-11-22

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

  • Нові перевірки:
  • qt6-qhash-signature
  • qt6-header-fixes
  • qt6-deprecated-api-fixes
  • use-chrono-in-qtimer
  • порада щодо виправлення для missing-qobject-macro
1.7 2020-06-29

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

  • Нові перевірки:
  • перевантажений сигнал
  • некоректні підписи JNI
  • qstring-comparison-to-implicit-char
  • qt6-qlatin1string-to-u
  • heap-allocated-small-trivial-type: менше фіктивних спрацювань

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

  • connect-non-signal: виправлено випадок, коли не знайдено pmf
  • qstring-arg попереджає про використання QLatin1String::arg(int), оскільки там викликається QChar

Збирання самого clazy пришвидшено на 30%

1.6 2019-10-12

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

  • Нові перевірки:
  • heap-allocated-small-trivial-type
  • signal-with-return-value
  • qproperty-type-mismatch, внесок Jean-Michaël Celerier

Вилучено level3. Усі перевірки level3 перенесено на ручний рівень. Немає сенсу вмикати їх усі.

Рішення про кожну з них слід приймати зважено.

Збільшено мінімальну версію LLVM до 5.0

Нова версія Clazy не переписує файли безпосередньо, щоб уникнути конфліктів з паралельними викликами змін того самого заголовка.

Нова версія Clazy експортує дані до файла yaml з замінами, які буде застосовано з clang-apply-replacements.

Так само поводяться інші інструменти clang.

З нової версії способом вмикання перезапису коду є: -Xclang -plugin-arg-clazy -Xclang export-fixes для clang

або -export-fixes=somefile.yaml для clazy-standalone

Усі інші аргументи підказок щодо виправлення аргументів та змінних середовища було вимкнено

Дякуємо Christian Gagneraud за внесок із засобом експортування fixit до yaml!

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

  • Виправлено регресію з LLVM 9.0
  • Переписано інфраструктуру підказок щодо виправлення
1.5 2019-01-31

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

  • Нові перевірки:
  • ifndef-define-typo
  • lowercase-qml-type-name
  • qrequiredresult-candidates
  • Нові повідомлення про виправлення:
  • У новій версії range-loop передбачено підтримку додавання пропущених ref та const-ref
  • У новій версії range-loop передбачено підтримку додавання qAsConst()
  • У новій версії function-args-by-ref передбачено підтримку додавання пропущених ref і const-ref (експеримент)
  • Впроваджено змінну середовища CLAZY_FIXIT_SUFFIX

Вилучено підтримку незрозумілого -DCLAZY_BUILD_UTILS_LIB для спрощення CMakeLists.txt

Додаток clazy перейменовано з ClangLazy.so на ClazyPlugin.so

У новій версії fully-qualified-moc-types попереджає і про повернуті значення слота/викликаної функції. Ці значення мають бути повноцінними для QML.

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

  • Усунено аварійне завершення роботи (оцінка clang) у raw-environment-function
1.4 2018-09-23

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

  • Нові перевірки:
  • connect-by-name
  • skipped-base-method
  • qstring-varargs
  • fully-qualified-moc-types
  • qt-keywords з включеними підказками щодо виправлення
  • qhash-with-char-pointer-key
  • wrong-qevent-cast
  • static-pmf
  • raw-environment-function
  • empty-qstringliteral
  • У новій версії auto-unexpected-qstringbuilder попереджає і про лямбди, що повертають QStringBuilder

оптимізації швидкодії

До clazy-standalone додано параметр -header-filter=<формальний_вираз>. Попередження буде показано лише для заголовків, що відповідають формальному виразу,

окрім файла .cpp з модуля перекладу, фільтрування якого ніколи не виконуватиметься.

До clazy-standalone додано параметр -ignore-dirs=<формальний_вираз> та його еквівалент — змінну середовища CLAZY_IGNORE_DIRS.

Додано змінну середовища CLAZY_HEADER_FILTER, яка додає наведені вище функціональні можливості до clazy і clazy-standalone

До unused-non-trivial-variable додано параметр unused-non-trivial-variable-no-whitelist

У unused-non-trivial-variable реалізовано підтримку user-blacklist і user-whitelist

У новій версії container-inside-loop передбачено перевірку вручну замість level2

HiddenLevel було перейменовано на ManualLevel

У новій версії connect-3arg-lambda попереджає про передавання лямбди до QTimer::singleShot() або QMenu::addAction()

без об'єкта контексту

У новій версії old-style-connect попереджає про QMenu::addAction() і QMessageBox::open()

1.3 2017-11-26

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

  • Нові перевірки:
  • 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 є перевіркою level2, а не level1. Через це можна навмисно пропускати Q_OBJECT.

Додано параметр -only-qt, яка забезпечить раннє clazy-вимикання для файлів, відмінних від Qt. Для цього Qt-файл визначено щоразу, коли передається -DQT_CORE_LIB, що зазвичай буває в більшості систем збирання.

Додано параметр -qt-developer, під час збирання Qt за допомогою clazy будуть враховані певні рекомендації для Qt, яких зараз небагато, але список розширюватиметься.

1.2 2017-07-08

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

  • Нові перевірки:
  • install-event-filter
  • qcolor-from-literal
  • strict-iterators
  • connect-not-normalized

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

  • Виконуваний файл clazy-standalone. Надає змогу запускати clazy на основі бази даних компіляції JSON, замість додатка. У clang-tidy не передбачено підтримки завантаження зовнішніх модулів (https://github.com/llvm/llvm-project/issues/32086), тому це гарне рішення.
  • Режим qt-compat. Надає змогу вимкнути специфічні для Qt5 перевірки шляхом передавання параметрів -Xclang -plugin-arg-clazy -Xclang qt4-compat
  • У новій версії returning-data-from-temporary перевіряє на тимчасові приведення QByteArrays до char* при поверненні даних
  • У новій версії returning-data-from-temporary перевіряє надання значень, а не лише інструкції повернення даних
  • У новій версії unused-non-trivial-variable попереджає про невикористані QList, QVector і багато інших типів
  • У новій версії передбачено підтримку перевірок на основі ASTMatchers
  • Відкинуто підтримку clang 3.7 через несумісності з початковим кодом ASTMatchers.
  • Скористайтеся clazy v1.1 для отримання підтримки clang >= 3.6
  • У новій версії типово не збирається clazylib.so, збирається лише додаток (ClangLazy.so). Передайте -DCLAZY_BUILD_UTILS_LIB=ON, щоб увімкнути бібліотеку utils, якщо ви розробляєте інструменти за допомогою зручних функцій clazy, чого ви, ймовірно, не робите.
  • Було вилучено параметр CLAZY_INSTALL_NO_HEADERS. Встановіть або бібліотеку utils та заголовки, або нічого. Типово не буде встановлено нічого, окрім додатка та сторінок довідки (man).
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
Перший випуск