diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 8a45488e..e7f7809a 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -531,7 +531,7 @@ class Definition(BaseDefinition): typ = self.type tree_name = self._name.tree_name if typ == 'param': - return typ + ' ' + str(self._name) + return typ + ' ' + self._name.to_string() if typ in ('function', 'class', 'module', 'instance') or tree_name is None: if typ == 'function': # For the description we want a short and a pythonic way. @@ -633,13 +633,14 @@ class CallSignature(Definition): return '<%s: index=%r %s>' % ( type(self).__name__, self.index, - self._signature, + self._signature.to_string(), ) def _format_signatures(context): return '\n'.join( - str(signature) for signature in context.get_signatures() + signature.to_string() + for signature in context.get_signatures() ) diff --git a/jedi/evaluate/compiled/context.py b/jedi/evaluate/compiled/context.py index e902c575..c5ced978 100644 --- a/jedi/evaluate/compiled/context.py +++ b/jedi/evaluate/compiled/context.py @@ -309,7 +309,7 @@ class SignatureParamName(ParamNameInterface, AbstractNameDefinition): def string_name(self): return self._signature_param.name - def __str__(self): + def to_string(self): s = self._kind_string() + self.string_name if self._signature_param.has_annotation: s += ': ' + self._signature_param.annotation_string @@ -341,7 +341,7 @@ class UnresolvableParamName(ParamNameInterface, AbstractNameDefinition): def get_kind(self): return Parameter.POSITIONAL_ONLY - def __str__(self): + def to_string(self): string = self.string_name if self._default: string += '=' + self._default diff --git a/jedi/evaluate/names.py b/jedi/evaluate/names.py index c5539664..563506b3 100644 --- a/jedi/evaluate/names.py +++ b/jedi/evaluate/names.py @@ -178,7 +178,7 @@ class ParamNameInterface(_ParamMixin): def get_kind(self): raise NotImplementedError - def __str__(self): + def to_string(self): raise NotImplementedError def get_param(self): @@ -201,7 +201,7 @@ class BaseTreeParamName(ParamNameInterface, AbstractTreeName): annotation_node = None default_node = None - def __str__(self): + def to_string(self): output = self._kind_string() + self.string_name annotation = self.annotation_node default = self.default_node @@ -277,9 +277,6 @@ class ParamNameWrapper(_ParamMixin): def __getattr__(self, name): return getattr(self._wrapped_param_name, name) - def __str__(self): - return str(self._wrapped_param_name) - def __repr__(self): return '<%s: %s>' % (self.__class__.__name__, self._wrapped_param_name) diff --git a/jedi/evaluate/signature.py b/jedi/evaluate/signature.py index ee832dcc..8e1b2d81 100644 --- a/jedi/evaluate/signature.py +++ b/jedi/evaluate/signature.py @@ -2,7 +2,7 @@ from jedi._compatibility import Parameter class _SignatureMixin(object): - def __str__(self): + def to_string(self): def param_strings(): is_positional = False is_kw_only = False @@ -19,7 +19,7 @@ class _SignatureMixin(object): yield '*' is_kw_only = True - yield str(n) + yield n.to_string() if is_positional: yield '/' diff --git a/test/test_evaluate/test_signature.py b/test/test_evaluate/test_signature.py index 254b5896..76da4fee 100644 --- a/test/test_evaluate/test_signature.py +++ b/test/test_evaluate/test_signature.py @@ -33,7 +33,7 @@ def test_compiled_signature(Script, environment, code, sig, names, op, version): context, = d._name.infer() compiled, = _stub_to_python_context_set(context) signature, = compiled.get_signatures() - assert str(signature) == sig + assert signature.to_string() == sig assert [n.string_name for n in signature.get_param_names()] == names @@ -90,7 +90,7 @@ def test_tree_signature(Script, environment, code, expected): assert not Script(code).call_signatures() else: sig, = Script(code).call_signatures() - assert expected == str(sig._signature) + assert expected == sig._signature.to_string() @pytest.mark.parametrize( @@ -180,7 +180,7 @@ def test_nested_signatures(Script, environment, combination, expected, skip_pre_ ''') code += 'z = ' + combination + '\nz(' sig, = Script(code).call_signatures() - computed = str(sig._signature) + computed = sig._signature.to_string() if not re.match('\w+\(', expected): expected = '(' + expected + ')' assert expected == computed @@ -189,7 +189,7 @@ def test_nested_signatures(Script, environment, combination, expected, skip_pre_ def test_pow_signature(Script): # See github #1357 sigs = Script('pow(').call_signatures() - strings = {str(sig._signature) for sig in sigs} + 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', @@ -228,7 +228,7 @@ def test_pow_signature(Script): ) def test_wraps_signature(Script, code, signature, skip_pre_python35): sigs = Script(code).call_signatures() - assert {str(sig._signature) for sig in sigs} == {signature} + assert {sig._signature.to_string() for sig in sigs} == {signature} @pytest.mark.parametrize(