Ir para o conteúdo

Clazy

Categorias:   Desenvolvimento
Capturas de tela de Clazy
O Clazy é um plugin do compilador Clang que emite avisos relacionados às melhores práticas do Qt
Instale no
Linux
Este botão funciona somente no Discover e outras lojas de aplicativos AppStream. Você também pode usar o gerenciador de pacotes de sua distribuição.

Versões 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

Esta versão corrige os seguintes bugs:

  • unused-result-check: Corrigida a falha que ocorre quando a declaração do método não pode ser resolvida
  • use-chrono-in-qtimer: Corrigido o problema que causava o fechamento inesperado ao usar cabeçalhos pré-compilados
  • qt6-qhash-signature: Adapta a verificação para usar uma lógica mais adequada para conversões de tipo e corrige o travamento em casos extremos
  • Certifica-se de que o clang21 funcione corretamente com o clazy e produza o mesmo número de linha/letra de antes (incompatibilidades com chamadas da operadora).
  • non-pod-global-static: Corrigido falso positivo com Q_IMPORT_PLUGIN no Qt-6.10

Esta versão adiciona as seguintes funcionalidades:

  • O Clazy finalmente pode ser integrado ao clang-tidy - um comando para governar
  • todos! Todas as verificações podem ser ativadas usando "clazy-<nome_da_verificação>". Por exemplo:
  • `clazy-qstring-arg,clazy-qfileinfo-exists`, habilitando todas as verificações usando
  • `clazy-*` também permite verificações manuais. Recomenda-se maior granularidade.
  • O plugin pode ser carregado usando `-load=ClazyClangTidy.so`, para isso, o plugin
  • deve estar no LD_LIBRARY_PATH. Caso contrário, um caminho absoluto pode ser especificado.
  • isempty-vs-count agora oferece correções para todos os cenários. Além disso, casos em que
  • o comprimento é comparado usando "== 0", "< 1", "> 0" agora são relatados e possuem correções.
  • As verificações de portabilidade do qt6-\* agora são consideradas obsoletas e serão removidas na próxima versão do clazy
  • As verificações detaching-temporary e detaching-member fornecem correções para métodos que possuem contrapartes constantes.
  • NOLINT/NOLINTNEXTLINE/NOLINTBEGIN/NOLINTEND funciona agora no clazy como
  • esperado. As verificações individuais de loucura podem ser desativadas ao usar um "clazy-"
  • prefixo. Por exemplo "NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)"
1.15 2025-06-12

Esta versão corrige os seguintes bugs:

  • install-event-filter: Corrigido o erro que causava o fechamento inesperado do sistema quando não havia nenhum filho na profundidade especificada. BUG: 464372
  • fully-qualified-moc-types: Corrigido o problema em que enum/classe enum não estava sendo avaliado. BUG: 423780
  • Corrigido o erro que causava falha em qstring-comparison-to-implicit-char. BUG: 502458
  • Corrigido o erro que ocorria quando tipos moc totalmente qualificados encontravam sinais com expressões como "std::bitset<int(8)>"
  • Corrigido o problema que causava falha em qvariant-template-instantiation

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • readlock-detaching
  • Atualizado o Clang/LLVM mínimo para 19
  • `clazy-standalone --version` contém a versão do git (saída de `git describe`) se não for um commit com tag.
  • Adicionadas as verificações de métodos ausentes para desanexar listas temporárias/de membros ou mapas
1.14 2025-04-27

É possível desativar os avisos do Clazy para a linha seguinte, por exemplo: clazy:exclude-next-line=check1,check2

Suporte para compilação com Clang 20

aumento do nível de detalhamento de algumas mensagens de aviso

verifica `function-args-by-value` e `function-args-by-ref`: adiciona o nome da função e o nome do parâmetro à mensagem de aviso

verifica `unused-non-trivial-variable` e `non-pod-global-static`: adiciona o nome da variável à mensagem de aviso

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • qbytearray-conversion-to-c-style
1.13 2024-12-28

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • used-qunused-variable

