From 10431e92b35e9d6f804e709a48beec697b3a01c4 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 5 Feb 2026 06:34:43 +0000 Subject: [PATCH] Initial upload: Local AI Commit Reviewer CLI with CI/CD workflow --- src/utils/utils.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/utils/utils.py diff --git a/src/utils/utils.py b/src/utils/utils.py new file mode 100644 index 0000000..b3bf8ae --- /dev/null +++ b/src/utils/utils.py @@ -0,0 +1,66 @@ +import logging +import sys +from pathlib import Path + + +def setup_logging(level: str = "info", log_file: str | None = None) -> logging.Logger: + logger = logging.getLogger("aicr") + logger.setLevel(getattr(logging, level.upper(), logging.INFO)) + + formatter = logging.Formatter( + "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + ) + + stream_handler = logging.StreamHandler(sys.stdout) + stream_handler.setFormatter(formatter) + logger.addHandler(stream_handler) + + if log_file: + file_handler = logging.FileHandler(log_file) + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + + return logger + + +def get_file_language(filename: str) -> str: + ext_map = { + ".py": "python", + ".js": "javascript", + ".ts": "typescript", + ".go": "go", + ".rs": "rust", + ".java": "java", + ".c": "c", + ".cpp": "cpp", + ".h": "c", + ".hpp": "cpp", + ".jsx": "javascript", + ".tsx": "typescript", + ".rb": "ruby", + ".php": "php", + ".swift": "swift", + ".kt": "kotlin", + ".scala": "scala", + } + ext = Path(filename).suffix.lower() + return ext_map.get(ext, "unknown") + + +def sanitize_output(text: str) -> str: + return text.strip() + + +def truncate_text(text: str, max_length: int = 2000, suffix: str = "...") -> str: + if len(text) <= max_length: + return text + return text[:max_length - len(suffix)] + suffix + + +def format_file_size(size: float) -> str: + KB_SIZE = 1024 + for unit in ["B", "KB", "MB", "GB"]: + if size < KB_SIZE: + return f"{size:.1f}{unit}" + size /= 1024 + return f"{size:.1f}TB"