import os import re from ..manifester.manifester import Manifester from .language_scanner import LanguageScanner class GoScanner(LanguageScanner): """Scanner that checks Go files for potential porting issues.""" def __init__(self) -> None: self.LANGUAGE_NAME = 'go' self.LANGUAGE_VERSION_RE = r'^go (?P<version>[\w\.]*)$' super().__init__() def scan_file_object(self, filename, file_object, report): """Scans the provided file and adds issues, remarks or errors as needed to the report. Args: filename: The name of the file being checked. file_object: The file contents. report: The report being generated. """ if os.path.basename(filename) in self.DEPENDENCY_FILES: file_contents = file_object.read() go_match = re.findall(self.LANGUAGE_VERSION_RE, file_contents, re.MULTILINE) if go_match and go_match[0]: self.INSTALLED_VERSION = go_match[0] self.add_language_remarks(report) manifester = Manifester() dependencies = manifester.get_dependencies(filename, file_object, report) self.add_library_remarks(dependencies, report)