Add ParamDefinition.kind, fixes #1361

This commit is contained in:
Dave Halter
2019-08-02 13:11:41 +02:00
parent 642e8f2aa6
commit 876a6a5c22
2 changed files with 21 additions and 4 deletions

View File

@@ -4,10 +4,9 @@ These classes are the much bigger part of the whole API, because they contain
the interesting information about completion and goto operations. the interesting information about completion and goto operations.
""" """
import re import re
import sys
import warnings import warnings
from parso.python.tree import search_ancestor
from jedi import settings from jedi import settings
from jedi import debug from jedi import debug
from jedi.evaluate.utils import unite from jedi.evaluate.utils import unite
@@ -681,6 +680,20 @@ class ParamDefinition(Definition):
def to_string(self): def to_string(self):
return self._name.to_string() return self._name.to_string()
@property
def kind(self):
"""
Returns an enum instance. Returns the same values as the builtin
:py:attr:`inspect.Parameter.kind`.
No support for Python 2 anymore.
"""
if sys.version_info[0] < 3:
raise NotImplementedError(
'Python 2 is end-of-life, the new feature is not available for it'
)
return self._name.get_kind()
def _format_signatures(context): def _format_signatures(context):
return '\n'.join( return '\n'.join(

View File

@@ -51,8 +51,11 @@ def test_param_default(Script, code, expected_params):
@pytest.mark.parametrize( @pytest.mark.parametrize(
'code, index, param_code, kind', [ 'code, index, param_code, kind', [
('def f(x=1): ...\nf', 0, 'x=1', ...), ('def f(x=1): ...\nf', 0, 'x=1', 'POSITIONAL_OR_KEYWORD'),
('def f(*args:int): ...\nf', 0, '*args: int', ...), ('def f(*args:int): ...\nf', 0, '*args: int', 'VAR_POSITIONAL'),
('def f(**kwargs: List[x]): ...\nf', 0, '**kwargs: List[x]', 'VAR_KEYWORD'),
('def f(*, x:int=5): ...\nf', 0, 'x: int=5', 'KEYWORD_ONLY'),
('def f(*args, x): ...\nf', 1, 'x', 'KEYWORD_ONLY'),
] ]
) )
def test_param_kind_and_name(code, index, param_code, kind, Script, skip_python2): def test_param_kind_and_name(code, index, param_code, kind, Script, skip_python2):
@@ -60,3 +63,4 @@ def test_param_kind_and_name(code, index, param_code, kind, Script, skip_python2
sig, = func.get_signatures() sig, = func.get_signatures()
param = sig.params[index] param = sig.params[index]
assert param.to_string() == param_code assert param.to_string() == param_code
assert param.kind.name == kind