Acabo de probar la implementación de jEdit de tabstops elásticos, que funciona increíblemente bien con los lenguajes de programación con los que estoy familiarizado (principalmente HTML / XML y lenguajes similares a C). Sin embargo, con el código Python, así es como se representa (espacios utilizados en lugar de pestañas para ilustrar cómo se alinean las cosas):
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 un lenguaje como Python que se basa en el espaciado, esto es un factor decisivo a menos que desactive la funcionalidad proporcionada por tabulaciones elásticas. Los editores como Vim y Emacs simplifican la deshabilitación de la mayoría de los tipos de funcionalidad si conoce el nombre de la opción y cómo deshabilitarla, pero se requeriría deshabilitar esta funcionalidad para código como el anterior.
Dicho esto, es ideal para x86 ASM, C, C ++, Go, XML, HTML y otros que no dependen tanto del espacio en blanco:
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.
}
Diré que los dialectos de Lisp como Scheme tienen sus propias convenciones que también harían que las tabstops elásticas representen un código "feo". Si cambio la configuración de mi tabulación para que coincida con la convención de 2 columnas e inserte tabulaciones en lugares inusuales (entre una función y sus argumentos):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs. los más legibles:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
De acuerdo, este no es tan malo como el ejemplo de Python, pero definitivamente reduce la legibilidad del código. Si bien disfruto mucho la funcionalidad al codificar en algo como C # o C ++, aborrezco la funcionalidad al codificar en un lenguaje como Python o Scheme, donde el espacio en blanco es funcional y / o visualmente útil. Las pestañas elásticas se crearon específicamente para ser útiles sin requerir una utilidad de sangría separada, pero claramente no está destinado a todos los lenguajes de programación.