Acabo de probar la implementación de tabstops elásticas de jEdit, que funciona sorprendentemente bien con los lenguajes de programación con los que estoy familiarizado (principalmente HTML / XML y lenguajes tipo C). Sin embargo, con el código Python, aquí se muestra cómo 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, este es un factor decisivo a menos que deshabilites la funcionalidad proporcionada por tabstops elásticos. Editores como Vim y Emacs hacen que la desactivación de la mayoría de los tipos de funcionalidad sea simple si conoce el nombre de la opción y cómo deshabilitarla, pero esta funcionalidad debería estar deshabilitada para códigos como el anterior.
Dicho esto, es genial 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 Lisp como Scheme tienen sus propias convenciones que también harían que las tabulaciones elásticas produzcan código "feo". Si cambio mi configuración de tabulación para coincidir con la convención de 2 columnas e inserto tabulaciones en lugares inusuales (entre una función y sus argumentos):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs. el más legible:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
Por supuesto, este no es tan malo como el ejemplo de Python, pero definitivamente reduce la legibilidad del código. Si bien disfruto mucho de 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 tabulaciones elásticas fueron creadas específicamente para ser útiles sin requerir una utilidad de sangrado separada, pero claramente no está diseñada para todos los lenguajes de programación.