Clazy
Категории:
Выпуски RSS
1.17 2026-02-15
This release fixes the following bugs:
- Fix non-pod-static check emitting warning for each entry of a container
- Fix use-arrow-operator-instead-of-data emitting false positive when value is casted
- Do not whitelist QVariant for detaching-temporary. QVariant::toString will provide a QString that is not detached
- detaching-temporary properly checks conditions when more than two method calls are chained
- Fixits for detaching-temporary/detaching-member are more reliable with fixit ranges for operator calls
- When using QT_NAMESPACE, clazy properly handles Qt classes being in this specific namespace
- Fix wrong replacement method for QMap::operator[]
- Make project compile with LLVM22. qhash-namespace, fully-qualified-moc-types, old-style-connect tests are fixed
- Adjust readlock-detaching check to work properly with Qt 6.11 changes
- Move qstring-ref to manuallevel since it is not compatible with Qt6
This release adds the following feature:
- New checks: - compare-member-check: Checks whether comparison operators do not use all member variables of a class.
C++20 is now required for compilation
qt6-\* porting checks are removed
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 реализованы автоматические исправления для методов, имеющих константные аналоги.
- Теперь в clazy работают все директивы NOLINT, NOLINTNEXTLINE, NOLINTBEGIN и NOLINTEND;
- ожидаемо. Отдельные проверки clazy можно отключить при использовании «clazy-»;
- Например, «NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)»;
1.15 2025-06-12
В этом выпуске исправлены следующие ошибки:
- install-event-filter: исправлено аварийное завершение при отсутствии дочернего элемента на указанной глубине. ОШИБКА: 464372;
- fully-qualified-moc-types: исправлена неверная обработка перечислений и классов перечислений. ОШИБКА: 423780
- Исправлено аварийное завершение в сравнении строки с неявным символом;
- Исправлено аварийное завершение при обработке сигналов с выражениями типа «std::bitset<int(8)>» в модуле `fully-qualified-moc-types`;
- Исправлено аварийное завершение при создании экземпляра шаблона QVariant;
В этом выпуске добавлены следующие возможности:
- Новые проверки:
- отсоединение при блокировке чтения;
- Минимальная версия 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 в стиль C;
1.13 2024-12-28
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- Проверка неиспользуемых переменных;
В этом выпуске исправлены следующие ошибки:
- Проверка 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
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- Ключевое слово «emit» в Qt;
- очистка ключевого слова inline;
1.11 2022-01-21
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- использование оператора «->» вместо метода «data»;
- использовать статические объекты QRegularExpression;
- неожиданное значение перечислителя флага;
- Удалена проверка inefficient-qlist (исправлено в Qt6);
1.10 2021-07-20
В этом выпуске исправлены следующие ошибки:
- Требуется C++17;
- Исправлены ошибки:
- Исправлено ложное срабатывание диагностики -Wclazy-lambda-in-connect.
- Исправлено аварийное завершение в copyable-polymorphic при включённом PCH;
1.9 2021-01-10
В этом выпуске исправлены следующие ошибки:
- Исправлено замедление clazy, появившееся в версии 1.8; теперь он может работать до 4 раз быстрее.
- Диагностика range-loop разделена на range-loop-detach и range-loop-reference;
- Исправлены ложные срабатывания диагностики -Wclazy-connect-non-signal;
1.8 2020-11-22
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- Сигнатура qHash для Qt6;
- Исправления заголовков Qt6;
- Исправления устаревшего API Qt6;
- использование chrono в QTimer;
- Исправление для отсутствующего макроса Q_OBJECT;
1.7 2020-06-29
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- перегруженный сигнал;
- некорректные подписи JNI;
- сравнение строки с неявным символом;
- Замена `QLatin1String` на `QString` в Qt6;
- heap-allocated-small-trivial-type: уменьшено число ложных срабатываний;
В этом выпуске исправлены следующие ошибки:
- connect-non-signal: исправлен случай, когда pmf не находился;
- Предупреждение при использовании QLatin1String::arg(int) из-за приведения к QChar;
Сборка самого clazy ускорилась на 30 %
1.6 2019-10-12
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- выделение в куче малых тривиальных типов;
- сигнал с возвращаемым значением;
- qproperty-type-mismatch, реализовано Jean-Michaël Celerier.
Удалён уровень 3. Все проверки этого уровня перенесены в ручной режим. Их одновременное включение не имеет смысла.
Каждый из них должен быть тщательно проанализирован.
Минимальная версия LLVM увеличена до 5.0
В Clazy больше не выполняется прямая перезапись файлов, чтобы избежать конфликтов при одновременном изменении одного и того же заголовка.
Теперь Clazy экспортирует файл YAML с заменой, который можно применить с помощью clang-apply-replacements.
Так же, как это делает любой другой инструментарий clang.
Теперь для включения перезаписи кода используется параметр: -Xclang -plugin-arg-clazy -Xclang export-fixes для clang
или -export-fixes=somefile.yaml для clazy-standalone
Удалены все остальные аргументы и переменные окружения fixit.
Благодарим Christian Gagneraud за вклад в создание экспорта yaml для исправлений!
В этом выпуске исправлены следующие ошибки:
- Исправлены регрессии в LLVM 9.0;
- Инфраструктура быстрого исправления была полностью переработана;
1.5 2019-01-31
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- Ошибка в директиве препроцессора #ifndef/#define.
- нижний регистр в имени типа QML;
- qrequiredresult-candidates
- Новые автоматические исправления;
- В анализаторе range-loop реализована поддержка добавления отсутствующих ссылок или константных ссылок;
- Цикл range-loop теперь поддерживает добавление qAsConst();
- проверка «function-args-by-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
В этом выпуске добавлены следующие возможности:
- Добавлены проверки:
- подключение по названию;
- пропущенный базовый метод;
- qstring-varargs;
- полная квалификация типов MOC.
- Ключевые слова Qt, с включённой функцией автоматического исправления;
- qhash с ключом-указателем на символ;
- неправильное приведение типа qevent;
- статический указатель на функцию-член;
- функция необработанного окружения;
- пустая строка QStringLiteral;
- В auto-unexpected-qstringbuilder добавлена проверка лямбда-выражений, возвращающих QStringBuilder;
Оптимизация производительности
Добавлен параметр -header-filter=<regex> для clazy-standalone. Проверяться будут только заголовки, соответствующие регулярному выражению.
имеют предупреждения, кроме файла .cpp из единицы трансляции, который никогда не исключается.
Добавлен параметр -ignore-dirs=<regex> для clazy-standalone и эквивалентная ему переменная окружения CLAZY_IGNORE_DIRS.
Добавлена переменная окружения CRAZY_HEADER_FILTER, реализующая указанную функциональность как для clazy, так и для clazy-standalone.
Для параметра «unused-non-trivial-variable» добавлена возможность «unused-non-trivial-variable-no-whitelist».
Добавлена поддержка пользовательских чёрного и белого списков для переменной unused-non-trivial-variable.
Проверка container-inside-loop теперь выполняется вручную, а не на уровне 2.
Уровень «Hidden» переименован в «Manual».
Модуль connect-3arg-lambda теперь предупреждает о передаче лямбда-выражения в QTimer::singleShot() или QMenu::addAction().
без объекта контекста
Теперь old-style-connect проверяет также QMenu::addAction() и QMessageBox::open()
1.3 2017-11-26
В этом выпуске добавлены следующие возможности:
- Новые проверки:
- Использование слотов в потоках
- lambda с тремя аргументами в connect;
- Свойство Q_PROPERTY без сигнала NOTIFY;
- виртуальный сигнал;
- переопределённый сигнал;
- Проверка пространства имён в qhash;
- Константные сигналы и слоты;
- уникальное подключение сигнала с помощью лямбда-выражения;
Проверка missing-qobject-macro перемещена с уровня 1 на уровень 2, так как Q_OBJECT может быть опущен намеренно.
Добавлен параметр «-only-qt», при котором clazy немедленно прекращает анализ файлов, не относящихся к Qt. Под файлом Qt понимается файл, для которого задан макрос «-DQT_CORE_LIB», что является стандартной практикой в большинстве систем сборки.
Добавлен параметр «-qt-developer» для сборки Qt с использованием clazy, обеспечивающий соблюдение определённых рекомендаций для Qt. На данный момент их немного, но список будет пополняться.
1.2 2017-07-08
В этом выпуске добавлены следующие возможности:
- Новые проверки:
- Установлен фильтр событий;
- Создание цвета из строкового литерала;
- строгие итераторы;
- Проверка использования функции connect() с нормализацией сигналов и слотов;
В этом выпуске исправлены следующие ошибки:
- Исполняемый файл clazy-standalone теперь позволяет запускать clazy с использованием базы данных компиляции в формате JSON вместо работы в качестве плагина; это хороший обходной способ, поскольку clang-tidy не поддерживает загрузку внешних модулей (https://github.com/llvm/llvm-project/issues/32086);
- режим совместимости с Qt5: позволяет отключить специфичные для Qt5 проверки, передав параметры -Xclang -plugin-arg-clazy -Xclang qt4-compat;
- возврат данных из временного объекта теперь проверяет приведение временных объектов QByteArray к 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 для включения сборки библиотеки утилит, если вы разрабатываете инструменты с использованием вспомогательных функций clazy, что маловероятно;
- Параметр CLAZY_INSTALL_NO_HEADERS удалён. Теперь библиотека утилит и заголовочные файлы устанавливаются либо полностью, либо не устанавливаются вовсе. По умолчанию устанавливаются только плагин и страницы руководства;
1.1 2017-02-20
В этом выпуске добавлены следующие возможности:
- Поддержка macOS и Windows;
- Новые проверки:
- Приведение типа QObject в обработчике дочерних событий;
- Конструктору не передан аргумент родительского класса;
- возврат данных из временного объекта;
- Макросы Qt;
- событие базового класса;
- подключение к несигнальному слоту;
- некорректный вызов сигнала;
- Недословный перевод;
- Исправления:
- clang 4.0;
- Qt 5.9;
- Замечания:
- Производительность увеличена на 60%.
- Исправлено множество ложных срабатываний;