Salta al contingut

Clazy

Categories:   Desenvolupament
Captura de pantalla de Clazy
El Clazy és un connector del compilador Clang que emet avisos relacionats amb les millors pràctiques de les Qt.
Instal·leu al
Linux
Aquest botó només funcionarà amb el Discover i altres botigues d'aplicacions d'AppStream. També podreu utilitzar el gestor de paquets de la vostra distribució.

Llançaments 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

Aquesta versió corregeix els errors següents:

  • unused-result-check: corregeix una fallada quan no es pot resoldre la declaració del mètode
  • use-chrono-in-qtimer: corregeix una fallada en usar capçaleres precompilades
  • qt6-qhash-signature: adapta la comprovació per a utilitzar una lògica més adequada per a les conversions i corregeix una fallada en casos extrems
  • Assegura que clang21 funciona correctament amb clazy i produeix el mateix número de línia/lletra que abans (no coincideix amb crides d'operador)
  • non-pod-global-static: corregeix un fals positiu amb Q_IMPORT_PLUGIN a les Qt-6.10

Aquesta versió afegeix les característiques següents:

  • El clazy finalment es pot integrar a clang-tidy, una ordre per a governar
  • a tots ells! Totes les comprovacions es poden habilitar utilitzant «clazy-<checkname>». Per exemple:
  • `clazy-qstring-arg,clazy-qfileinfo-exists`, habilita totes les comprovacions usant
  • `clazy-*` també habilitarà les comprovacions manuals. Es recomana ser més granular.
  • El connector es pot carregar utilitzant `-load=ClazyClangTidy.so`, per a això, el connector
  • ha d'estar en el LD_LIBRARY_PATH. En cas contrari, es pot especificar un camí absolut.
  • isempty-vs-count ara proporciona correccions per a tots els escenaris. A més, casos on
  • la longitud es compara utilitzant "== 0", "< 1", "> 0" ara s'informen i tenen correccions.
  • qt6-\* L'adaptació de les comprovacions ara es consideren obsoletes i s'eliminaran en la propera versió de clazy
  • les comprovacions «detaching-temporary» i «detaching-member» proporcionen correccions per als mètodes que tenen contraparts «const»
  • NOLINT/NOLINTNEXTLINE/NOLINTBEGIN/NOLINTEND ara funcionen totes com
  • s'esperava. Les comprovacions individuals del clazy es poden desactivar quan s'utilitza un prefix
  • «clazy-». Per exemple «NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)»
1.15 2025-06-12

Aquesta versió corregeix els errors següents:

  • install-event-filter: corregeix una fallada quan no hi ha cap fill a la profunditat indicada. ERROR: 464372
  • fully-qualified-moc-types: corregeix la classe enum/enum que no s'avaluava. ERROR: 423780
  • S'ha corregit una fallada a qstring-comparison-to-implicit-char. ERROR: 502458
  • S'ha corregit una fallada quan fully-qualified-moc-types troba senyals amb expressions com «std::bitset<int(8)>»
  • S'ha corregit una fallada a qvariant-template-instantiation

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • readlock-detaching
  • Actualitza el Clang/LLVM mínim a 19
  • `clazy-standalone --version` conté la versió git (sortida de `git describe`) si no és una comissió etiquetada
  • S'han afegit mètodes que manquen per a comprovar si es desactiven llistes temporals/membres o mapes
1.14 2025-04-27

Es poden desactivar els avisos del Clazy per a la línia següent, per exemple: clazy:exclude-next-line=check1,check2

Suport per a la compilació amb el Clang 20

augmenta el nivell de detall d'alguns missatges d'avís

comprovacions `function-args-by-value` i `function-args-by-ref`: afegeix el nom de la funció i el nom del paràmetre al missatge d'avís

comprovacions `unused-non-trivial-variable` i `non-pod-global-static`: afegeix un nom de variable al missatge d'avís

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • qbytearray-conversion-to-c-style
1.13 2024-12-28

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • used-qunused-variable

