Add reports, integrations, and utils modules
Some checks failed
CI / test (push) Failing after 13s
CI / build (push) Has been skipped

This commit is contained in:
2026-02-03 07:01:17 +00:00
parent f1e7bd1a24
commit d4ca0f4f27

View File

@@ -0,0 +1,77 @@
"""File finder for VibeGuard."""
import os
from pathlib import Path
from typing import Generator
import pathspec
class FileFinder:
"""Finds files to analyze based on patterns."""
LANGUAGE_EXTENSIONS = {
".py": "python",
".pyi": "python",
".js": "javascript",
".jsx": "javascript",
".ts": "typescript",
".tsx": "typescript",
".go": "go",
".rs": "rust",
}
def __init__(self, ignore_patterns: list[str] | None = None) -> None:
"""Initialize file finder with ignore patterns."""
self.ignore_patterns = ignore_patterns or []
self._spec = pathspec.PathSpec.from_lines("gitwildmatch", self.ignore_patterns)
def find_files(
self, path: str | Path, recursive: bool = True
) -> list[Path]:
"""Find all source files in the given path."""
root = Path(path)
if not root.exists():
return []
if root.is_file() and self._is_source_file(root):
return [root]
files: list[Path] = []
if root.is_dir():
for item in root.rglob("*") if recursive else root.iterdir():
if item.is_file() and self._is_source_file(item):
if not self._should_ignore(item):
files.append(item)
return sorted(files)
def _is_source_file(self, path: Path) -> bool:
"""Check if the file is a supported source file."""
return path.suffix.lower() in self.LANGUAGE_EXTENSIONS
def _should_ignore(self, path: Path) -> bool:
"""Check if the path should be ignored."""
path_str = str(path)
return self._spec.match_file(path_str)
def get_language(self, path: Path) -> str | None:
"""Get the language for a file path."""
return self.LANGUAGE_EXTENSIONS.get(path.suffix.lower())
def get_supported_extensions(self) -> list[str]:
"""Get list of supported file extensions."""
return list(self.LANGUAGE_EXTENSIONS.keys())
def get_language_counts(self, files: list[Path]) -> dict[str, int]:
"""Count files by language."""
counts: dict[str, int] = {}
for file_path in files:
lang = self.get_language(file_path)
if lang:
counts[lang] = counts.get(lang, 0) + 1
return counts