| from pathlib import Path |
|
|
| from backend.chunking.fallback_chunker import DOC_LANGUAGES, fallback_chunk_file |
| from backend.chunking.language_detector import detect_language |
| from backend.chunking.semantic_chunker import extract_semantic_chunks |
| from backend.chunking.tree_sitter_parser import tree_sitter_parser |
| from backend.core.constants import TREE_SITTER_LANGUAGES |
| from backend.database.schemas import Chunk |
|
|
|
|
| def chunk_file(path: Path, repo_root: Path, repo_id: str) -> list[Chunk]: |
| path = path.resolve() |
| repo_root = repo_root.resolve() |
| language = detect_language(path) |
| text = path.read_text(encoding="utf-8", errors="ignore") |
|
|
| if language in DOC_LANGUAGES: |
| return fallback_chunk_file(path, repo_root, repo_id, language) |
|
|
| if language in TREE_SITTER_LANGUAGES: |
| parsed = tree_sitter_parser.parse(text, language) |
| if parsed is not None: |
| chunks = extract_semantic_chunks(parsed, path, repo_root, repo_id, language) |
| if chunks: |
| return chunks |
|
|
| return fallback_chunk_file(path, repo_root, repo_id, language) |
|
|