Aquesta versió corregeix els errors següents:

  • la comprovació qstring-arg proporciona una correcció
  • S'ha corregit unused-non-trivial-variable per no avisar quan s'ha establert [[maybe_unused]]
  • S'ha corregit qstring-arg per a les properes Qt 6.9
  • S'han corregit els tipus falsos positius de fully-qualified-moc-types per als modificadors «const» d'arguments genèrics
  • Silencia l'avís fals positiu non-pod-global-static per a la inicialització del mòdul QML
  • Corregeix el fals positiu de function-args-by-value que provocaria un error de compilació
  • als constructors de còpies, operadors d'assignació i comprovacions d'igualtat
  • S'han corregit els falsos positius de `Q_EMIT(someSignal())`
1.12 2024-06-30

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • qt-keyword-emit
  • sanitize-inline-keyword
1.11 2022-01-21

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • use-arrow-operator-instead-of-data
  • use-static-qregularexpression
  • unexpected-flag-enumerator-value
  • S'ha eliminat la comprovació inefficient-qlist (corregida a les Qt6)
1.10 2021-07-20

Aquesta versió corregeix els errors següents:

  • Requereix C++17
  • Correcció d'errors:
  • S'ha corregit un fals positiu -Wclazy-lambda-in-connect
  • S'ha corregit una fallada a copyable-polymorphic quan s'ha activat el PCH
1.9 2021-01-10

Aquesta versió corregeix els errors següents:

  • S'ha corregit un alentiment del clazy introduït a la 1.8. Ara pot ser fins a 4x més ràpid.
  • range-loop s'ha dividit entre range-loop-detach i range-loop-reference
  • S'han corregit els falsos positius de -Wclazy-connect-non-signal
1.8 2020-11-22

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • qt6-qhash-signature
  • qt6-header-fixes
  • qt6-deprecated-api-fixes
  • use-chrono-in-qtimer
  • correcció de missing-qobject-macro
1.7 2020-06-29

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • senyal de sobrecarregat
  • signatures JNI no vàlides
  • qstring-comparison-to-implicit-char
  • qt6-qlatin1string-to-u
  • heap-allocated-small-trivial-type: menys falsos positius

Aquesta versió corregeix els errors següents:

  • connect-non-signal: corregeix el cas en què no s'ha trobat el pmf
  • qstring-arg avisa quan s'utilitza QLatin1String::arg(int), ja que s'assigna a QChar

La construcció del mateix clazy és un 30% més ràpida

1.6 2019-10-12

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • heap-allocated-small-trivial-type
  • signal-with-return-value
  • qproperty-type-mismatch, aportat per Jean-Michaël Celerier

S'ha eliminat level3. S'han mogut totes les comprovacions del level3 al nivell manual. No té sentit habilitar-les totes.

Cal tenir en compte a cadascuna.

El LLVM mínim s'ha pujat a 5.0

El Clazy ja no reescriu fitxers directament, per a evitar competicions quan les invocacions paral·leles canvien la mateixa capçalera.

EL Clazy ara exporta un fitxer yaml amb els reemplaçaments, que s'aplicarà amb clang-apply-replacements.

De la mateixa manera que ho fan altres eines del clang.

La manera d'habilitar la reescriptura de codi és ara: -Xclang -plugin-arg-clazy -Xclang export-fixes per al clang

o -export-fixes=somefile.yaml per al clazy-standalone

S'han eliminat tots els altres arguments de correccions i variables env de correccions

Gràcies a Christian Gagneraud per col·laborar amb l'exportador yaml de correccions!

Aquesta versió corregeix els errors següents:

  • S'han corregit les regressions amb LLVM 9.0
  • S'ha revisat la infraestructura de correccions
1.5 2019-01-31

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • ifndef-define-typo
  • lowercase-qml-type-name
  • qrequiredresult-candidates
  • Correccions noves:
  • range-loop ara permet afegir refs o const-ref que manquen
  • range-loop ara permet afegir qAsConst()
  • function-args-by-ref ara afegeix refs o const-ref que manquen (experimental)
  • S'ha introduït la variable «env» de CLAZY_FIXIT_SUFFIX

S'ha eliminat el suport per a l'obscur -DCLAZY_BUILD_UTILS_LIB per a simplificar els CMakeLists.txt

S'ha canviat el nom del connector clazy de ClangLazy.so a ClazyPlugin.so

fully-qualified-moc-types ara també avisa dels valors de retorn «slot/invokable». Han d'estar plenament qualificats per al QML.

Aquesta versió corregeix l'error següent:

  • S'ha corregit una fallada (asserció del clang) a raw-environment-function
