Editorconfig

Escopo: transversal. Aplica-se a qualquer linguagem ou stack do projeto.

Configuração base compatível com VS Code, JetBrains, Vim e qualquer editor que suporte .editorconfig. Copie para a raiz do projeto.

Note

Linguagens com convenções próprias podem sobrescrever as regras globais; veja a seção de overrides ao final.

Conceitos fundamentais

ConceitoO que é
EditorConfig (configuração de editor)Padrão multi-editor para regras de formatação por arquivo
EOF (End Of File, Fim do Arquivo)Caractere final do arquivo; convenção exige linha em branco terminal
BOM (Byte Order Mark, Marca de Ordem de Bytes)Marcador UTF-8 no início do arquivo; incompatível com várias toolchains
LF vs CRLF (Line Feed / Carriage Return + Line Feed, Fim de Linha Unix vs Windows)Separador de linhas; LF é o padrão cross-platform
SQL (Structured Query Language, Linguagem de Consulta Estruturada)Arquivos .sql herdam overrides específicos (indentação, quebra de linha)

Arquivo pronto para uso

root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.sql]
max_line_length = 120

[*.{js,ts,jsx,tsx,cjs,mjs}]
max_line_length = 80

[*.{cs,csx}]
max_line_length = 120

[*.md]
trim_trailing_whitespace = false

Regras

PropriedadeValorPor quê
indent_stylespaceRenderização consistente em qualquer editor e plataforma
indent_size2Espaço visual adequado sem deslocar código aninhado
end_of_linelfPadrão Unix: evita \r\n no histórico do Git em ambientes mistos
charsetutf-8Suporte a caracteres especiais sem BOM (Byte Order Mark, marcador de ordem de bytes)
trim_trailing_whitespacetrueElimina ruído em diffs (comparações de mudanças): whitespace (espaço em branco) invisível não deve aparecer em commits
insert_final_newlinetruePadrão POSIX: ferramentas como git diff e cat esperam newline no EOF (End of File, fim do arquivo)
max_line_length SQL / C#120SQL vertical é naturalmente longo; 80 seria restritivo demais
max_line_length JS / TS80Lê melhor em linhas curtas
trim_trailing_whitespace .mdfalseEm Markdown, dois espaços seguidos de Enter é quebra de linha intencional

Overrides por linguagem

O bloco [*] é o ponto de partida. Cada seção abaixo sobrescreve apenas o que diverge.

Se o projeto tiver uma única linguagem, mova as regras específicas direto para [*] e remova os overrides desnecessários.

Desenvolvido por @thiagocajadev · Fork baseado no repositório pmndrs/docs · Poimandres.