Ir al contenido

Clazy

Categorías:   Desarrollo
Captura de pantalla de Clazy
Clazy es un complemento del compilador clang que emite advertencias relacionadas con las prácticas adecuadas de Qt.
Instalar en
Linux
Este botón solo funciona con Discover y otras tiendas de aplicaciones AppStream. También puede usar el gestor de paquetes de su distribución.

Lanzamientos RSS

1.17.1 2026-03-22

Esta versión corrige el siguiente fallo:

  • fully-qualified-moc-types: Se ha corregido la regresión de falsos positivos para los tipos de puntero/referencia en genéricos.
1.16.1 2026-03-22

Lanzamiento que contiene parches para corregir los problemas de integración de QtCreator y

la compatibilidad con nuevas versiones de Qt. Este lanzamiento es compatible con las versiones 19 a 21 de LLVM.

Esta versión corrige los siguientes fallos:

  • Los diagnósticos se emiten siempre, incluso si no contienen correcciones. Esto se usa
  • para la integración en los IDE donde el proceso clazy escribe un archivo YAML que contiene
  • los mensajes, los intervalos y correcciones opcionales.
  • Ajustar la comprobación readlock-detaching para que funcione correctamente con los cambios de Qt 6.11.
1.17 2026-02-15

Esta versión corrige los siguientes fallos:

  • Se ha corregido la comprobación non-pod-static que emitía una advertencia para cada entrada de un contenedor.
  • Se ha corregido que use-arrow-operator-instead-of-data emitiera un falso positivo cuando el valor está moldeado.
  • No incluir QVariant en la lista blanca para detaching-temporary. QVariant::toString proporcionará un QString que no está desvinculado.
  • Hacer que detaching-temporary compruebe las condiciones correctamente cuando se encadenan más de dos llamadas a métodos.
  • Las correcciones para detaching-temporary/detaching-member son más fiables con intervalos de correcciones para llamadas de operador.
  • Cuando se usa QT_NAMESPACE, clazy maneja correctamente las clases de Qt que estén en dicho espacio de nombres.
  • Corrección para el método de sustitución erróneo para QMap::operator[]
  • Hacer el proyecto compatible con LLVM22. Se han corregido qhash-namespace, fully-qualified-moc-types y old-style-connect tests.
  • Ajustar la comprobación readlock-detaching para que funcione correctamente con los cambios de Qt 6.11.
  • Se ha movido qstring-ref al nivel manual porque no es compatible con Qt6.

Esta versión añade la siguiente funcionalidad:

  • Nueva comprobación compare-member-check: Comprueba si los operadores de una comparación no usan todas las variables miembro de una clase.

C++20 es necesario ahora para la compilación

Las comprobaciones de la adaptación a qt6-\* se han eliminado.

1.16 2025-09-03

Esta versión corrige los siguientes fallos:

  • unused-result-check: Se ha corregido un fallo cuando la declaración del método no se puede resolver.
  • use-chrono-in-qtimer: Se ha corregido un fallo cuando se usan cabeceras precompiladas.
  • qt6-qhash-signature: Se ha adaptado la comprobación para que use una lógica más adecuada para moldeado y se ha corregido un fallo en casos extremos.
  • Asegurar que clang21 funciona correctamente con clazy y produce el mismo número de línea/letra que antes (no concuerda con las llamadas al operador).
  • non-pod-global-static: Se ha corregido un falso positivo con Q_IMPORT_PLUGIN en Qt-6.10.

Esta versión añade las siguientes funcionalidades:

  • Clazy se puede integrar por fin en clang-tidy: ¡una orden para gobernarlos
  • a todos! Todas las comprobaciones se pueden activar usando «clazy-<checkname>». Por ejemplo:
  • `clazy-qstring-arg,clazy-qfileinfo-exists`, activando todas las comprobaciones que usan
  • `clazy-*` también activará las comprobaciones manuales. Se recomienda para que sea más granular.
  • Se puede cargar el complemento usando `-load=ClazyClangTidy.so`. Para ello, el complemento
  • debe residir en LD_LIBRARY_PATH. En caso contrario, se debe indicar una ruta absoluta.
  • isempty-vs-count proporciona ahora correcciones para todos los escenarios. Además, ahora
  • se informa de los casos cuya longitud se compara con «== 0», «< 1», «> 0» y se proponen soluciones.
  • Las comprobaciones de adaptación a qt6-\* se consideran obsoletas ahora y se eliminarán en la próxima versión de clazy.
  • Las comprobaciones detaching-temporary y detaching-member proporcionan correcciones para métodos que tienen contrapartidas «const».
  • NOLINT/NOLINTNEXTLINE/NOLINTBEGIN/NOLINTEND funcionan en clazy ahora
  • como era de esperar. Las comprobaciones individuales de clazy se pueden desactivar cuando se usa el prefijo
  • «clazy-». Por ejemplo «NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)».
1.15 2025-06-12

Esta versión corrige los siguientes fallos:

  • install-event-filter: Se ha corregido un fallo cuando no hay hijos en la profundidad indicada. Fallo: 464372.
  • fully-qualified-moc-types: Se ha corregido que «enum/enum class» no se evaluaba. Fallo: 423780.
  • Se ha corregido un fallo en qstring-comparison-to-implicit-char. Fallo: 502458.
  • Se ha corregido un fallo cuando fully-qualified-moc-types encuentra señales con expresiones semejantes a «std::bitset<int(8)>».
  • Se ha corregido un fallo en qvariant-template-instantiation

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • readlock-detaching
  • Se ha actualizado la versión mínima de Clang/LLVM a la 19.
  • `clazy-standalone --version` contiene la versión de git (salida de `git describe`) si no se trata de un commit etiquetado.
  • Se han añadido métodos ausentes para comprobaciones de desvinculación de listas y mapas temporales o miembros.
1.14 2025-04-27

Se pueden desactivar advertencias de clazy para la siguiente línea. Por ejemplo: clazy:exclude-next-line=check1,check2.

Compatibilidad con la compilación con Clang 20.

Se ha aumentado la verbosidad de algunos mensajes de advertencia.

Comprobaciones `function-args-by-value` y `function-args-by-ref`: se han añadido los nombres de la función y de los parámetros al mensaje de advertencia.

Comprobaciones `unused-non-trivial-variable` y `non-pod-global-static`: se ha añadido el nombre de la variable al mensaje de advertencia.

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • qbytearray-conversion-to-c-style
1.13 2024-12-28

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • used-qunused-variable

Esta versión corrige los siguientes fallos:

  • La comprobación qstring-arg proporciona una solución.
  • Se ha corregido que unused-non-trivial-variable no generara una advertencia cuando se usaba [[maybe_unused]].
  • Se ha corregido qstring-arg para el próximo Qt 6.9.
  • Se ha corregido el falso positivo de fully-qualified-moc-types false para modificadores «const» de los argumentos genéricos.
  • Se ha silenciado el falso positivo de la advertencia non-pod-global-static para la inicialización del módulo QML.
  • Se ha corregido el falso positivo de function-args-by-value que causaría un error de compilación
  • en constructores de copia, operadores de asignación y comprobaciones de igualdad.
  • Los falsos positivos para `Q_EMIT(unaSeñal())` se han corregido.
1.12 2024-06-30

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • qt-keyword-emit
  • sanitize-inline-keyword
1.11 2022-01-21

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • use-arrow-operator-instead-of-data
  • use-static-qregularexpression
  • unexpected-flag-enumerator-value
  • Se ha eliminado la comprobación inefficient-qlist (corregido en Qt6).
1.10 2021-07-20

Esta versión corrige los siguientes fallos:

  • Requiere C++17
  • Correcciones de fallos:
  • Se ha corregido un falso positivo de -Wclazy-lambda-in-connect.
  • Se ha corregido un fallo en copyable-polymorphic cuando se activa PCH.
