I just tried out jEdit's implementation of elastic tabstops, which works amazingly well with the programming languages in with which I'm familiar (primarily HTML/XML and C-like languages). With Python code, however, here is how it rendered (spaces used in place of tabs to illustrate how things align):
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
For a language like Python that relies upon spacing, this is a deal-breaker unless you disable the functionality provided by elastic tabstops. Editors like Vim and Emacs make disabling most kinds of functionality simple if you know the name of the option and how to disable it, but this functionality would be required to be disabled for code like the above.
That being said, it's great for x86 ASM, C, C++, Go, XML, HTML, and others that don't rely on whitespace so much:
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.
}
I will say that Lisp dialects such as Scheme have their own conventions that would also make elastic tabstops render "ugly" code. If I change my tabstop settings to match the convention of 2 columns and insert tabstops at unusual places (between a function and its arguments):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs. the more readable:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
Granted, this one isn't as bad as the Python example, but it definitely reduces readability of the code. While I very much enjoy the functionality when coding in something like C# or C++, I abhor the functionality when coding in a language like Python or Scheme where whitespace is functional and/or visually helpful. Elastic tabstops were created specifically to be helpful without requiring a separate indentation utility, but clearly it's not meant for all programming languages.