diff options
author | Christian Tismer <tismer@stackless.com> | 2018-07-14 15:10:56 +0200 |
---|---|---|
committer | Christian Tismer <tismer@stackless.com> | 2018-11-24 17:25:06 +0000 |
commit | b86d72b9eac320044fde5642e0323be3ef80d62c (patch) | |
tree | 55e308075718467e77376587fcef2dc7beb82710 /sources/shiboken2/shibokenmodule/support/signature/loader.py | |
parent | 57e7c17b2b77740cf0be7620dd628584a369eb82 (diff) |
Create hinting stubs for Python IDEs
This implementation formats all signatures in a way
that is known as type hinting files (.pyi).
Usage
-----
The script is to be called by the same Python interpreter that
was used to build PySide. It works with Python 2 and 3.
On Python 3, it performs a self-test.
python3 sources/pyside2/PySide2/support/generate_pyi.py run
will generate .pyi files for all compiled PySide modules
and places them into site packages to the binaries.
An optional outpath can be specified.
It is planned to call this script automatically after install.
o Local constants are not included, yet.
Maybe they never will, unless requested.
o The keyword "from" appears 43 times in argument lists.
It is fixed in Python, only which does not matter.
o When using Python 3.7 or above, it respects Pep 563 and
avoids imports which are deferred to runtime.
Task-number: PYSIDE-735
Change-Id: I3bcd5d9284b853fe955376bf35c7897e3698da2b
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/shiboken2/shibokenmodule/support/signature/loader.py')
-rw-r--r-- | sources/shiboken2/shibokenmodule/support/signature/loader.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/sources/shiboken2/shibokenmodule/support/signature/loader.py b/sources/shiboken2/shibokenmodule/support/signature/loader.py index 83493e511..170fb0a2a 100644 --- a/sources/shiboken2/shibokenmodule/support/signature/loader.py +++ b/sources/shiboken2/shibokenmodule/support/signature/loader.py @@ -59,7 +59,6 @@ import os import traceback import types from contextlib import contextmanager -from distutils.sysconfig import get_python_lib """ A note on the import problem (solved): @@ -111,6 +110,30 @@ def ensure_import_support(): sys.path.pop(0) +# patching inspect's formatting to keep the word "typing": +def formatannotation(annotation, base_module=None): + # if getattr(annotation, '__module__', None) == 'typing': + # return repr(annotation).replace('typing.', '') + if isinstance(annotation, type): + if annotation.__module__ in ('builtins', base_module): + return annotation.__qualname__ + return annotation.__module__+'.'+annotation.__qualname__ + return repr(annotation) + +# patching __repr__ to disable the __repr__ of typing.TypeVar: +""" + def __repr__(self): + if self.__covariant__: + prefix = '+' + elif self.__contravariant__: + prefix = '-' + else: + prefix = '~' + return prefix + self.__name__ +""" +def _typevar__repr__(self): + return "typing." + self.__name__ + with ensure_import_support(): # We store all needed modules in signature_loader. # This way, they are always accessible. @@ -119,6 +142,7 @@ with ensure_import_support(): if sys.version_info >= (3,): import typing import inspect + inspect.formatannotation = formatannotation else: import inspect namespace = inspect.__dict__ @@ -129,6 +153,7 @@ with ensure_import_support(): inspect.__doc__ += _doc # force inspect to find all attributes. See "heuristic" in pydoc.py! inspect.__all__ = list(x for x in dir(inspect) if not x.startswith("_")) + typing.TypeVar.__repr__ = _typevar__repr__ def put_into_loader_package(module, loader=signature_loader): # Note: the "with" statement hides that we are no longer in a |