Como utilizar o clang-tidy para C++

Um linter prático e eficiente!


Como utilizar o clang-tidy para C++


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.


Usabilidade

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á todas clang-analyzer-* exceto clang-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.

Algumas alternativas ao clang-tidy:


cpp cppdaily clang


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!