From 01f53236a4c8427200009bd2a798ee02acb47146 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Thu, 19 Mar 2020 01:26:45 +0100 Subject: [PATCH] Rework the recipe parts --- docs/docs/features.rst | 63 +++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/docs/docs/features.rst b/docs/docs/features.rst index 443eac63..3f95fd5e 100644 --- a/docs/docs/features.rst +++ b/docs/docs/features.rst @@ -122,15 +122,24 @@ Type Hinting If |jedi| cannot detect the type of a function argument correctly (due to the dynamic nature of Python), you can help it by hinting the type using -one of the following docstring/annotation syntax styles: +one of the docstring/annotation styles below. **Only gradual typing will +always work**, all the docstring solutions are glorified hacks and more +complicated cases will probably not work. -**PEP-0484 style** +Official Gradual Typing (Recommended) ++++++++++++++++++++++++++++++++++++++ -https://www.python.org/dev/peps/pep-0484/ +You can read a lot about Python's gradual typing system in the corresponding +PEPs like: -function annotations +- `PEP 484 `_ as an introduction +- `PEP 526 `_ for variable annotations +- `PEP 589 `_ for ``TypeDict`` +- There are probably more :) -:: +Below you can find a few examples how you can use this feature. + +Function annotations:: def myfunction(node: ProgramNode, foo: str) -> None: """Do something with a ``node``. @@ -139,55 +148,58 @@ function annotations node.| # complete here -assignment, for-loop and with-statement type hints (all Python versions). -Note that the type hints must be on the same line as the statement +Assignment, for-loop and with-statement type hints:: -:: + import typing + x: int = foo() + y: typing.Optional[int] = 3 - x = foo() # type: int - x, y = 2, 3 # type: typing.Optional[int], typing.Union[int, str] # typing module is mostly supported - for key, value in foo.items(): # type: str, Employee # note that Employee must be in scope + key: str + value: Employee + for key, value in foo.items(): pass - with foo() as f: # type: int + + f: Union[int, float] + with foo() as f: print(f + 3) -Most of the features in PEP-0484 are supported including the typing module -(for Python < 3.5 you have to do ``pip install typing`` to use these), -and forward references. - -You can also use stub files. +PEP-0484 should be supported in its entirety. Feel free to open issues if that +is not the case. You can also use stub files. -**Sphinx style** +Sphinx style +++++++++++++ http://www.sphinx-doc.org/en/stable/domains.html#info-field-lists :: def myfunction(node, foo): - """Do something with a ``node``. + """ + Do something with a ``node``. :type node: ProgramNode :param str foo: foo parameter description - """ node.| # complete here -**Epydoc** +Epydoc +++++++ http://epydoc.sourceforge.net/manual-fields.html :: def myfunction(node): - """Do something with a ``node``. + """ + Do something with a ``node``. @type node: ProgramNode - """ node.| # complete here -**Numpydoc** +Numpydoc +++++++++ https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt @@ -197,7 +209,8 @@ In order to support the numpydoc format, you need to install the `numpydoc :: def foo(var1, var2, long_var_name='hi'): - r"""A one-line summary that does not use variable names or the + r""" + A one-line summary that does not use variable names or the function name. ...