1.9 2021-01-10

Esta versión corrige los siguientes fallos:

  • Se ha corregido la ralentización de clazy introducida en la versión 1.8. Ahora es hasta 4 veces más rápido.
  • range-loop se ha dividido en range-loop-detach y range-loop-reference.
  • Se han corregido los falsos positivos de -Wclazy-connect-non-signal.
1.8 2020-11-22

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • qt6-qhash-signature
  • qt6-header-fixes
  • qt6-deprecated-api-fixes
  • use-chrono-in-qtimer
  • Solución para missing-qobject-macro
1.7 2020-06-29

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • señal sobrecargada
  • Firmas JNI no válidas
  • qstring-comparison-to-implicit-char
  • qt6-qlatin1string-to-u
  • heap-allocated-small-trivial-type: menos falsos positivos

Esta versión corrige los siguientes fallos:

  • connect-non-signal: Se ha corregido el caso donde no se encuentra el pmf.
  • qstring-arg advierte cuando se usa QLatin1String::arg(int), ya que se moldea a QChar.

La compilación del propio clazy es un 30 % más rápida.

1.6 2019-10-12

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • heap-allocated-small-trivial-type
  • signal-with-return-value
  • qproperty-type-mismatch, gracias a Jean-Michaël Celerier

Se ha eliminado level3. Todas las comprobaciones level3 se han movido al nivel manual. No tenía sentido activarlas todas.

Cada una debe considerarse con cuidado.

El LLVM mínimo se ha aumentado a 5.0.

Clazy ya no reescribe archivos directamente para evitar situaciones de carrera cuando las invocaciones en paralelo cambian la misma cabecera.

Clazy exporta ahora un archivo yaml con las sustituciones, que se aplican con clang-apply-replacements.

De la misma manera que lo hacen otras herramientas de clang.

La forma de activar reescritura de código ahora es: -Xclang -plugin-arg-clazy -Xclang export-fixes para clang

o -export-fixes=somefile.yaml para clazy-standalone.

El resto de arreglos de argumentos y de variables de entorno se han eliminado.

Gracias a Christian Gagneraud por introducir el exportador yaml de correcciones.

Esta versión corrige los siguientes fallos:

  • Se han corregido regresiones con LLVM 9.0.
  • La infraestructura de correcciones se ha renovado.
1.5 2019-01-31

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • ifndef-define-typo
  • lowercase-qml-type-name
  • qrequiredresult-candidates
  • Nuevas soluciones:
  • range-loop permite ahora añadir referencias o referencias constantes ausentes.
  • range-loop es compatible ahora con qAsConst().
  • function-args-by-ref añade ahora las referencias o referencias constantes ausentes (experimental).
  • Se ha introducido la variable de entorno CLAZY_FIXIT_SUFFIX.

Se ha eliminado la compatibilidad con la opción arcana -DCLAZY_BUILD_UTILS_LIB para simplificar el CMakeLists.txt.

Se ha cambiado el nombre del complemento clazy de ClangLazy.so a ClazyPlugin.so

fully-qualified-moc-types también muestra una advertencia ahora de los valores de retorno de slot/invokable. Deben estar totalmente cualificados para QML.

Esta versión corrige el siguiente fallo:

  • Se ha corregido un fallo (clang assert) en raw-environment-function.
1.4 2018-09-23

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • connect-by-name
  • skipped-base-method
  • qstring-varargs
  • fully-qualified-moc-types
  • qt-keywords, con solución incluida
  • qhash-with-char-pointer-key
  • wrong-qevent-cast
  • static-pmf
  • raw-environment-function
  • empty-qstringliteral
  • auto-unexpected-qstringbuilder también muestra ahora advertencias para las lambdas que devuelven un QStringBuilder.

Optimizaciones de rendimiento.

Se ha añadido la opción -header-filter=<regex> a clazy-standalone. Solo las cabeceras que satisfagan la expresión regular

tendrán advertencias, además del archivo .cpp de la unidad de traducción, que nunca se filtra.

Se ha añadido la opción -ignore-dirs=<regex> a clazy-standalone, así como su variable de entorno equivalente CLAZY_IGNORE_DIRS.

Se ha añadido la variable de entorno CLAZY_HEADER_FILTER que añade la funcionalidad anterior tanto a clazy como a clazy-standalone.

unused-non-trivial-variable dispone ahora de la opción unused-non-trivial-variable-no-whitelist.

unused-non-trivial-variable dispone ahora de compatibilidad con user-blacklist y user-whitelist.

container-inside-loop es ahora una comprobación manual en lugar de una de level2.

Se ha cambiado el nombre de HiddenLevel a ManualLevel

connect-3arg-lambda muestra una advertencia ahora cuando se pasa una lambda a QTimer::singleShot() o a QMenu::addAction()

sin un objeto de contexto.

old-style-connect también muestra una advertencia ahora para QMenu::addAction() y QMessageBox::open().

1.3 2017-11-26

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • 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 es ahora una comprobación de level2 en lugar de level1, ya que se puede omitir Q_OBJECT intencionadamente.

Se ha añadido la opción -only-qt, que provocará un rescate temprano de clazy en archivos que no sean de Qt. Para ello, la definición de un archivo Qt es cuando se pasa -DQT_CORE_LIB, que suele ser el caso en muchos sistemas de compilación.

Se ha añadido la opción -qt-developer, cuando se compila Qt con clazy hará honor a las directrices específicas para Qt, que no son muchas en este momento, aunque la lista crecerá.

1.2 2017-07-08

Esta versión añade las siguientes funcionalidades:

  • Nuevas comprobaciones:
  • install-event-filter
  • qcolor-from-literal
  • strict-iterators
  • connect-not-normalized

Esta versión corrige los siguientes fallos:

  • Ejecutable clazy-standalone executable: Permite ejecutar clazy contra una base de datos JSON de compilación en lugar de como un complemento.clang-tidy no permite cargar módulos externos (https://github.com/llvm/llvm-project/issues/32086), por lo que esto supone una buena solución.
  • Modo qt-compat mode: Permitir desactivar comprobaciones específicas de Qt5 pasando -Xclang -plugin-arg-clazy -Xclang qt4-compat
  • returning-data-from-temporary comprueba ahora el moldeado de QByteArrays a char* cuando se devuelve.
  • returning-data-from-temporary ahora también comprueba asignaciones, no solo sentencias return.
  • unused-non-trivial-variable muestra ahora una advertencia para QList, QVector y otros tipos no usados.
  • Compatibilidad con las comprobaciones basadas en ASTMatchers.
  • Se ha descartado clang 3.7 debido a incompatibilidades de código con ASTMatchers.
  • Usar clazy v1.1 para compatibilidad con clang >= 3.6
  • clazylib.so ya no se compila de forma predeterminada. Solo se compila el complemento (ClangLazy.so). Se puede pasar -DCLAZY_BUILD_UTILS_LIB=ON para activar la biblioteca de utilidades si se están desarrollando herramientas que usen las funciones de conveniencia de clazy, lo que probablemente no esté haciendo.
  • Se ha eliminado la opción CLAZY_INSTALL_NO_HEADERS. Instale la biblioteca de utilidades y las cabeceras o nada en absoluto. De forma predeterminada, no se instala nada, excepto el complemento y las páginas de manual.
1.1 2017-02-20

Esta versión añade las siguientes funcionalidades:

  • Compatibilidad con macOS y Windows
  • Nuevas comprobaciones:
  • 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
  • Correcciones de fallos:
  • clang 4.0
  • Qt 5.9
  • Notas:
  • Mejora el rendimiento un 60 %
  • Se han corregido muchos falsos positivos
1.0 2016-09-12
0.0.1 2015-06-10
Primera versión