mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-16 02:27:06 +08:00
Replace a lot more of empty sets and unite calls.
This commit is contained in:
@@ -24,6 +24,7 @@ from jedi.evaluate import precedence
|
||||
from jedi.evaluate import param
|
||||
from jedi.evaluate import analysis
|
||||
from jedi.evaluate.context import LazyTreeContext, ContextualizedNode
|
||||
from jedi.common import NO_CONTEXTS, ContextSet
|
||||
|
||||
# Now this is all part of fake tuples in Jedi. However super doesn't work on
|
||||
# __init__ and __new__ doesn't work at all. So adding this to nametuples is
|
||||
@@ -77,7 +78,7 @@ def _follow_param(evaluator, arguments, index):
|
||||
try:
|
||||
key, lazy_context = list(arguments.unpack())[index]
|
||||
except IndexError:
|
||||
return set()
|
||||
return NO_CONTEXTS
|
||||
else:
|
||||
return lazy_context.infer()
|
||||
|
||||
@@ -109,7 +110,7 @@ def argument_clinic(string, want_obj=False, want_context=False, want_arguments=F
|
||||
try:
|
||||
lst = list(arguments.eval_argument_clinic(clinic_args))
|
||||
except ValueError:
|
||||
return set()
|
||||
return NO_CONTEXTS
|
||||
else:
|
||||
kwargs = {}
|
||||
if want_context:
|
||||
@@ -137,15 +138,16 @@ def builtins_next(evaluator, iterators, defaults):
|
||||
else:
|
||||
name = '__next__'
|
||||
|
||||
types = set()
|
||||
context_set = NO_CONTEXTS
|
||||
for iterator in iterators:
|
||||
if isinstance(iterator, AbstractInstanceContext):
|
||||
for filter in iterator.get_filters(include_self_names=True):
|
||||
for n in filter.get(name):
|
||||
for context in n.infer():
|
||||
types |= context.execute_evaluated()
|
||||
if types:
|
||||
return types
|
||||
context_set = ContextSet.from_sets(
|
||||
n.infer()
|
||||
for filter in iterator.get_filters(include_self_names=True)
|
||||
for n in filter.get(name)
|
||||
).execute_evaluated()
|
||||
if context_set:
|
||||
return context_set
|
||||
return defaults
|
||||
|
||||
|
||||
@@ -159,16 +161,16 @@ def builtins_getattr(evaluator, objects, names, defaults=None):
|
||||
else:
|
||||
debug.warning('getattr called without str')
|
||||
continue
|
||||
return set()
|
||||
return NO_CONTEXTS
|
||||
|
||||
|
||||
@argument_clinic('object[, bases, dict], /')
|
||||
def builtins_type(evaluator, objects, bases, dicts):
|
||||
if bases or dicts:
|
||||
# It's a type creation... maybe someday...
|
||||
return set()
|
||||
return NO_CONTEXTS
|
||||
else:
|
||||
return set([o.py__class__() for o in objects])
|
||||
return ContextSet.from_iterable(o.py__class__() for o in objects)
|
||||
|
||||
|
||||
class SuperInstance(AbstractInstanceContext):
|
||||
@@ -185,7 +187,7 @@ def builtins_super(evaluator, types, objects, context):
|
||||
AnonymousInstanceFunctionExecution)):
|
||||
su = context.instance.py__class__().py__bases__()
|
||||
return unite(context.execute_evaluated() for context in su[0].infer())
|
||||
return set()
|
||||
return NO_CONTEXTS
|
||||
|
||||
|
||||
@argument_clinic('sequence, /', want_obj=True, want_arguments=True)
|
||||
@@ -207,12 +209,12 @@ def builtins_reversed(evaluator, sequences, obj, arguments):
|
||||
# just returned the result directly.
|
||||
seq = iterable.FakeSequence(evaluator, 'list', rev)
|
||||
arguments = param.ValuesArguments([[seq]])
|
||||
return set([CompiledInstance(evaluator, evaluator.BUILTINS, obj, arguments)])
|
||||
return ContextSet(CompiledInstance(evaluator, evaluator.BUILTINS, obj, arguments))
|
||||
|
||||
|
||||
@argument_clinic('obj, type, /', want_arguments=True)
|
||||
def builtins_isinstance(evaluator, objects, types, arguments):
|
||||
bool_results = set([])
|
||||
bool_results = set()
|
||||
for o in objects:
|
||||
try:
|
||||
mro_func = o.py__class__().py__mro__
|
||||
@@ -220,7 +222,7 @@ def builtins_isinstance(evaluator, objects, types, arguments):
|
||||
# This is temporary. Everything should have a class attribute in
|
||||
# Python?! Maybe we'll leave it here, because some numpy objects or
|
||||
# whatever might not.
|
||||
return set([compiled.create(True), compiled.create(False)])
|
||||
return ContextSet(compiled.create(True), compiled.create(False))
|
||||
|
||||
mro = mro_func()
|
||||
|
||||
@@ -244,7 +246,7 @@ def builtins_isinstance(evaluator, objects, types, arguments):
|
||||
'not %s.' % cls_or_tup
|
||||
analysis.add(lazy_context._context, 'type-error-isinstance', node, message)
|
||||
|
||||
return set(compiled.create(evaluator, x) for x in bool_results)
|
||||
return ContextSet.from_iterable(compiled.create(evaluator, x) for x in bool_results)
|
||||
|
||||
|
||||
def collections_namedtuple(evaluator, obj, arguments):
|
||||
@@ -259,7 +261,7 @@ def collections_namedtuple(evaluator, obj, arguments):
|
||||
"""
|
||||
# Namedtuples are not supported on Python 2.6
|
||||
if not hasattr(collections, '_class_template'):
|
||||
return set()
|
||||
return NO_CONTEXTS
|
||||
|
||||
# Process arguments
|
||||
# TODO here we only use one of the types, we should use all.
|
||||
@@ -274,7 +276,7 @@ def collections_namedtuple(evaluator, obj, arguments):
|
||||
for v in lazy_context.infer() if hasattr(v, 'obj')
|
||||
]
|
||||
else:
|
||||
return set()
|
||||
return NO_CONTEXTS
|
||||
|
||||
base = collections._class_template
|
||||
base += _NAMEDTUPLE_INIT
|
||||
@@ -293,7 +295,7 @@ def collections_namedtuple(evaluator, obj, arguments):
|
||||
module = evaluator.grammar.parse(source)
|
||||
generated_class = next(module.iter_classdefs())
|
||||
parent_context = er.ModuleContext(evaluator, module, '')
|
||||
return set([er.ClassContext(evaluator, generated_class, parent_context)])
|
||||
return ContextSet(er.ClassContext(evaluator, generated_class, parent_context))
|
||||
|
||||
|
||||
@argument_clinic('first, /')
|
||||
@@ -314,8 +316,8 @@ _implemented = {
|
||||
'deepcopy': _return_first_param,
|
||||
},
|
||||
'json': {
|
||||
'load': lambda *args: set(),
|
||||
'loads': lambda *args: set(),
|
||||
'load': lambda *args: NO_CONTEXTS,
|
||||
'loads': lambda *args: NO_CONTEXTS,
|
||||
},
|
||||
'collections': {
|
||||
'namedtuple': collections_namedtuple,
|
||||
|
||||
Reference in New Issue
Block a user