def _get_import_cache(ipython):
"""Load a mapping of names to import statements from the IPython history.
"""
import_cache = {}
def _format_alias(alias):
return ("import {0.name} as {0.asname}" if alias.asname
else "import {0.name}").format(alias)
class Visitor(ast.NodeVisitor):
def visit_Import(self, node):
for alias in node.names:
(import_cache.setdefault(alias.asname or alias.name, set())
.add(_format_alias(alias)))
def visit_ImportFrom(self, node):
if node.level: # Skip relative imports.
return
for alias in node.names:
(import_cache.setdefault(alias.asname or alias.name, set())
.add("from {} {}".format(node.module, _format_alias(alias))))
for _, _, entry in (
ipython.history_manager.get_tail(
ipython.history_load_length, raw=False)):
try:
parsed = ast.parse(entry)
except SyntaxError:
continue
Visitor().visit(parsed)
return import_cache
评论列表
文章目录