Merge pull request 'develop' (#7) from develop into main

Reviewed-on: KeshavAnandCode/foreign-thon#7
This commit is contained in:
2026-05-18 16:21:11 +00:00
4 changed files with 33 additions and 19 deletions

View File

@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project] [project]
name = "foreignthon" name = "foreignthon"
version = "0.5.1" version = "0.5.2"
description = "Write Python in any language. Transpiles foreign-language .xx.py files to standard Python." description = "Write Python in any language. Transpiles foreign-language .xx.py files to standard Python."
license = { text = "GPL v3" } license = { text = "GPL v3" }
requires-python = ">=3.9" requires-python = ">=3.9"

View File

@@ -254,24 +254,38 @@ def compile(file: Path, output: str | None):
out_path.write_text(transpiled, encoding="utf-8") out_path.write_text(transpiled, encoding="utf-8")
click.echo(f"Compiled: {out_path}") click.echo(f"Compiled: {out_path}")
@main.command(context_settings=CONTEXT_SETTINGS) @main.command(context_settings=CONTEXT_SETTINGS)
@click.argument("file", type=click.Path(exists=True, path_type=Path)) @click.argument("files", nargs=-1, required=True, type=click.Path(exists=True, path_type=Path))
def check(file: Path): def check(files: tuple):
"""Validate a foreign-language file without running it.""" """Validate one or more foreign-language files without running them."""
import ast import ast
import io
import tokenize as _tokenize
from .transpiler import _build_mapping, transpile_file
failed = False
for file in files:
detected_lang = _lang_from_file(file) detected_lang = _lang_from_file(file)
try: try:
pack = _load_effective_pack(file, detected_lang) pack = _load_effective_pack(file, detected_lang)
transpiled = transpile_file(file, pack=pack) transpiled = transpile_file(file, pack=pack)
ast.parse(transpiled) ast.parse(transpiled)
click.echo(f"{file.name} looks good.")
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: except SyntaxError as e:
click.echo(f"✗ Syntax error: {e}", err=True) click.echo(f" {file.name}: Syntax error: {e}", err=True)
sys.exit(1) failed = True
except Exception as e: except Exception as e:
click.echo(f"{e}", err=True) click.echo(f" {file.name}: {e}", err=True)
failed = True
if failed:
sys.exit(1) sys.exit(1)
@main.command(context_settings=CONTEXT_SETTINGS) @main.command(context_settings=CONTEXT_SETTINGS)

View File

@@ -14,7 +14,7 @@ authors = [
] ]
keywords = ["foreignthon", "spanish", "español"] keywords = ["foreignthon", "spanish", "español"]
dependencies = ["foreignthon>=0.5.1"] dependencies = ["foreignthon>=0.5.2"]
[project.entry-points."foreignthon.langs"] [project.entry-points."foreignthon.langs"]
es = "foreignthon_es" es = "foreignthon_es"

View File

@@ -12,7 +12,7 @@ authors = [
{ name = "Keshav Anand", email = "keshavanand.dev@gmail.com" } { name = "Keshav Anand", email = "keshavanand.dev@gmail.com" }
] ]
keywords = ["foreignthon", "tamil", "தமிழ்"] keywords = ["foreignthon", "tamil", "தமிழ்"]
dependencies = ["foreignthon>=0.5.1"] dependencies = ["foreignthon>=0.5.2"]
[project.entry-points."foreignthon.langs"] [project.entry-points."foreignthon.langs"]
ta = "foreignthon_ta" ta = "foreignthon_ta"