def main()

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}")