
Em um dos artigos aqui do blog nós publicamos sobre o clang-format, hoje vamos conhecer outra ferramenta da coleção de aplicativos do Clang/LLVM: clang-tidy.
Clang-Tidy é um linter para C++. Sua finalidade é fornecer uma estrutura extensível para diagnosticar e corrigir erros típicos de programação, como violações de estilo, uso indevido de interface ou bugs que podem ser deduzidos por meio de análise estática.
Para instalar o clang-tidy basta usar os mesmos procedimentos descritos no artigo do clang-format.
A maneira mais simples de verificar seu código com clang-tidy é: suponhamos que você possui o código abaixo que imprime um ponteiro em vez da referência ou o dado propriamente dito:
main.cpp
#include <iostream>
int main(){
const char* str {};
std::cout << *str << '\n';
}Mesmo que você compile com os devidos parâmetros do seu compilador para detectar falhas não conseguirá detectar o
warning.
Usando o comando abaixo com clang-tidy você poderá detectar:
clang-tidy main.cpp -- -Imy_project/include -DMY_DEFINES ...Vai aparecer a saída:
1 warning generated.
main.cpp:5:16: warning: Dereference of null pointer (loaded from variable 'str') [clang-analyzer-core.NullDereference]
std::cout << *str << '\n';
^~~~
main.cpp:4:3: note: 'str' initialized to a null pointer value
const char* str {};
^~~~~~~~~~~~~~~
main.cpp:5:16: note: Dereference of null pointer (loaded from variable 'str')
std::cout << *str << '\n';
^~~~clang-tidy tem suas próprias verificações e também pode executar verificações do Clang Static Analyzer. Cada verificação tem um nome e as verificações a serem executadas podem ser escolhidas usando a opção -checks=, que especifica uma lista separada por vírgulas e -, por exemplo:
clang-tidy main.cpp -checks=-*,clang-analyzer-*,-clang-analyzer-cplusplus*Esse comando desabilitará todas as verificações padrão (
-*) e habilitará todasclang-analyzer-*excetoclang-analyzer-cplusplus*.
Em resumo, é uma ferramenta útil e utilizada como padrão na maioria das configurações para LSP.
Para mais informações use clang-tidy --help e leia a documentação oficial.
clang-tidy: