Je viens de tester l'implémentation par des tablettes élastiques de jEdit, qui fonctionne étonnamment bien avec les langages de programmation avec lesquels je suis familier (principalement les langages HTML / XML et les langages de type C). Avec le code Python, voici comment il a été rendu (des espaces utilisés à la place des tabulations pour illustrer l’alignement des choses):
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
Pour un langage tel que Python reposant sur l'espacement, il s'agit d'un facteur décisif, à moins que vous ne désactiviez la fonctionnalité fournie par les tabstops élastiques. Des éditeurs tels que Vim et Emacs simplifient la désactivation de la plupart des fonctionnalités si vous connaissez le nom de l'option et son désactivation, mais cette fonctionnalité doit être désactivée pour le code comme ci-dessus.
Cela dit, c’est génial pour les systèmes ASM x86, C, C ++, Go, XML, HTML et autres qui ne dépendent pas tellement des espaces:
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.
}
Je dirai que les dialectes Lisp tels que Scheme ont leurs propres conventions qui feraient aussi en sorte que les tabstops élastiques rendent le code "moche". Si je modifie mes paramètres de tabulation pour qu'ils correspondent à la convention de 2 colonnes et que j'insère des tabulations à des emplacements inhabituels (entre une fonction et ses arguments):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs le plus lisible:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
Certes, celui-ci n'est pas aussi grave que l'exemple Python, mais il réduit nettement la lisibilité du code. Bien que j'apprécie beaucoup la fonctionnalité lors du codage en C # ou C ++, je déteste cette fonctionnalité dans un langage comme Python ou Scheme où les espaces sont fonctionnels et / ou visuellement utiles. Les tabstops élastiques ont été créés spécifiquement pour être utiles sans nécessiter un utilitaire d'indentation séparé, mais ils ne sont évidemment pas destinés à tous les langages de programmation.