mirror of
https://github.com/davidhalter/jedi.git
synced 2026-03-07 06:41:53 +08:00
Replace a few isinstance calls with the type.
This commit is contained in:
@@ -164,7 +164,7 @@ class Evaluator(object):
|
|||||||
name, position=stmt.start_pos, search_global=True)
|
name, position=stmt.start_pos, search_global=True)
|
||||||
|
|
||||||
for_stmt = tree.search_ancestor(stmt, 'for_stmt')
|
for_stmt = tree.search_ancestor(stmt, 'for_stmt')
|
||||||
if isinstance(for_stmt, tree.ForStmt) and types \
|
if for_stmt is not None and for_stmt.type == 'for_stmt' and types \
|
||||||
and for_stmt.defines_one_name():
|
and for_stmt.defines_one_name():
|
||||||
# Iterate through result and add the values, that's possible
|
# Iterate through result and add the values, that's possible
|
||||||
# only in for loops without clutter, because they are
|
# only in for loops without clutter, because they are
|
||||||
@@ -271,18 +271,19 @@ class Evaluator(object):
|
|||||||
def _eval_element_not_cached(self, context, element):
|
def _eval_element_not_cached(self, context, element):
|
||||||
debug.dbg('eval_element %s@%s', element, element.start_pos)
|
debug.dbg('eval_element %s@%s', element, element.start_pos)
|
||||||
types = set()
|
types = set()
|
||||||
if isinstance(element, (tree.Name, tree.Literal)) or element.type == 'atom':
|
typ = element.type
|
||||||
|
if isinstance(element, (tree.Name, tree.Literal)) or typ == 'atom':
|
||||||
types = self.eval_atom(context, element)
|
types = self.eval_atom(context, element)
|
||||||
elif isinstance(element, tree.Keyword):
|
elif typ == 'keyword':
|
||||||
# For False/True/None
|
# For False/True/None
|
||||||
if element.value in ('False', 'True', 'None'):
|
if element.value in ('False', 'True', 'None'):
|
||||||
types.add(compiled.builtin_from_name(self, element.value))
|
types.add(compiled.builtin_from_name(self, element.value))
|
||||||
# else: print e.g. could be evaluated like this in Python 2.7
|
# else: print e.g. could be evaluated like this in Python 2.7
|
||||||
elif isinstance(element, tree.Lambda):
|
elif typ == 'lambda':
|
||||||
types = set([er.FunctionContext(self, context, element)])
|
types = set([er.FunctionContext(self, context, element)])
|
||||||
elif element.type == 'expr_stmt':
|
elif typ == 'expr_stmt':
|
||||||
types = self.eval_statement(context, element)
|
types = self.eval_statement(context, element)
|
||||||
elif element.type in ('power', 'atom_expr'):
|
elif typ in ('power', 'atom_expr'):
|
||||||
first_child = element.children[0]
|
first_child = element.children[0]
|
||||||
if not (first_child.type == 'keyword' and first_child.value == 'await'):
|
if not (first_child.type == 'keyword' and first_child.value == 'await'):
|
||||||
types = self.eval_atom(context, first_child)
|
types = self.eval_atom(context, first_child)
|
||||||
@@ -292,22 +293,22 @@ class Evaluator(object):
|
|||||||
types = set(precedence.calculate(self, context, types, trailer, right))
|
types = set(precedence.calculate(self, context, types, trailer, right))
|
||||||
break
|
break
|
||||||
types = self.eval_trailer(context, types, trailer)
|
types = self.eval_trailer(context, types, trailer)
|
||||||
elif element.type in ('testlist_star_expr', 'testlist',):
|
elif typ in ('testlist_star_expr', 'testlist',):
|
||||||
# The implicit tuple in statements.
|
# The implicit tuple in statements.
|
||||||
types = set([iterable.SequenceLiteralContext(self, context, element)])
|
types = set([iterable.SequenceLiteralContext(self, context, element)])
|
||||||
elif element.type in ('not_test', 'factor'):
|
elif typ in ('not_test', 'factor'):
|
||||||
types = self.eval_element(context, element.children[-1])
|
types = self.eval_element(context, element.children[-1])
|
||||||
for operator in element.children[:-1]:
|
for operator in element.children[:-1]:
|
||||||
types = set(precedence.factor_calculate(self, types, operator))
|
types = set(precedence.factor_calculate(self, types, operator))
|
||||||
elif element.type == 'test':
|
elif typ == 'test':
|
||||||
# `x if foo else y` case.
|
# `x if foo else y` case.
|
||||||
types = (self.eval_element(context, element.children[0]) |
|
types = (self.eval_element(context, element.children[0]) |
|
||||||
self.eval_element(context, element.children[-1]))
|
self.eval_element(context, element.children[-1]))
|
||||||
elif element.type == 'operator':
|
elif typ == 'operator':
|
||||||
# Must be an ellipsis, other operators are not evaluated.
|
# Must be an ellipsis, other operators are not evaluated.
|
||||||
assert element.value == '...'
|
assert element.value == '...'
|
||||||
types = set([compiled.create(self, Ellipsis)])
|
types = set([compiled.create(self, Ellipsis)])
|
||||||
elif element.type == 'dotted_name':
|
elif typ == 'dotted_name':
|
||||||
types = self.eval_atom(context, element.children[0])
|
types = self.eval_atom(context, element.children[0])
|
||||||
for next_name in element.children[2::2]:
|
for next_name in element.children[2::2]:
|
||||||
# TODO add search_global=True?
|
# TODO add search_global=True?
|
||||||
@@ -316,9 +317,9 @@ class Evaluator(object):
|
|||||||
for typ in types
|
for typ in types
|
||||||
)
|
)
|
||||||
types = types
|
types = types
|
||||||
elif element.type == 'eval_input':
|
elif typ == 'eval_input':
|
||||||
types = self._eval_element_not_cached(context, element.children[0])
|
types = self._eval_element_not_cached(context, element.children[0])
|
||||||
elif element.type == 'annassign':
|
elif typ == 'annassign':
|
||||||
print(element.children[1])
|
print(element.children[1])
|
||||||
types = pep0484._evaluate_for_annotation(context, element.children[1])
|
types = pep0484._evaluate_for_annotation(context, element.children[1])
|
||||||
print('xxx')
|
print('xxx')
|
||||||
@@ -333,10 +334,10 @@ class Evaluator(object):
|
|||||||
generate the node (because it has just one child). In that case an atom
|
generate the node (because it has just one child). In that case an atom
|
||||||
might be a name or a literal as well.
|
might be a name or a literal as well.
|
||||||
"""
|
"""
|
||||||
if isinstance(atom, tree.Name):
|
if atom.type == 'name':
|
||||||
# This is the first global lookup.
|
# This is the first global lookup.
|
||||||
stmt = atom.get_definition()
|
stmt = atom.get_definition()
|
||||||
if isinstance(stmt, tree.CompFor):
|
if stmt.type == 'comp_for':
|
||||||
stmt = tree.search_ancestor(stmt, ('expr_stmt', 'lambda', 'funcdef', 'classdef'))
|
stmt = tree.search_ancestor(stmt, ('expr_stmt', 'lambda', 'funcdef', 'classdef'))
|
||||||
if stmt is None or stmt.type != 'expr_stmt':
|
if stmt is None or stmt.type != 'expr_stmt':
|
||||||
# We only need to adjust the start_pos for statements, because
|
# We only need to adjust the start_pos for statements, because
|
||||||
@@ -490,7 +491,7 @@ class Evaluator(object):
|
|||||||
if param_name.string_name == name.value:
|
if param_name.string_name == name.value:
|
||||||
param_names.append(param_name)
|
param_names.append(param_name)
|
||||||
return param_names
|
return param_names
|
||||||
elif isinstance(par, tree.ExprStmt) and name in par.get_defined_names():
|
elif par.type == 'expr_stmt' and name in par.get_defined_names():
|
||||||
# Only take the parent, because if it's more complicated than just
|
# Only take the parent, because if it's more complicated than just
|
||||||
# a name it's something you can "goto" again.
|
# a name it's something you can "goto" again.
|
||||||
return [TreeNameDefinition(context, name)]
|
return [TreeNameDefinition(context, name)]
|
||||||
|
|||||||
Reference in New Issue
Block a user