Make sure __wrapped__ works properly when using an Interpreter, fixes #1353

This commit is contained in:
Dave Halter
2019-07-10 15:58:16 -07:00
parent f984e8d6ef
commit 3ed9e836cc
2 changed files with 17 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ Used only for REPL Completion.
import inspect
import os
import sys
from jedi.parser_utils import get_cached_code_lines
@@ -131,6 +132,9 @@ def _load_module(evaluator, path):
def _get_object_to_check(python_object):
"""Check if inspect.getfile has a chance to find the source."""
if sys.version_info[0] > 2:
python_object = inspect.unwrap(python_object)
if (inspect.ismodule(python_object) or
inspect.isclass(python_object) or
inspect.ismethod(python_object) or

View File

@@ -426,3 +426,16 @@ def test_simple_completions(code, completions):
defs = jedi.Interpreter(code, [locals()]).completions()
assert [d.name for d in defs] == completions
@pytest.mark.skipif(sys.version_info[0] == 2, reason="Python 2 doesn't have lru_cache")
def test__wrapped__():
from functools import lru_cache
@lru_cache(maxsize=128)
def syslogs_to_df():
pass
c, = jedi.Interpreter('syslogs_to_df', [locals()]).completions()
# Apparently the function starts on the line where the decorator starts.
assert c.line == syslogs_to_df.__wrapped__.__code__.co_firstlineno + 1