diff --git a/packages/foreignthon/src/foreignthon/cli.py b/packages/foreignthon/src/foreignthon/cli.py index 2eeb306..411d763 100644 --- a/packages/foreignthon/src/foreignthon/cli.py +++ b/packages/foreignthon/src/foreignthon/cli.py @@ -253,25 +253,39 @@ def compile(file: Path, output: str | None): out_path.parent.mkdir(parents=True, exist_ok=True) out_path.write_text(transpiled, encoding="utf-8") click.echo(f"Compiled: {out_path}") - - + @main.command(context_settings=CONTEXT_SETTINGS) -@click.argument("file", type=click.Path(exists=True, path_type=Path)) -def check(file: Path): - """Validate a foreign-language file without running it.""" +@click.argument("files", nargs=-1, required=True, type=click.Path(exists=True, path_type=Path)) +def check(files: tuple): + """Validate one or more foreign-language files without running them.""" import ast + import io + import tokenize as _tokenize - detected_lang = _lang_from_file(file) - try: - pack = _load_effective_pack(file, detected_lang) - transpiled = transpile_file(file, pack=pack) - ast.parse(transpiled) - click.echo(f"✓ {file.name} looks good.") - except SyntaxError as e: - click.echo(f"✗ Syntax error: {e}", err=True) - sys.exit(1) - except Exception as e: - click.echo(f"✗ {e}", err=True) + from .transpiler import _build_mapping, transpile_file + + failed = False + for file in files: + detected_lang = _lang_from_file(file) + try: + pack = _load_effective_pack(file, detected_lang) + transpiled = transpile_file(file, pack=pack) + ast.parse(transpiled) + + source = file.read_text(encoding="utf-8") + mapping = _build_mapping(pack) + tokens = list(_tokenize.generate_tokens(io.StringIO(source).readline)) + count = sum(1 for t in tokens if t.type == _tokenize.NAME and t.string in mapping) + + click.echo(f"✓ {file.name} looks good. ({count} tokens translated)") + except SyntaxError as e: + click.echo(f"✗ {file.name}: Syntax error: {e}", err=True) + failed = True + except Exception as e: + click.echo(f"✗ {file.name}: {e}", err=True) + failed = True + + if failed: sys.exit(1) @main.command(context_settings=CONTEXT_SETTINGS)