Files
HappyOnigiri-ComfyUI-Meld/check_scripts/unified_ast_checks.py
T

70 lines
2.3 KiB
Python

#!/usr/bin/env python3
import ast
import os
import sys
# Add the current directory to sys.path so we can import from .common
sys.path.append(os.path.dirname(__file__))
from common.abstract_check import ASTChecker
from common.api_response_checker import ApiResponseChecker
from common.api_usage_check import ApiUsageChecker
from common.dependency_check import DependencyChecker
from common.sqlite_type_checker import SqliteCursorTypeChecker
def run_ast_checks() -> None:
checkers_classes: list[type[ASTChecker]] = [
DependencyChecker,
ApiUsageChecker,
ApiResponseChecker,
SqliteCursorTypeChecker,
]
# Collect all files that need to be checked and which checkers apply to them
file_to_checkers: dict[str, list[ASTChecker]] = {}
for checker_class in checkers_classes:
# We need an instance to call get_target_files, but we'll create real instances per file
temp_instance = checker_class("")
targets = temp_instance.get_target_files()
for target in targets:
abs_path = os.path.abspath(target)
if abs_path not in file_to_checkers:
file_to_checkers[abs_path] = []
file_to_checkers[abs_path].append(checker_class(target))
total_errors = []
files_processed = 0
for file_path, checkers in sorted(file_to_checkers.items()):
if not os.path.exists(file_path):
continue
try:
with open(file_path, encoding="utf-8") as f:
content = f.read()
tree = ast.parse(content, filename=file_path)
files_processed += 1
for checker in checkers:
checker.check(tree)
total_errors.extend(checker.errors)
except SyntaxError as e:
total_errors.append(f"{file_path}:{e.lineno}: Syntax error: {e.msg}")
except Exception as e:
total_errors.append(f"{file_path}:0: Unexpected error: {e}")
if total_errors:
print(f"AST Checks Failed ({files_processed} files checked):")
for error in total_errors:
print(f" {error}")
sys.exit(1)
else:
print(f"AST Checks Passed: All {files_processed} files cleared.")
sys.exit(0)
if __name__ == "__main__":
run_ast_checks()