Passa al contenuto

Clazy

Categorie:   Sviluppo
Schermata di Clazy
Clazy è un'estensione per il compilatore clang che emette avvisi relativi alle migliori pratiche per Qt
Installa su
Linux
Questo pulsante funziona solo con Discover e altri store di applicazioni AppStream. Puoi anche utilizzare il tuo gestore di pacchetti della tua distribuzione.

Rilasci RSS

1.17.1 2026-03-22

This release fixes the following bug:

  • fully-qualified-moc-types: Fix false positive regression for pointer/reference types in generics.
1.16.1 2026-03-22

This is a patch release to fix QtCreator integration issues and

compatibility with new Qt versions. This release supports LLVM versions 19 to 21.

This release fixes the following bugs:

  • Diagnostics are always emitted even if they contain no fixit. This is used
  • for integration in IDEs where the clazy process writes a YAML file containing
  • the messages, ranges and optionally fixits
  • Adjust readlock-detaching check to work properly with Qt 6.11 changes
1.17 2026-02-15

Questa versione corregge i seguenti bug:

  • Corregge il controllo non-pod-static che emette un avviso per ogni voce di un container
  • Corregge l'emissione di falsi positivi da parte di use-arrow-operator-instead-of-data quando il valore viene convertito
  • Non aggiunge QVariant alla lista bianca per detaching-temporary. QVariant::toString fornirà una QString che non è distaccata
  • detaching-temporary controlla correttamente le condizioni quando sono concatenate più di due chiamate di metodo
  • I fixit per detaching-temporary/detaching-member sono più affidabili con intervalli di fixit per le chiamate dell'operatore
  • Quando si utilizza QT_NAMESPACE, clazy gestisce correttamente le classi Qt che si trovano in questo specifico spazio dei nomi
  • Corregge il metodo di sostituzione errato per QMap::operator[]
  • Rende il progetto compilabile con LLVM22. I test qhash-namespace, fully-qualified-moc-types e old-style-connect sono stati corretti
  • Regola il controllo readlock-detaching per funzionare correttamente con le modifiche di Qt 6.11
  • Sposta qstring-ref su manuallevel poiché non è compatibile con Qt6

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli: - compare-member-check: verifica se gli operatori di confronto non utilizzano tutte le variabili membro di una classe.

C++20 è ora richiesto per la compilazione

I controlli di conversione qt6-\* sono stati rimossi

1.16 2025-09-03

Questa versione corregge i seguenti bug:

  • unused-result-check: corregge l'arresto anomalo quando la dichiarazione del metodo non può essere risolta
  • use-chrono-in-qtimer: corregge l'arresto anomalo quando si utilizzano intestazioni precompilate
  • qt6-qhash-signature: adatta il controllo per utilizzare una logica più appropriata per i cast e corregge l'arresto anomalo nei casi limite
  • Assicura che clang21 funzioni correttamente con clazy e produca lo stesso numero di riga/lettera di prima (non corrisponde alle chiamate dell'operatore)
  • non-pod-global-static: corregge il falso positivo con Q_IMPORT_PLUGIN in Qt-6.10

Questa versione aggiunge le seguenti funzionalità:

  • Clazy può finalmente essere integrato in clang-tidy: un comando per governare tutto
  • Tutti i controlli possono essere abilitati usando "clazy-<checkname>". Ad esempio:
  • `clazy-qstring-arg,clazy-qfileinfo-exists`, abilitazione di tutti i controlli utilizzando
  • `clazy-*` abiliterà anche i controlli manuali. Si consiglia di essere piùgranulari.
  • L'estensione può essere caricata utilizzando `-load=ClazyClangTidy.so`, per questo, l'estensione
  • deve essere in LD_LIBRARY_PATH. In caso contrario, è possibile specificare un percorso assoluto.
  • isempty-vs-count ora fornisce fixit per tutti gli scenari. Inoltre, i casi in cui
  • la lunghezza viene confrontata utilizzando "== 0", "< 1", "> 0" ora vengono segnalati e hanno fixit.
  • qt6-\* I controlli di conversione sono ora considerati deprecati e saranno rimossi nella prossima versione di clazy
  • i controlli detaching-temporary e detaching-member forniscono fixit per i metodi che hanno controparti costanti
  • NOLINT/NOLINTNEXTLINE/NOLINBEGIN/NOLINTEND ora funzionano tutti in Clazy come
  • previsto. I controlli individuali di Clazy possono essere disabilitati quando si utilizza un prefisso
  • «clazy-». Ad esempio "NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)"
1.15 2025-06-12

Questa versione corregge i seguenti bug:

  • install-event-filter: corregge l'arresto anomalo quando non c'è alcun elemento figlio alla profondità specificata.BUG: 464372
  • fully-qualified-moc-types: corregge enum/classe enum non valutata. BUG: 423780
  • Corretto l'arresto anomalo in qstring-comparison-to-implicit-char. BUG: 502458
  • Corretto l'arresto anomalo quando fully-qualified-moc-types incontra segnali con espressioni come "std::bitset<int(8)>"
  • Corretto l'arresto anomalo in qvariant-template-instantiation

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • readlock-detaching
  • Aggiorna il Clang/LLVM minimo a 19
  • `clazy-standalone --version` contiene la versione git (output di `gitdescribe`) se non è un commit con tag
  • Aggiunti metodi mancanti ai controlli per il distacco di elenchi o mappe temporanei/membri
1.14 2025-04-27

Gli avvisi di Clazy per la seguente riga possono essere disabilitati, ad esempio: clazy:exclude-next-line=check1,check2

Supporto per la compilazione con Clang 20

aumenta la verbosità di alcuni messaggi di avviso

Controlla `function-args-by-value` e `function-args-by-ref`: aggiunge il nome della funzione e il nome del parametro al messaggio di avviso

controlla `unused-non-trivial-variable` e `non-pod-global-static`: aggiunge il nome della variabile al messaggio di avviso

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • qbytearray-conversion-to-c-style
1.13 2024-12-28

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • used-qunused-variable

Questa versione corregge i seguenti bug:

  • Il controllo qstring-arg fornisce un fixit
  • Corretto unused-non-trivial-variable che non avvisa quando è impostato [[maybe_unused]]
  • Corretto qstring-arg per il prossimo rilascio di Qt 6.9
  • Corretto il falso positivo fully-qualified-moc-types per i modificatori const degli argomenti generici
  • Disattiva l'avviso di falso positivo non-pod-global-static per l'inizializzazione del modulo QML
  • Corregge il falso positivo function-args-by-value che causava un errore di compilazione
  • nei costruttori di copia, negli operatori di assegnazione e nei controlli di uguaglianza
  • I falsi positivi per `Q_EMIT(someSignal())` sono stati ora corretti
1.12 2024-06-30

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • qt-keyword-emit
  • sanitize-inline-keyword
1.11 2022-01-21

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • use-arrow-operator-instead-of-data
  • use-static-qregularexpression
  • unexpected-flag-enumerator-value
  • Rimosso il controllo inefficient-qlist (corretto in Qt6)
1.10 2021-07-20

Questa versione corregge i seguenti bug:

  • Richiede C++17
  • Correzioni di errori:
  • Corretto un falso positivo -Wclazy-lambda-in-connect
  • Corretto l'arresto anomalo in copyable-polymorphic quando PCH è abilitato
1.9 2021-01-10

Questa versione corregge i seguenti bug:

  • Corretto il problema del rallentamento introdotto nella versione 1.8. Ora è fino a 4 volte più veloce.
  • range-loop è stato diviso in range-loop-detach e range-loop-reference
  • Corretti i falsi positivi -Wclazy-connect-non-signal
1.8 2020-11-22

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • qt6-qhash-signature
  • qt6-header-fixes
  • qt6-deprecated-api-fixes
  • use-chrono-in-qtimer
  • fixit per missing-qobject-macro
1.7 2020-06-29

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • segnale sovraccarico
  • firme JNI non valide
  • qstring-comparison-to-implicit-char
  • qt6-qlatin1string-to-u
  • heap-allocated-small-trivial-type: meno falsi positivi

Questa versione corregge i seguenti bug:

  • connect-non-signal: corretto il caso in cui non veniva trovato il pmf
  • qstring-arg avvisa quando si utilizza QLatin1String::arg(int), poiché esegue il cast in QChar

La compilazione di Clazy è più veloce del 30%

1.6 2019-10-12

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • heap-allocated-small-trivial-type
  • signal-with-return-value
  • qproperty-type-mismatch, contributo di Jean-Michaël Celerier

Rimosso il livello 3. Spostati tutti i controlli del livello 3 al livello manuale. Non ha senso abilitarli tutti.

Ciascuno di essi deve essere attentamente considerato.

La versione minima di LLVM è stata portata a 5.0

Clazy non riscrive più i file direttamente, per evitare conflitti quando le invocazioni parallele modificano la stessa intestazione.

Clazy ora esporta un file yaml con le sostituzioni, da applicare con clang-apply-replacements.

Nello stesso modo in cui lo fanno gli altri strumenti clang.

Il modo per abilitare la riscrittura del codice è ora: -Xclang -plugin-arg-clazy -Xclang export-fixes per clang

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

Tutti gli altri argomenti fixit e le variabili di ambiente fixit sono stati rimossi

Grazie a Christian Gagneraud per aver contribuito con l'esportatore yaml fixit!

Questa versione corregge i seguenti bug:

  • Regressioni corrette con LLVM 9.0
  • L'infrastruttura Fixit è stata revisionata
1.5 2019-01-31

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • ifndef-define-typo
  • lowercase-qml-type-name
  • qrequiredresult-candidates
  • Nuovi fixit:
  • range-loop ora supporta l'aggiunta di riferimenti mancanti o const-ref
  • range-loop ora supporta l'aggiunta di qAsConst()
  • function-args-by-ref ora aggiunge i riferimenti mancanti o const-ref (sperimentale)
  • Introdotta la variabile di ambiente CLAZY_FIXIT_SUFFIX

Rimosso il supporto per l'oscuro -DCLAZY_BUILD_UTILS_LIB per semplificare CMakeLists.txt

Rinominata l'estensione Clazy da ClangLazy.so a ClazyPlugin.so

fully-qualified-moc-types ora avvisa anche per i valori di ritorno slot/invokable. Devono essere completamente qualificati per QML.

Questa versione corregge il seguente bug:

  • Risolto un arresto anomalo (clang assert) in raw-environment-function
1.4 2018-09-23

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • connect-by-name
  • skipped-base-method
  • qstring-varargs
  • fully-qualified-moc-types
  • qt-keywords, con fixit incluso
  • qhash-with-char-pointer-key
  • wrong-qevent-cast
  • static-pmf
  • raw-environment-function
  • empty-qstringliteral
  • auto-unexpected-qstringbuilder ora avvisa anche in caso di restituzione di lambda QStringBuilder

ottimizzazioni delle prestazioni

Aggiunta l'opzione -header-filter=<regex> a clazy-standalone. Solo le intestazioni corrispondenti all'espressione regolare

conterranno avvisi, oltre al file .cpp dell'unità di traduzione, che non viene mai filtrato.

Aggiunta l'opzione -ignore-dirs=<regex> a clazy-standalone e la sua equivalente variabile di ambiente CLAZY_IGNORE_DIRS.

Aggiunta la variabile di ambiente CLAZY_HEADER_FILTER che aggiunge la funzionalità di cui sopra sia a clazy che a clazy-standalone

opzione unused-non-trivial-variable got unused-non-trivial-variable-no-whitelist

unused-non-trivial-variable ha ottenuto il supporto per user-blacklist e user-whitelist

container-inside-loop è ora un controllo manuale invece di level2

HiddenLevel è stato rinominato in ManualLevel

connect-3arg-lambda ora avvisa quando si passa una lambda a QTimer::singleShot() o QMenu::addAction()

senza un oggetto di contesto

old-style-connect ora avvisa anche per QMenu::addAction() e QMessageBox::open()

1.3 2017-11-26

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • 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 è ora un controllo di livello 2, anziché di livello 1. Perché è possibile omettere Q_OBJECT intenzionalmente.

Aggiunta l'opzione -only-qt, che renderà più rapido il bailout di Clazy sui file non-Qt. A questo scopo, la definizione di un file Qt è ogni volta che viene passato -DQT_CORE_LIB, il che è solitamente il caso nella maggior parte dei sistemi di compilazione.

Aggiunta l'opzione -qt-developer: quando si compila Qt con Clazy, saranno rispettate le linee guida specifiche per Qt, che al momento non sono molte, ma l'elenco crescerà.

1.2 2017-07-08

Questa versione aggiunge le seguenti funzionalità:

  • Nuovi controlli:
  • install-event-filter
  • qcolor-from-literal
  • strict-iterators
  • connect-not-normalized

Questa versione corregge i seguenti bug:

  • Eseguibile clazy-standalone. Permette di eseguire clazy su un database di compilazione JSON anziché come estensione. clang-tidy non supporta il caricamento di moduli esterni (https://github.com/llvm/llvm-project/issues/32086), quindi questa è una buona soluzione alternativa.
  • Modalità qt-compat. Consente di disabilitare i controlli specifici di Qt5 passando -Xclang -plugin-arg-clazy -Xclang qt4-compat
  • returning-data-from-temporary ora controlla il cast temporaneo di QByteArrays in char* quando restituito
  • returning-data-from-temporary ora controlla anche l'assegnazione, non solo le istruzioni return
  • unused-non-trivial-variable ora avvisa per QList, QVector e molti altri tipi non utilizzati
  • Ora sono supportati i controlli basati su ASTMatcher
  • clang 3.7 è stato abbandonato a causa di incompatibilità con il codice sorgente di ASTMatcher.
  • Utilizzo di clazy v1.1 per il supporto clang >= 3.6
  • clazylib.so non viene più compilato in modo predefinito, viene compilata solo l'estensione (ClangLazy.so). Passa -DCLAZY_BUILD_UTILS_LIB=ON per abilitare la libreria utils se stai sviluppando strumenti utilizzando le funzioni di utilità di clazy, cosa che probabilmente non stai facendo.
  • L'opzione CLAZY_INSTALL_NO_HEADERS è stata rimossa. Installa la libreria utils e gli header oppure non installare nulla. Per impostazione predefinita, non viene installato nulla, tranne l'estensione e le pagine man.
1.1 2017-02-20

Questa versione aggiunge le seguenti funzionalità:

  • Supporto macOS e Windows
  • Nuovi controlli:
  • 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
  • Correzioni per:
  • clang 4.0
  • Qt 5.9
  • Note:
  • Miglioramento delle prestazioni del 60%
  • Risolti molti falsi positivi
1.0 2016-09-12
0.0.1 2015-06-10
Primo rilascio