1
0
forked from VimPlug/jedi

Use inspect.Parameter.kind for better differentiation between param types

Refs #292
This commit is contained in:
Dave Halter
2018-03-13 22:47:08 +01:00
parent f9ec989835
commit 5d36114be4
5 changed files with 48 additions and 15 deletions

View File

@@ -99,7 +99,10 @@ def safe_getattr(obj, name, default=_sentinel):
return attr
SignatureParam = namedtuple('SignatureParam', 'name has_default default has_annotation annotation')
SignatureParam = namedtuple(
'SignatureParam',
'name has_default default has_annotation annotation kind_name'
)
def compiled_objects_cache(attribute_name):
@@ -413,6 +416,7 @@ class DirectObjectAccess(object):
default=self._create_access_path(p.default),
has_annotation=p.annotation is not p.empty,
annotation=self._create_access_path(p.annotation),
kind_name=str(p.kind)
) for p in signature.parameters.values()
]

View File

@@ -5,7 +5,7 @@ import re
from functools import partial
from jedi import debug
from jedi._compatibility import force_unicode
from jedi._compatibility import force_unicode, Parameter
from jedi.cache import underscore_memoization, memoize_method
from jedi.evaluate.filters import AbstractFilter, AbstractNameDefinition, \
ContextNameMixin
@@ -248,6 +248,12 @@ class SignatureParamName(AbstractNameDefinition):
def string_name(self):
return self._signature_param.name
def get_kind(self):
return getattr(Parameter, self._signature_param.kind_name)
def is_keyword_param(self):
return self._signature_param
def infer(self):
p = self._signature_param
evaluator = self.parent_context.evaluator
@@ -267,6 +273,9 @@ class UnresolvableParamName(AbstractNameDefinition):
self.parent_context = compiled_obj.parent_context
self.string_name = name
def get_kind(self):
return Parameter.POSITIONAL_ONLY
def infer(self):
return ContextSet()

View File

@@ -6,7 +6,7 @@ from abc import abstractmethod
from parso.tree import search_ancestor
from jedi._compatibility import use_metaclass
from jedi._compatibility import use_metaclass, Parameter
from jedi.cache import memoize_method
from jedi.evaluate import flow_analysis
from jedi.evaluate.base_context import ContextSet, Context
@@ -122,6 +122,22 @@ class ParamName(AbstractTreeName):
self.parent_context = parent_context
self.tree_name = tree_name
def get_kind(self):
tree_param = search_ancestor(self.tree_name, 'param')
if tree_param.star_count == 1: # *args
return Parameter.VAR_POSITIONAL
if tree_param.star_count == 2: # **kwargs
return Parameter.VAR_KEYWORD
parent = tree_param.parent
for p in parent.children:
if p.type == 'param':
if p.star_count:
return Parameter.KEYWORD_ONLY
if p == tree_param:
break
return Parameter.POSITIONAL_OR_KEYWORD
def infer(self):
return self.get_param().infer()