
[Tim]
[make Nanny a base class]
[Moshe Zadka]
Why?
Because it's an obvious application for OO design. A common base class formalizes the interface and can provide useful utilities for subclasses.
The C++ you're programming damaged your common sense cycles?
Yes, very, but that isn't relevant here <wink>. It's good Python sense too.
[parser module produces trees far too concrete for comfort]
As a note, selfnanny uses the parser module AST.
Understood, but selfnanny has a relatively trivial task. Hassling with tuples nested dozens deep for even relatively simple stmts is both a PITA and a time sink.
[parser doesn't give source lines]
The parser module has source lines.
No, it does not (it only returns terminals, as isolated strings). The tokenize module does deliver original source lines in their entirety (as well as terminals, as isolated strings; and column numbers).
and lack of column-number info.
Yes, that sucks.
... Why doesn't checkappend.py uses the parser module?
Because it wanted to display the acutal source line containing an offending "append" (which, again, the parse module does not supply). Besides, it was a trivial variation on tabnanny.py, of which I have approximately 300 copies on my disk <wink>.
Grabbing the GregS/BillT enhancement is probably the most practical thing we could build on right now
You got some pointers?
Download python2c (http://www.mudlib.org/~rassilon/p2c/) and grab transformer.py from the zip file. The latter supplies a very useful post-processing pass over the parse module's output, squashing it *way* down.