Source code for svst.output

import re

from typing import Optional
from typing_extensions import TypedDict

from svst import constants


class OutputTypedDict(TypedDict):
    file_name: Optional[str]
    line_number: int
    variable_name: str
    variable_scope: str


[docs]def output_structure_constructor( file_name: Optional[str], line_number: int, variable_name: str, variable_scope: str, ) -> OutputTypedDict: """Constructor for dictionary output. Args: file_name: Name of the file being analysed. None when parse_code is used on bare str. line_number: int number of the line where the error occurred. variable_name: Name of the variable where the error occurred. variable_scope: Scope of the variable where the error occurred. Returns: OutputTypedDict(TypedDict): file_name: Optional[str], line_number: int, variable_name: str, variable_scope: str """ return { "file_name": file_name, "line_number": line_number, "variable_name": variable_name, "variable_scope": variable_scope, }
[docs]def output_string_constructor( output_structure: OutputTypedDict, ) -> str: """Constructor for string output. Args: output_structure: file_name: Optional[str], line_number: int, variable_name: str, variable_scope: str Returns: str: {file_name}:{line_number}: error: Variable "{variable_name}" is missing a standalone variable type annotation in the scope "{variable_scope}" [no-untyped-var] """ return ( f"{output_structure['file_name']}:{output_structure['line_number']}: " f"error: {output_structure['variable_name']} is missing a type annotation in " f"scope \"{output_structure['variable_scope']}\" [{constants.ERROR_NAME}]" )
[docs]def output_string_converter_terminal(output_string: str) -> str: """Converts a plain error string into a colored printable one. Args: output_string: Plain `svst` error output string. Returns: Colored printable string. """ match = re.search( r"^(\./)?(.+:)([0-9]+:)(.+:)(.+?(?=\[|))(\[[a-z\-]+])?$", output_string ) if not match: return output_string message: str = f"{match.group(2)}{match.group(3)}\033[31m{match.group(4)}\033[0m{match.group(5)}" if match.group(6): message += f"\033[33m{match.group(6)}\033[0m" return message