forked from VimPlug/jedi
Fix pow() signature, fixes #1357
This commit changes how params starting with __ are viewed as positional only params
This commit is contained in:
@@ -183,6 +183,11 @@ class ParamName(ParamNameInterface, AbstractTreeName):
|
|||||||
if tree_param.star_count == 2: # **kwargs
|
if tree_param.star_count == 2: # **kwargs
|
||||||
return Parameter.VAR_KEYWORD
|
return Parameter.VAR_KEYWORD
|
||||||
|
|
||||||
|
# Params starting with __ are an equivalent to positional only
|
||||||
|
# variables in typeshed.
|
||||||
|
if tree_param.name.value.startswith('__'):
|
||||||
|
return Parameter.POSITIONAL_ONLY
|
||||||
|
|
||||||
parent = tree_param.parent
|
parent = tree_param.parent
|
||||||
param_appeared = False
|
param_appeared = False
|
||||||
for p in parent.children:
|
for p in parent.children:
|
||||||
@@ -200,7 +205,12 @@ class ParamName(ParamNameInterface, AbstractTreeName):
|
|||||||
return Parameter.POSITIONAL_OR_KEYWORD
|
return Parameter.POSITIONAL_OR_KEYWORD
|
||||||
|
|
||||||
def to_string(self):
|
def to_string(self):
|
||||||
output = self._kind_string() + self.string_name
|
name = self.string_name
|
||||||
|
if name.startswith('__'):
|
||||||
|
# Params starting with __ are an equivalent to positional only
|
||||||
|
# variables in typeshed.
|
||||||
|
name = name[2:]
|
||||||
|
output = self._kind_string() + name
|
||||||
param_node = self._get_param_node()
|
param_node = self._get_param_node()
|
||||||
if param_node.annotation is not None:
|
if param_node.annotation is not None:
|
||||||
output += ': ' + param_node.annotation.get_code(include_prefix=False)
|
output += ': ' + param_node.annotation.get_code(include_prefix=False)
|
||||||
|
|||||||
@@ -50,3 +50,13 @@ def test_tree_signature(Script, environment, code, expected):
|
|||||||
|
|
||||||
sig, = Script(code).call_signatures()
|
sig, = Script(code).call_signatures()
|
||||||
assert expected == sig._signature.to_string()
|
assert expected == sig._signature.to_string()
|
||||||
|
|
||||||
|
|
||||||
|
def test_pow_signature(Script):
|
||||||
|
# See github #1357
|
||||||
|
sigs = Script('pow(').call_signatures()
|
||||||
|
strings = {sig._signature.to_string() for sig in sigs}
|
||||||
|
assert strings == {'pow(x: float, y: float, z: float, /) -> float',
|
||||||
|
'pow(x: float, y: float, /) -> float',
|
||||||
|
'pow(x: int, y: int, z: int, /) -> Any',
|
||||||
|
'pow(x: int, y: int, /) -> Any'}
|
||||||
|
|||||||
Reference in New Issue
Block a user