On Tue, Nov 7, 2017 at 9:27 PM, Guido van Rossum <guido@python.org> wrote:
On Mon, Nov 6, 2017 at 10:36 PM, Stéfane Fermigier <sf@fermigier.com> wrote:

On Tue, Nov 7, 2017 at 2:58 AM, Guido van Rossum <guido@python.org> wrote:
On Mon, Nov 6, 2017 at 2:34 AM, Stéfane Fermigier <sf@fermigier.com> wrote:
4) 10 years ago, when I was working on the EDOS project ( http://cordis.europa.eu/pub/ist/docs/directorate_d/st-ds/edos-project-story_en.pdf ), I ran a small experiment where I used, IIRC, the profile hook to intercept all function / method calls, and log information about arguments and return value types to a gigantic log file. Then the log file could be parsed and these information used to suggest type annotations. Except there were no type annotations at the time in Python.

I know PyCharm can do a similar thing now: you run your program or your tests under the debugger, it logs runtime type information somewhere, and then can use it to suggest autocompletion or maybe type annotations.

I didn't know this. Do you know where there are docs for this feature?

This was described in this blog post when first introduced:

And more tersely, in the documentation: https://www.jetbrains.com/help/pycharm/python-debugger.html
Oh. It sounds like it doesn't generate stubs or PEP 484 annotations.

The blog post was written in 2013, PEP 484 was not yet adopted at the time, and so they targeted their own typechecker and typing annotation conventions, which were at the time based on docstrings conventions.

I have just checked with the current PyCharm version, and when using the "add annotation" intention, they're using now either the "# type: (...) -> ...", or the PEP484 conventions, depending on the version of Python you're using for your particular workspace.

Also, I found the the call signature collection mechanism during debug run seems to live in the PyDev.Debugger project (https://github.com/fabioz/PyDev.Debugger/ which is common to PyDev and PyCharm), more specifically here: https://github.com/fabioz/PyDev.Debugger/blob/master/_pydevd_bundle/pydevd_signature.py


Stefane Fermigier - http://fermigier.com/ - http://twitter.com/sfermigier - http://linkedin.com/in/sfermigier
Founder & CEO, Abilian - Enterprise Social Software - http://www.abilian.com/
Chairman, Free&OSS Group / Systematic Cluster - http://www.gt-logiciel-libre.org/
Co-Chairman, National Council for Free & Open Source Software (CNLL) - http://cnll.fr/
Founder & Organiser, PyData Paris - http://pydata.fr/
“You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete.” — R. Buckminster Fuller