Refactor something to use .type instead of isinstance.

This commit is contained in:
Dave Halter
2016-06-30 09:55:21 +02:00
parent 689284c615
commit 6b41db96bf
4 changed files with 12 additions and 3 deletions

View File

@@ -179,9 +179,11 @@ class Completion:
scope = get_user_scope(self._module, self._position)
if not scope.is_scope(): # Might be a flow (if/while/etc).
scope = scope.get_parent_scope()
scope = self._evaluator.wrap(scope)
debug.dbg('global completion scope: %s', scope)
names_dicts = global_names_dict_generator(
self._evaluator,
self._evaluator.wrap(scope),
scope,
self._position
)
completion_names = []

View File

@@ -22,6 +22,7 @@ from jedi.evaluate.compiled import mixed
class MixedModule(object):
resets_positions = True
type = 'mixed_module'
def __init__(self, evaluator, parser_module, namespaces):
self._evaluator = evaluator

View File

@@ -235,7 +235,12 @@ class NameFinder(object):
"""
for n in names:
definition = n.parent
if isinstance(definition, (tree.Function, tree.Class, tree.Module)):
if isinstance(definition, (compiled.CompiledObject,
iterable.BuiltinMethod)):
# TODO this if should really be removed by changing the type of
# those classes.
yield n
elif definition.type in ('funcdef', 'classdef', 'file_input'):
yield self._evaluator.wrap(definition).name
else:
yield n

View File

@@ -59,7 +59,8 @@ def test_side_effect_completion():
_GlobalNameSpace.SideEffectContainer.foo = 1
side_effect = get_completion('SideEffectContainer', _GlobalNameSpace.__dict__)
assert isinstance(side_effect._definition, mixed.MixedObject)
# It's a class that contains MixedObject.
assert isinstance(side_effect._definition.base, mixed.MixedObject)
foo = get_completion('SideEffectContainer.foo', _GlobalNameSpace.__dict__)
assert foo.name == 'foo'