Initial upload with CI/CD workflow
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-02 18:27:16 +00:00
parent dcb506867a
commit 1c3ef45aaa

81
src/models.py Normal file
View File

@@ -0,0 +1,81 @@
"""Data models for Code Pattern Search CLI."""
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class MatchLocation:
"""Represents a location where a pattern matched."""
file_path: str
line_number: int
line_content: str
match_start: int
match_end: int
def to_dict(self) -> dict:
"""Convert to dictionary."""
return {
"file_path": self.file_path,
"line_number": self.line_number,
"line_content": self.line_content,
"match_start": self.match_start,
"match_end": self.match_end,
}
@dataclass
class SearchResult:
"""Represents search results from a single repository."""
repo_name: str
repo_url: str
stars: int
description: Optional[str] = None
language: Optional[str] = None
matches: list[MatchLocation] = field(default_factory=list)
total_matches: int = 0
score: float = 0.0
def to_dict(self) -> dict:
"""Convert to dictionary."""
return {
"repo_name": self.repo_name,
"repo_url": self.repo_url,
"stars": self.stars,
"description": self.description,
"language": self.language,
"matches": [m.to_dict() for m in self.matches],
"total_matches": self.total_matches,
"score": self.score,
}
def get_match_summary(self) -> dict[str, int]:
"""Get a summary of matches grouped by file."""
summary: dict[str, int] = {}
for match in self.matches:
summary[match.file_path] = summary.get(match.file_path, 0) + 1
return summary
@dataclass
class ExportConfig:
"""Configuration for export options."""
format: str = "json"
include_metadata: bool = True
pretty_print: bool = True
@dataclass
class SearchConfig:
"""Configuration for search options."""
pattern: str
language: Optional[str] = None
stars_min: int = 0
stars_max: Optional[int] = None
max_repos: int = 10
use_cache: bool = True
preset: Optional[str] = None