Jedi raised an error when defined_names was called on empty functions, fixes #697.

This commit is contained in:
Dave Halter
2016-07-10 18:15:06 +02:00
parent 1c0aa06c7d
commit 3ad67a4ec7
2 changed files with 21 additions and 8 deletions

View File

@@ -58,6 +58,9 @@ def filter_definition_names(names, origin, position=None):
Filter names that are actual definitions in a scope. Names that are just
used will be ignored.
"""
if not names:
return []
# Just calculate the scope from the first
stmt = names[0].get_definition()
scope = stmt.get_parent_scope()

View File

@@ -2,19 +2,19 @@
Tests for `api.defined_names`.
"""
import textwrap
from textwrap import dedent
from jedi import api
from jedi import defined_names, names
from ..helpers import TestCase
class TestDefinedNames(TestCase):
def assert_definition_names(self, definitions, names):
assert [d.name for d in definitions] == names
def assert_definition_names(self, definitions, names_):
assert [d.name for d in definitions] == names_
def check_defined_names(self, source, names):
definitions = api.names(textwrap.dedent(source))
self.assert_definition_names(definitions, names)
def check_defined_names(self, source, names_):
definitions = names(dedent(source))
self.assert_definition_names(definitions, names_)
return definitions
def test_get_definitions_flat(self):
@@ -76,7 +76,17 @@ class TestDefinedNames(TestCase):
def test_follow_imports():
# github issue #344
imp = api.defined_names('import datetime')[0]
imp = defined_names('import datetime')[0]
assert imp.name == 'datetime'
datetime_names = [str(d.name) for d in imp.defined_names()]
assert 'timedelta' in datetime_names
def test_names_twice():
source = dedent('''
def lol():
pass
''')
defs = names(source=source)
assert defs[0].defined_names() == []