def test_of(self) -> None: # just import res = ImportStatement.of('import tensorflow as tf') assert res is not None assert res.from_what == '' assert len(res.import_as_parts) == 1 assert res.import_as_parts[0].import_what == 'tensorflow' assert res.import_as_parts[0].as_what == 'tf' # from import res = ImportStatement.of('from typing import Dict, List, Optional') assert res is not None assert res.from_what == 'typing' assert len(res.import_as_parts) == 3 assert res.import_as_parts[0].import_what == 'Dict' assert res.import_as_parts[2].as_what == '' # complex pattern res = ImportStatement.of( 'from typing import ( Dict, List, Optional, ) ') # noqa assert res is not None assert res.from_what == 'typing' assert len(res.import_as_parts) == 3 assert res.import_as_parts[0].import_what == 'Dict' assert res.import_as_parts[2].as_what == ''
def auto_import(snip: Any, statement: str, level: int) -> None: """ Hookable funciton for auto-importing when snippet expansion """ lines = buf2lines(snip.buffer) # get import blocks begin_end_indices = get_import_block_indices(lines) # get import_statements for each block maybe_import_statements_lst = [ ImportStatement.of_lines(lines[begin_index:end_index]) for begin_index, end_index in begin_end_indices ] import_statements_lst = [] for maybe in maybe_import_statements_lst: if maybe is not None: import_statements_lst.append(maybe) # Constructing import sentence should be added. import_stmt_to_add = ImportStatement.of(statement) if import_stmt_to_add is None: return None # constructing import import statements if len(import_statements_lst) <= level: import_statements_lst.append([import_stmt_to_add]) else: import_statements_lst[level].append(import_stmt_to_add) # Merge the imports merged_import_statements = [ ImportStatement.merge_list(import_statements) for import_statements in import_statements_lst ] # Make organized import blocks import_lines: List[str] = [] for i, merged_import_statement in enumerate(merged_import_statements): for import_statement in merged_import_statement: import_lines += import_statement.to_lines() if i < len(merged_import_statements) - 1: import_lines.append('') if not begin_end_indices: fitst_line_num = get_first_line_num(lines) snip.buffer[fitst_line_num:fitst_line_num] = import_lines else: snip.buffer[ begin_end_indices[0][0]:begin_end_indices[-1][-1]] = import_lines return
def nayvy_import_stmt(statement: str, level: int) -> None: lines = vim.current.buffer[:] # get import blocks begin_end_indices = get_import_block_indices(lines) # get import_statements for each block maybe_import_statements_lst = [ ImportStatement.of_lines(lines[begin_index:end_index]) for begin_index, end_index in begin_end_indices ] import_statements_lst = [] for maybe in maybe_import_statements_lst: if maybe is not None: import_statements_lst.append(maybe) # Constructing import sentence should be added. import_stmt_to_add = ImportStatement.of(statement) if import_stmt_to_add is None: return None # constructing import import statements if len(import_statements_lst) <= level: import_statements_lst.append([import_stmt_to_add]) else: import_statements_lst[level].append(import_stmt_to_add) # Merge the imports merged_import_statements = [ ImportStatement.merge_list(import_statements) for import_statements in import_statements_lst ] # Make organized import blocks import_lines: List[str] = [] for i, merged_import_statement in enumerate(merged_import_statements): for import_statement in merged_import_statement: import_lines += import_statement.to_lines() if i < len(merged_import_statements) - 1: import_lines.append('') if not begin_end_indices: fitst_line_num = get_first_line_num(lines) vim.current.buffer[fitst_line_num:fitst_line_num] = import_lines else: block_begin_index = begin_end_indices[0][0] block_end_index = begin_end_indices[-1][-1] vim.current.buffer[block_begin_index:block_end_index] = import_lines return