From 97fb95ec0c08a8b51a088129dca62c161d1ed4e8 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 26 Apr 2020 00:21:01 +0200 Subject: [PATCH] Don't display unnecessary help, fixes #1557 --- jedi/api/__init__.py | 15 +++++++++++++-- test/test_api/test_documentation.py | 10 ++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 47e046e4..7531598a 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -473,8 +473,19 @@ class Script(object): return definitions leaf = self._module_node.get_leaf_for_position((line, column)) if leaf is not None and leaf.type in ('keyword', 'operator', 'error_leaf'): - reserved = self._inference_state.grammar._pgen_grammar.reserved_syntax_strings.keys() - if leaf.value in reserved: + def need_pydoc(): + if leaf.value in ('(', ')', '[', ']'): + if leaf.parent.type == 'trailer': + return False + if leaf.parent.type == 'atom': + return False + grammar = self._inference_state.grammar + # This parso stuff is not public, but since I control it, this + # is fine :-) ~dave + reserved = grammar._pgen_grammar.reserved_syntax_strings.keys() + return leaf.value in reserved + + if need_pydoc(): name = KeywordName(self._inference_state, leaf.value) return [classes.Name(self._inference_state, name)] return [] diff --git a/test/test_api/test_documentation.py b/test/test_api/test_documentation.py index 584666b7..1fe8bfd9 100644 --- a/test/test_api/test_documentation.py +++ b/test/test_api/test_documentation.py @@ -120,3 +120,13 @@ def test_docstring_decorator(goto_or_help_or_infer, skip_python2): @pytest.mark.parametrize('code', ['', '\n', ' ']) def test_empty(Script, code): assert not Script(code).help(1, 0) + + +@pytest.mark.parametrize('code', ['f()', '(bar or baz)', 'f[3]']) +def test_no_help_for_operator(Script, code): + assert not Script(code).help() + + +@pytest.mark.parametrize('code', ['()', '(1,)', '[]', '[1]', 'f[]']) +def test_help_for_operator(Script, code): + assert Script(code).help()