Tabulação, encoding e quebra de linha: conheça o EditorConfig

  dica

EditorConfig parece mais uma especificação de arquivo de configuração, que contém opções como:

Que ajudam projetos a manter isto padronizado em seus arquivos, isto tudo é feito, quando os recursos (features) do EditorConfig são implementadas em plugins para IDEs e editores de texto. Com a adoção deste projeto algumas IDEs e editores passam a suportar seus recursos nativamente.

Mas para que ele realmente serve? Abaixo alguns exemplos de utilização com Python, Makefile e C.

Python

Um exemplo é Python, se sua string é unicode

Nota: considerando Python 2.x, no 3.x todas as strings são unicode

exemplo = u'string unicode utf-8 com ~ ^ $ %'

Você precisa da notação no começo do arquivo:

# -*- coding: utf-8 -*-

E como de alguma forma fazer com que todos os desenvolvedores do projeto abram o arquivo e mantenham encoding correto (utf-8)? A resposta é:

[*.py]
charset = utf-8

Python é uma linguagem por identação e como manter a mesma identação ou garantir um estilo fixo no escopo do projeto, seguindo o guia de estilo de código definido? Simples:

[*.py]
indent_style = space
indent_size = 4

Resultando em um arquivo .editorconfig na raiz do projeto com o conteúdo:

root = true

[*.py]
charset = utf-8
indent_style = space
indent_size = 4

O root = true, indica que este é o arquivo principal e que onde ele está é a raiz do seu projeto. Podem haver outros definidos por pastas.

Makefile e C

Começamos com o exemplo mais clássico, Makefile:

[Makefile]
indent_style = tab

A tabulação nestes arquivos necessita ser em tab, com espaços ele quebra:

$ cat Makefile
all:
    echo "hello"

$ make
Makefile:2: *** missing separator.  Stop.

Quando se usa C, pode se encontrar o erro:

Warning : No new line at end of file 

Que pode ser corrigido automaticamente com a opção insert_final_newline:

[Makefile]
indent_style = tab

[*.c]
insert_final_newline = true

Históricamente, você pode entender o por que de LF, CR e CRLF, clicando aqui e aqui. Dito isto, sabemos que quebras de linhas em determinadas situações ocasionam confusões, isso pode ser resolvido utilizando a opção:

end_of_line: lf

Outras opções são:

  • lf (Unix)
  • cr (macOS)
  • crlf (Windows).

Exemplos práticos de utilização

Esses são alguns problemas ou confusões que podem ocorrer com a falta de padronização, alguns projetos sabem disso e já utilizam o EditorConfig como solução.

Posso citar 2 projetos próprios onde utilizo:

E projetos maiores:

Essa foi a ponta do iceberg, espero ter ajudado a não afundar seu navio nela.

Referências