Acabei de experimentar a implementação de tabstops elásticos do jEdit, que funciona surpreendentemente bem com as linguagens de programação com as quais estou familiarizado (principalmente HTML / XML e linguagens C). No entanto, com o código Python, aqui está como ele é renderizado (espaços usados no lugar de guias para ilustrar como as coisas se alinham):
def foo(x):
'''<1 tab before the docstring.
No tab <tab
No tab <tab
<tab <another tab
<tab <another tab
<tab'''
if 1 or 2: #<Tab before this comment
yield True
Para uma linguagem como Python que se baseia no espaçamento, isso é um fator decisivo, a menos que você desative a funcionalidade fornecida pelas tabelas elásticas. Editores como Vim e Emacs simplificam a desabilitação da maioria dos tipos de funcionalidade, se você souber o nome da opção e como desabilitá-la, mas seria necessário desabilitar essa funcionalidade para códigos como o descrito acima.
Dito isto, é ótimo para x86 ASM, C, C ++, Go, XML, HTML e outros que não dependem tanto do espaço em branco:
import (
"fmt" // We love formatting functions.
"io" // Because I/O is useful.
"os" // Can't open a file without os.Open!
)
type Foo struct {
Field1 int // This is properly aligned
ReallyLongField2 string // with this.
privateField io.Reader // Elastic tabstops are great for Go.
}
Eu direi que dialetos Lisp como Scheme têm suas próprias convenções que também fariam tabstops elásticos renderizar código "feio". Se eu alterar minhas configurações de tabstop para corresponder à convenção de 2 colunas e inserir tabstops em locais incomuns (entre uma função e seus argumentos):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs. o mais legível:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
É verdade que este não é tão ruim quanto o exemplo do Python, mas definitivamente reduz a legibilidade do código. Embora eu aprecie muito a funcionalidade ao codificar algo como C # ou C ++, eu abomino a funcionalidade ao codificar em uma linguagem como Python ou Scheme, onde o espaço em branco é funcional e / ou visualmente útil. Tabstops elásticos foram criados especificamente para serem úteis sem a necessidade de um utilitário de indentação separado, mas claramente não se destina a todas as linguagens de programação.