Esta versão corrige os seguintes bugs:

  • verificação qstring-arg fornece uma correção
  • Corrigido o comportamento de variável não trivial não utilizada para não gerar aviso quando [[maybe_unused]] for definida
  • Correção do argumento qstring para a próxima versão do Qt 6.9
  • Corrigido falso positivo de tipos moc totalmente qualificados para modificadores constantes de argumentos genéricos
  • Silenciar aviso falso positivo de non-pod-global-static para a inicialização do módulo QML
  • Correção de falso positivo em argumentos de função por valor que causava erro de compilação
  • em construtores de cópia, operadores de atribuição e verificações de igualdade
  • Os falsos positivos para `Q_EMIT(someSignal())` foram corrigidos
1.12 2024-06-30

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • qt-keyword-emit
  • sanitize-inline-keyword
1.11 2022-01-21

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • use-arrow-operator-instead-of-data
  • use-static-qregularexpression
  • unexpected-flag-enumerator-value
  • Removida a verificação de lista de consultas ineficiente (corrigido no Qt6)
1.10 2021-07-20

Esta versão corrige os seguintes bugs:

  • Requer C++17
  • Correções de bugs:
  • Corrigido um falso positivo -Wclazy-lambda-in-connect
  • Corrigido o problema que causava o erro em copyable-polymorphic quando o PCH estava ativado
1.9 2021-01-10

Esta versão corrige os seguintes bugs:

  • Corrigido o problema de lentidão extrema introduzido na versão 1.8. Agora é até 4 vezes mais rápido.
  • range-loop foi dividido em range-loop-detach e range-loop-reference
  • Corrigido falsos positivos do -Wclazy-connect-non-signal
1.8 2020-11-22

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • qt6-qhash-signature
  • qt6-header-fixes
  • qt6-deprecated-api-fixes
  • use-chrono-in-qtimer
  • correção para missing-qobject-macro
1.7 2020-06-29

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • sinal sobrecarregado
  • assinaturas JNI inválidas
  • qstring-comparison-to-implicit-char
  • qt6-qlatin1string-to-u
  • heap-allocated-small-trivial-type: menos falsos positivos

Esta versão corrige os seguintes bugs:

  • connect-non-signal: Corrigido o caso em que o arquivo pmf não era encontrado
  • qstring-arg emite um aviso ao usar QLatin1String::arg(int), pois ele realiza um cast para QChar

Compilar o próprio clazy é 30% mais rápido

1.6 2019-10-12

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • heap-allocated-small-trivial-type
  • signal-with-return-value
  • qproperty-type-mismatch, contribuição de Jean-Michaël Celerier

Nível 3 removido. Todas as verificações de nível 3 foram movidas para o nível manual. Não faz sentido habilitá-las todas.

Cada uma delas deve ser cuidadosamente analisada.

A versão mínima do LLVM foi aumentada para 5.0

O clazy não reescreve mais arquivos diretamente, para evitar condições de corrida quando invocações paralelas alteram o mesmo cabeçalho.

O clazy agora exporta um arquivo YAML com as substituições, que devem ser aplicadas com o clang-apply-replacements.

Da mesma forma que outras ferramentas do clang fazem.

A forma de habilitar a reescrita de código agora é: -Xclang -plugin-arg-clazy -Xclang export-fixes para clang

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

Todos os outros argumentos do fixit e variáveis ​​de ambiente do fixit foram removidos

Agradecemos a Christian Gagneraud por sua contribuição com o exportador fixit yaml!

Esta versão corrige os seguintes bugs:

  • Corrigidas regressões com o LLVM 9.0
  • A infraestrutura do fixit foi reformulada
1.5 2019-01-31

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • ifndef-define-typo
  • lowercase-qml-type-name
  • qrequiredresult-candidates
  • Novos Fixits:
  • range-loop agora suporta a adição de referências ausentes ou const-ref
  • range-loop agora suporta adicionar qAsConst()
  • function-args-by-ref agora adiciona referências ausentes ou const-ref (experimental)
  • Introduzida a variável de ambiente CLAZY_FIXIT_SUFFIX

Removemos o suporte para a obscura opção -DCLAZY_BUILD_UTILS_LIB para simplificar o arquivo CMakeLists.txt

Renomeado o plugin clazy de ClangLazy.so para ClazyPlugin.so

full-qualified-moc-types agora também emite avisos para valores de retorno de slots/invocáveis. Eles precisam ser totalmente qualificados para o QML.

Esta versão corrige o seguinte erro:

  • Corrigido um erro (clang assert) em raw-environment-function
