I would like to develop a tool that goes one step further than pychecker to ensure python program validity. The idea would be to get close to what people get on ocaml: a static verification of all types of the program, without any kind of variable declaration. This would definitely brings a lot of power to python.
It's a very cool idea, and there was talk of including such a tool in Python 3.0, though as yet, no one has volunteered to solve this problem. =) Note that you can't actually really ensure program validity, but you can make some educated guesses like pychecker does. An example:
def f1(a): return a + 1
def f2(): return f1([])
Your suggestion was that this code should be deemed invalid. But if it's followed with:
f1 = ''.join f2()
where f1 is rebound, then it's perfectly valid code. That said, I think providing "suggestions" like pychecker does is definitely worth pursuing.
What is in your opinion the best tool to achieve this ? I had an extensive look at pychecker, and it could certainly be extended to do the job. Things that still concern me are that it works on the bytecode, which prevents it from working with jython and the new .NET python.
I don't know much about what pychecker does, but if it works with the bytecode, shouldn't it be fine for jython and IronPython? I thought the bytecode was part of the language spec, and what was CPython specific was how the bytecodes were actually implemented...
I am currently reading the documentation on AST and visitor, but I am not sure that this will be the best tool either. The AST seems quite deep and I am afraid that it will make the analysis quite slow and complicated.
You should read up on the recent python-dev discussions about merging the AST branch. I don't know too much about it, but apparently there's some work being done currently on how the AST is used in Python. Sorry I don't know more about this...
Steve -- http://mail.python.org/mailman/listinfo/python-list