def generate(self, element:Element, GC:GenerationContext): acode = element.code imports_list = [] import_statements = [] with GC.let(domain=ExDom): for import_element in acode[1:]: if _is_module_path(import_element): to_import_name = _get_module_path(import_element) imports_list.append(ast.alias(name=to_import_name, asname=None)) elif is_form(import_element.code, "as"): to_import_name = _get_module_path(import_element.code[1]) to_import_asname = _get_name(import_element.code[2]) imports_list.append(ast.alias(name=to_import_name, asname=to_import_asname)) elif is_form(import_element.code) or is_seq(import_element.code): to_import_module_name = _get_module_path(import_element.code[0]) imported_names_from_module = [] for to_import_item_element in import_element.code[1:]: if is_identifier(to_import_item_element): to_import_name = _get_name(to_import_item_element) imported_names_from_module.append(ast.alias(name=to_import_name, asname=None)) elif is_form(to_import_item_element.code, "as"): to_import_name = _get_name(to_import_item_element.code[1]) to_import_asname = _get_name(to_import_item_element.code[2]) imported_names_from_module.append(ast.alias(name=to_import_name, asname=to_import_asname)) import_statements.append(ast.ImportFrom(to_import_module_name, imported_names_from_module, 0)) else: raise CodeGenerationError(import_element.range, "Special form `import` expected an import specifier but found `%s`." "For example:" "```" "import" " a.b.c" " x.y.z as name" " u.v.w( var1, var2 as v )" "```" % succinct_lisp_printer(import_element)) if len(imports_list) > 0: import_statements.append(ast.Import(imports_list)) return import_statements
def generate(self, element: Element, GC: GenerationContext): acode = element.code imports_list = [] import_statements = [] with GC.let(domain=ExDom): for import_element in acode[1:]: if _is_module_path(import_element): to_import_name = _get_module_path(import_element) imports_list.append( ast.alias(name=to_import_name, asname=None)) elif is_form(import_element.code, "as"): to_import_name = _get_module_path(import_element.code[1]) to_import_asname = _get_name(import_element.code[2]) imports_list.append( ast.alias(name=to_import_name, asname=to_import_asname)) elif is_form(import_element.code) or is_seq( import_element.code): to_import_module_name = _get_module_path( import_element.code[0]) imported_names_from_module = [] for to_import_item_element in import_element.code[1:]: if is_identifier(to_import_item_element): to_import_name = _get_name(to_import_item_element) imported_names_from_module.append( ast.alias(name=to_import_name, asname=None)) elif is_form(to_import_item_element.code, "as"): to_import_name = _get_name( to_import_item_element.code[1]) to_import_asname = _get_name( to_import_item_element.code[2]) imported_names_from_module.append( ast.alias(name=to_import_name, asname=to_import_asname)) import_statements.append( ast.ImportFrom(to_import_module_name, imported_names_from_module, 0)) else: raise CodeGenerationError( import_element.range, "Special form `import` expected an import specifier but found `%s`." "For example:" "```" "import" " a.b.c" " x.y.z as name" " u.v.w( var1, var2 as v )" "```" % succinct_lisp_printer(import_element)) if len(imports_list) > 0: import_statements.append(ast.Import(imports_list)) return import_statements
def applies(self, element: Element): return is_seq(element.code)