示例#1
0
def add_import(pycore, pymodule, module_name, name=None):
    imports = get_module_imports(pycore, pymodule)
    candidates = []
    names = []
    # from mod import name
    if name is not None:
        from_import = FromImport(module_name, 0, [(name, None)])
        names.append(name)
        candidates.append(from_import)
    # from pkg import mod
    if '.' in module_name:
        pkg, mod = module_name.rsplit('.', 1)
        candidates.append(FromImport(pkg, 0, [(mod, None)]))
        if name:
            names.append(mod + '.' + name)
        else:
            names.append(mod)
    # import mod
    normal_import = NormalImport([(module_name, None)])
    if name:
        names.append(module_name + '.' + name)
    else:
        names.append(module_name)

    candidates.append(normal_import)

    visitor = actions.AddingVisitor(pycore, candidates)
    selected_import = normal_import
    for import_statement in imports.imports:
        if import_statement.accept(visitor):
            selected_import = visitor.import_info
            break
    imports.add_import(selected_import)
    imported_name = names[candidates.index(selected_import)]
    return imports.get_changed_source(), imported_name
示例#2
0
 def remove_duplicates(self):
     added_imports = []
     for import_stmt in self.imports:
         visitor = actions.AddingVisitor(self.project,
                                         [import_stmt.import_info])
         for added_import in added_imports:
             if added_import.accept(visitor):
                 import_stmt.empty_import()
         else:
             added_imports.append(import_stmt)
示例#3
0
 def add_import(self, import_info):
     visitor = actions.AddingVisitor(self.project, [import_info])
     for import_statement in self.imports:
         if import_statement.accept(visitor):
             break
     else:
         lineno = self._get_new_import_lineno()
         blanks = self._get_new_import_blanks()
         self.imports.append(importinfo.ImportStatement(
                             import_info, lineno, lineno,
                             blank_lines=blanks))
示例#4
0
def add_import(project, pymodule, module_name, name=None):
    imports = get_module_imports(project, pymodule)
    candidates = []
    names = []
    selected_import = None
    # from mod import name
    if name is not None:
        from_import = FromImport(module_name, 0, [(name, None)])
        names.append(name)
        candidates.append(from_import)
    # from pkg import mod
    if "." in module_name:
        pkg, mod = module_name.rsplit(".", 1)
        from_import = FromImport(pkg, 0, [(mod, None)])
        if project.prefs.get("prefer_module_from_imports"):
            selected_import = from_import
        candidates.append(from_import)
        if name:
            names.append(mod + "." + name)
        else:
            names.append(mod)
    # import mod
    normal_import = NormalImport([(module_name, None)])
    if name:
        names.append(module_name + "." + name)
    else:
        names.append(module_name)

    candidates.append(normal_import)

    visitor = actions.AddingVisitor(project, candidates)
    if selected_import is None:
        selected_import = normal_import
    for import_statement in imports.imports:
        if import_statement.accept(visitor):
            selected_import = visitor.import_info
            break
    imports.add_import(selected_import)
    imported_name = names[candidates.index(selected_import)]
    return imports.get_changed_source(), imported_name