1.4 2018-09-23

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • connect-by-name
  • skipped-base-method
  • qstring-varargs
  • fully-qualified-moc-types
  • qt-keywords, amb correcció inclosa
  • qhash-with-char-pointer-key
  • wrong-qevent-cast
  • static-pmf
  • raw-environment-function
  • empty-qstringliteral
  • auto-unexpected-qstringbuilder ara també avisa de les lambdas que retorna el QStringBuilder

optimitzacions de rendiment

S'ha afegit l'opció -header-filter=<regex> al clazy-standalone. Només ha faran les capçaleres que coincideixin amb l'expressió regular

tindran avisos, a banda del fitxer .cpp de la unitat de traducció, que no es filtra mai.

S'ha afegit l'opció -ignore-dirs=<regex> al clazy-standalone, i la seva variable d'entorn equivalent CLAZY_IGNORE_DIRS.

S'ha afegit la variable «env» de CLAZY_HEADER_FILTER que afegeix la funcionalitat anterior tant al clazy com al clazy-standalone

unused-non-trivial-variable s'ha incorporat a l'opció unused-non-trivial-variable-no-whitelist

unused-non-trivial-variable s'ha incorporat a la implementació d'user-blacklist i user-whitelist

container-inside-loop és ara una comprovació manual en lloc de level2

HiddenLevel s'ha canviat de nom a ManualLevel

connect-3arg-lambda ara avisa quan passa una lambda a QTimer::singleShot() o QMenu::addAction()

sense un objecte de context

old-style-connect ara també avisa de QMenu::addAction() i QMessageBox::open()

1.3 2017-11-26

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • 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 ara és una comprovació de level2, en lloc de level1. Perquè la gent pot ometre Q_OBJECT intencionadament.

S'ha afegit l'opció -only-qt, que sortirà del clazy abans d'hora en fitxers que no siguin Qt. Per a aquest propòsit, la definició d'un fitxer Qt és sempre que es passa -DQT_CORE_LIB, que sol ser el cas en la majoria dels sistemes de construcció.

S'ha afegit l'opció -qt-developer, que quan es construeixin les Qt amb clazy complirà les directrius específiques per a les Qt, que ara mateix no són moltes, però la llista creixerà.

1.2 2017-07-08

Aquesta versió afegeix les característiques següents:

  • Comprovacions noves:
  • install-event-filter
  • qcolor-from-literal
  • strict-iterators
  • connect-not-normalized

Aquesta versió corregeix els errors següents:

  • executable de clazy-standalone. Permet executar el clazy amb una base de dades de compilació JSON en lloc de com a connector. El clang-tidy no admet la càrrega de mòduls externs (https://github.com/llvm/llvm-project/issues/32086) així que aquesta és una solució bona.
  • Mode «qt-compat». Permet desactivar les comprovacions específiques de les Qt5 passant -Xclang -plugin-arg-clazy -Xclang qt4-compat
  • return-data-from-temporary ara comprova si hi ha assignacions QByteArrays temporals a char* quan retornen
  • return-data-from-temporary ara també comprova les assignacions, no només retorna les sentències
  • unused-non-trivial-variable ara avisa de QList, QVector i molts més tipus no utilitzats
  • ara s'admeten comprovacions basades en ASTMatchers
  • El clang 3.7 s'ha eliminat per les incompatibilitats del codi font d'ASTMatchers.
  • Usa el clazy v1.1 per a la implementació de clang >= 3.6
  • clazylib.so ja no es construeix de manera predeterminada, només es construeix el connector (ClangLazy.so). Passeu -DCLAZY_BUILD_UTILS_LIB=ON per a activar la biblioteca d'utilitats si esteu desenvolupant eines que fan servir les funcions d'utilitat del clazy, que probablement no.
  • S'ha eliminat l'opció CLAZY_INSTALL_NO_HEADERS. Instal·leu la biblioteca d'utilitats i les capçaleres o res en absolut. De manera predeterminada no hi ha res instal·lat, excepte les pàgines del connector i man.
1.1 2017-02-20

Aquesta versió afegeix les característiques següents:

  • Suport del macOS i el Windows
  • Comprovacions noves:
  • 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
  • Correccions a:
  • clang 4.0
  • Qt 5.9
  • Notes:
  • Millora el rendiment un 60%
  • S'han corregit molts falsos positius
1.0 2016-09-12
0.0.1 2015-06-10
Primer llançament