Nós já publicamos um artigo que descreve detalhes do estilo de código no artigo:
Já nesse artigo vamos conhecer uma ferramenta que formata nosso código de acordo com o estilo que desejamos, trata-se do: clang-format.
ClangFormat(clang-format
) é um conjunto de ferramentas que usa LibFormat que formata seu código de várias maneiras, incluindo uma ferramenta autônoma e integrações de editor.
Para instalar o clang-format
basta possuir a coleção de ferramentas do LLVM, aqui nesse artigo há o procedimento baixando o binário e instalando, mas você também pode usar o gerenciador de pacotes do seu sistema para obter, exemplos:
# Windows
winget install -e --id LLVM.LLVM
# macOS
brew install clang-format
# Debian, Ubuntu, Mint e derivados
sudo apt install clang-format
# Fedora
sudo dnf install clang-tools-extra
# Arch
sudo pacman -S clang-format-git # AUR
# Gentoo, Funtoo e outros
emerge clang
Suponhamos que você possua esse código C++: main.cpp
:
#include <iostream>
#include <memory>
typedef struct Model {
std::string hello = "Hello";
} model;
int main(){
auto m = std::make_unique<model>();
m->hello = "World";
std::cout << m->hello << '\n';
}
Ele está formatado da maneira que eu gosto, mas se eu quisesse transforma no padrão GNU bastava rodar o seguinte comando:
clang-format -style=gnu main.cpp
A saída transforma meu código nesse estilo:
#include <iostream>
#include <memory>
typedef struct Model
{
std::string hello = "Hello";
} model;
int
main ()
{
auto m = std::make_unique<model> ();
m->hello = "World";
std::cout << m->hello << '\n';
}
Bem diferente a formatação, né?!
Se quiser salve para outro arquivo:
clang-format -style=GNU main.cpp > output.cpp
Há os estilos disponíveis: llvm
, google
, chromium
, microsoft
, webkit
e outros.
Exemplos:
clang-format -style=llvm main.cpp
clang-format -style=google main.cpp
clang-format -style=microsoft main.cpp
Você também pode salvar seu estilo preferido fazendo um dump em um arquivo de nome: .clang-format
no caminho/diretório que estiver trabalhando. Para isso rode:
Supondo que você prefere o estilo
gnu
.
clang-format -style=gnu -dump-config > .clang-format
O arquivo será similar ao conteúdo abaixo e note que é possível alterar as cofigurações de acordo como desejar:
---
Language: Cpp
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignArrayOfStructures: None
AlignConsecutiveAssignments:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
PadOperators: true
AlignConsecutiveBitFields:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
PadOperators: false
AlignConsecutiveDeclarations:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
PadOperators: false
AlignConsecutiveMacros:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
PadOperators: false
AlignEscapedNewlines: Right
...
O arquivo é bem maior, os
...
remete a isso!
Se você quiser formatar múltiplos arquivos .cpp
use wildcard:
clang-format -i *.cpp
O parâmetro
-i
modifica o arquivo.
E para modificar diversos arquivos incluindo os arquivos cabeçalho, use esse comando como exemplo:
find . -regex '.*\.\(cpp\|hpp\|cc\|c\|h\)' -exec clang-format -style=file -i {} \;
Se quiser incluir ao seu Editor de Código/IDE procure pelo nome correspondente na documentação do mesmo. No caso do Vim/Neovim use o vim-clang-format.
Para mais informações acesse o clang-format --help
e o endereço oficial do clang-format
.
clang llvm cpp linguagemc programacao