1.4 2018-09-23

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • connect-by-name
  • skipped-base-method
  • qstring-varargs
  • fully-qualified-moc-types
  • qt-keywords, com fixit incluído
  • qhash-with-char-pointer-key
  • wrong-qevent-cast
  • static-pmf
  • raw-environment-function
  • empty-qstringliteral
  • auto-unexpected-qstringbuilder agora também emite avisos para lambdas que retornam QStringBuilder

otimizações de performance

Adicionada a opção -header-filter=<regex> ao clazy-standalone. Somente os cabeçalhos que correspondem à expressão regular

possuirão avisos, além do arquivo .cpp da unidade de tradução, que nunca é filtrado.

Adicionada a opção -ignore-dirs=<regex> ao clazy-standalone, e sua variável de ambiente equivalente CLAZY_IGNORE_DIRS.

Adicionada a variável de ambiente CLAZY_HEADER_FILTER, que adiciona a funcionalidade acima tanto ao clazy quanto ao clazy-standalone

unused-non-trivial-variable obtém a opção unused-non-trivial-variable-no-whitelist

unused-non-trivial-variable obtém suporte para user-blacklist e user-whitelist

container-inside-loop agora é uma verificação manual, em vez de nível 2

HiddenLevel foi renomeada para ManualLevel

connect-3arg-lambda agora avisa ao passar um lambda para QTimer::singleShot() ou QMenu::addAction()

sem um objeto de contexto

old-style-connect agora avisa para QMenu::addAction() e QMessageBox::open() também

1.3 2017-11-26

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • 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 agora é de nível 2, em vez de nível 1. Isso ocorre porque é possível omitir Q_OBJECT intencionalmente.

Adicionada a opção -only-qt, que fará com que o clazy interrompa o processo em arquivos que não utilizam Qt. Para isso, a definição de um arquivo Qt ocorre sempre que -DQT_CORE_LIB é passado, o que geralmente acontece na maioria dos sistemas de compilação.

Adicionada a opção -qt-developer; ao compilar o Qt com o clazy, ele respeitará as diretrizes específicas do Qt, que ainda não são muitas, mas a lista aumentará.

1.2 2017-07-08

Esta versão adiciona as seguintes funcionalidades:

  • Novas verificações:
  • install-event-filter
  • qcolor-from-literal
  • strict-iterators
  • connect-not-normalized

Esta versão corrige os seguintes bugs:

  • Executável do clazy-standalone. Permite executar o clazy em um banco de dados compilado em JSON em vez de como um plugin. O clang-tidy não suporta o carregamento de módulos externos (https://github.com/llvm/llvm-project/issues/32086), então esta é uma boa solução alternativa.
  • Modo qt-compat. Permite desativar as verificações específicas do Qt5 passando -Xclang -plugin-arg-clazy -Xclang qt4-compat
  • returning-data-from-temporary agora verifica se há conversão de QByteArrays temporários para char* ao serem retornados
  • returning-data-from-temporary agora também verifica a atribuição, e não apenas as instruções de retorno
  • unused-non-trivial-variable agora emite um aviso para variáveis ​​não utilizadas dos tipos QList, QVector e muitos outros
  • Agora há suporte para verificações baseadas em ASTMatchers
  • O clang 3.7 foi descontinuado devido a incompatibilidades com o código-fonte do ASTMatcher.
  • Suporte do uso do clazy v1.1 para clang >= 3.6
  • clazylib.so não é mais compilado por padrão; apenas o plugin (ClangLazy.so) é compilado. Passe o parâmetro -DCLAZY_BUILD_UTILS_LIB=ON para habilitar a biblioteca de utilitários caso esteja desenvolvendo ferramentas que utilizem as funções de conveniência do clazy, o que provavelmente não é o caso.
  • A opção CLAZY_INSTALL_NO_HEADERS foi removida. Ou você instala a biblioteca de utilitários e os cabeçalhos, ou nada. Por padrão, nada é instalado, exceto o plugin e as páginas de manual.
1.1 2017-02-20

Esta versão adiciona as seguintes funcionalidades:

  • Suporte a macOS e Windows
  • Novas verificações:
  • 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
  • Correções para:
  • clang 4.0
  • Qt 5.9
  • Notas:
  • Melhoria de desempenho de 60%
  • Corrigido um grande número de falsos positivos
1.0 2016-09-12
0.0.1 2015-06-10
Primeiro lançamento