#!/usr/bin/env python3
#
# Print, one per line, every standalone language with a semgrep-<lang>
# grammar dir under lang/semgrep-grammars/src -- i.e. every valid
# `./test-lang <lang>` argument. Sub-dialects that live inside a parent's
# grammar dir (sfapex's soql/sosl, cfml's cfquery/cfscript) aren't
# standalone targets, so they're not listed.
#
# Usage: list-languages [--json]
#
from __future__ import annotations

import argparse
import json

from grammar_registry import grammar_test_targets
from grammar_registry import RegistryError


def main() -> int:
    """Print valid test-lang targets."""
    parser = argparse.ArgumentParser(description="Print valid test-lang targets.")
    parser.add_argument("--json", action="store_true", help="print a JSON array")
    args = parser.parse_args()
    try:
        targets = grammar_test_targets()
    except RegistryError as exc:
        parser.error(str(exc))
    if not targets:
        parser.error("no grammar test targets found")
    if args.json:
        print(json.dumps(targets, separators=(",", ":")))
    else:
        print(*targets, sep="\n")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
