in playground/tree-sitter/build.py [0:0]
def main():
"""Build WASM files for all supported tree-sitter dependencies."""
"""Main entry point with argument parsing."""
parser = argparse.ArgumentParser(
description="Build tree-sitter playground with WASM files"
)
parser.add_argument(
"--dist-dir",
"-d",
type=Path,
help="Directory to copy playground files and build WASM files to",
default=Path().cwd() / "dist",
)
args = parser.parse_args()
dist_dir = Path(args.dist_dir)
if dist_dir.exists():
print(f"Dist directory {dist_dir} already exists, clearing it...")
shutil.rmtree(dist_dir)
proc = run_command(["git", "rev-parse", "--show-toplevel"])
repo_root = Path(proc.stdout.strip())
print(f"Using repo root: {repo_root}")
print()
print("Instantiating index.html.template to dist directory...")
dist_dir.mkdir(parents=True, exist_ok=True)
instantiate_index_html(_HERE / "index.html.template", dist_dir / "index.html")
# Copy concrete syntax integration files
print("Copying concrete syntax integration files...")
concrete_syntax_files = ["concrete-syntax.css", "concrete-syntax.js"]
for file_name in concrete_syntax_files:
src_file = _HERE / file_name
if src_file.exists():
dest_file = dist_dir / file_name
print(f"Copying {src_file} to {dest_file}")
shutil.copy2(src_file, dest_file)
else:
raise FileNotFoundError(f"Required concrete syntax file not found: {src_file}")
# Build and copy concrete syntax WASM files
print("\nBuilding concrete syntax WASM files...")
concrete_syntax_pkg_dir = build_concrete_syntax_wasm(repo_root)
assets_dir = dist_dir / "assets"
assets_dir.mkdir(exist_ok=True)
for wasm_file in ["concrete_syntax.js", "concrete_syntax_bg.wasm"]:
src_file = concrete_syntax_pkg_dir / wasm_file
dest_file = assets_dir / wasm_file
print(f"Copying {src_file} to {dest_file}")
shutil.copy2(src_file, dest_file)
print("\nBuilding WASM files for all supported tree-sitter dependencies...")
print("Extracting tree-sitter dependencies to build WASM grammars...")
deps = extract_tree_sitter_deps(repo_root)
if not deps:
raise RuntimeError("No supported tree-sitter dependencies found")
print(f"Found {len(deps)} supported tree-sitter dependencies:")
for lang_name, pkg_name, _ in deps:
print(f" - {pkg_name} ({lang_name})")
with tempfile.TemporaryDirectory() as temp_dir_str:
temp_dir = Path(temp_dir_str)
for lang_name, pkg_name, dep_info in deps:
print(f"\n--- Processing {pkg_name} ---")
grammar_dir = clone_grammar(pkg_name, dep_info, temp_dir)
wasm_file = build_wasm(grammar_dir, pkg_name)
copy_wasm_to_assets(wasm_file, lang_name, assets_dir)
print(f"✓ Successfully built {pkg_name}")
print("\n=== Build Complete ===")
print(f"Successfully built {len(deps)} grammars: {_LANGUAGES}")
print(f"Concrete syntax WASM integration: ✓")
print(f"Output directory: {dist_dir}")