Clazy
Категорії:
Випуски 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%
- Виправлено багато хибнопозитивних спрацювань