From fa82b9a9db2fd5f7e4ac99cf6d6b012a50e9709f Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 21 Sep 2015 14:21:29 +0200 Subject: [PATCH] Starting to replace the old API code for static analysis. --- jedi/api/__init__.py | 17 +++++++++++++++++ jedi/parser/tree.py | 6 ++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index e2371463..e38c43a6 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -534,6 +534,22 @@ class Script(object): else: check_types(f()) + for node in self._parser.module().nodes_to_execute(): + if node.type in ('funcdef', 'classdef'): + if node.type == 'classdef': + continue + raise NotImplementedError + er.Function(self._evaluator, node).get_decorated_func() + elif isinstance(node, tree.Import): + import_names = set(node.get_defined_names()) + if node.is_nested(): + import_names |= set(path[-1] for path in node.paths()) + for n in import_names: + imports.ImportWrapper(self._evaluator, n).follow() + else: + check_types(self._evaluator.eval_element(node)) + + """ #statements = set(chain(*self._parser.module().used_names.values())) nodes, imp_names, decorated_funcs = \ analysis.get_executable_nodes(self._parser.module()) @@ -545,6 +561,7 @@ class Script(object): for dec_func in decorated_funcs: er.Function(self._evaluator, dec_func).get_decorated_func() + """ ana = [a for a in self._evaluator.analysis if self.path == a.path] return sorted(set(ana), key=lambda x: x.line) diff --git a/jedi/parser/tree.py b/jedi/parser/tree.py index 9e86f66b..88d4fddc 100644 --- a/jedi/parser/tree.py +++ b/jedi/parser/tree.py @@ -337,7 +337,8 @@ class Name(Leaf): return indexes def nodes_to_execute(self, last_added=False): - yield self + if last_added is False: + yield self class Literal(LeafWithNewLines): @@ -509,6 +510,7 @@ class Node(BaseNode): result = [] if self.type not in Node._IGNORE_EXECUTE_NODES: result.append(self) + last_added = True for child in self.children: result += child.nodes_to_execute(last_added) @@ -742,7 +744,7 @@ class Class(ClassOrFunc): def nodes_to_execute(self, last_added=False): # Yield itself, class needs to be executed for decorator checks. yield self - for param in self.params: + for param in self.get_super_arglist: if param.default is None: yield param.default else: