mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 06:24:27 +08:00
Add ParamDefinition.kind, fixes #1361
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user