From b3fc10a6e4c2580f28c7cfe4bf06afe3e336f0b0 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 16 May 2020 15:39:48 +0200 Subject: [PATCH] Magic methods fixes for reverse methods --- jedi/inference/syntax_tree.py | 12 ++++++++---- test/completion/precedence.py | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/jedi/inference/syntax_tree.py b/jedi/inference/syntax_tree.py index 42283093..7f87a865 100644 --- a/jedi/inference/syntax_tree.py +++ b/jedi/inference/syntax_tree.py @@ -661,15 +661,19 @@ def _infer_comparison_part(inference_state, context, left, operator, right): method_name = operator_to_magic_method[str_operator] magic_methods = left.py__getattribute__(method_name) - if not magic_methods: - reverse_method_name = reverse_operator_to_magic_method[str_operator] - magic_methods = left.py__getattribute__(reverse_method_name) - if magic_methods: result = magic_methods.execute_with_values(right) if result: return result + if not magic_methods: + reverse_method_name = reverse_operator_to_magic_method[str_operator] + magic_methods = right.py__getattribute__(reverse_method_name) + + result = magic_methods.execute_with_values(left) + if result: + return result + result = ValueSet([left, right]) debug.dbg('Used operator %s resulting in %s', operator, result) return result diff --git a/test/completion/precedence.py b/test/completion/precedence.py index 6c82a2c3..ed7791ec 100644 --- a/test/completion/precedence.py +++ b/test/completion/precedence.py @@ -159,6 +159,25 @@ from datetime import datetime, timedelta #? datetime() (datetime() - timedelta()) #? timedelta() +(datetime() - datetime()) +#? timedelta() (timedelta() - datetime()) #? timedelta() (timedelta() - timedelta()) + +# ----------------- +# magic methods +# ----------------- + +class C: + def __sub__(self, other) -> int: ... + def __radd__(self, other) -> float: ... + +#? int() +(C() - object()) +#? C() object() +(object() - C()) +#? C() object() +(C() + object()) +#? float() +(object() + C())