Move the blade/elixir/razor/zig extractors and the shared primitives (_make_id, _file_stem, _read_text, _LANGUAGE_BUILTIN_GLOBALS) out of the 13k-line extract.py into a graphify/extractors/ package: base.py holds the shared pieces, one module per language, and __init__ seeds a LANGUAGE_EXTRACTORS registry for future dispatch. Import direction is strictly extract.py -> extractors/ (extractors never import extract), so there is no cycle. extract.py re-exports every moved name, leaving all callers and the dispatch table unchanged. Ported from PR #1291 by @TheFedaikin onto current v8 as a thin, behavior-neutral slice (the PR itself was branched 31 commits behind and entangled with unrelated files). Verified the moved code is byte-identical to current v8 before porting; full suite 2393 passed, the zig/elixir/razor/blade extractor tests pass, ruff and skillgen --check clean. Also gitignores .DS_Store. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
24 lines
847 B
Python
24 lines
847 B
Python
"""Per-language extractors, incrementally migrated out of graphify/extract.py.
|
|
|
|
Dispatch still flows through graphify.extract (the facade re-exports every
|
|
moved name), so importing from graphify.extract keeps working unchanged.
|
|
LANGUAGE_EXTRACTORS is the registry seed; wiring dispatch through it is a
|
|
later, separate step. See MIGRATION.md for how to port another language.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
from typing import Callable
|
|
|
|
from graphify.extractors.blade import extract_blade
|
|
from graphify.extractors.elixir import extract_elixir
|
|
from graphify.extractors.razor import extract_razor
|
|
from graphify.extractors.zig import extract_zig
|
|
|
|
LANGUAGE_EXTRACTORS: dict[str, Callable[[Path], dict]] = {
|
|
"blade": extract_blade,
|
|
"elixir": extract_elixir,
|
|
"razor": extract_razor,
|
|
"zig": extract_zig,
|
|
}
|