From 11422d43649a3a61c94fbdbba3ec802228c2406b Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Wed, 17 Jun 2026 12:19:54 +0200 Subject: [PATCH] feat(cli): add stubs command --- midas/cli/commands/__init__.py | 1 + midas/cli/commands/stubs.py | 27 +++++++++++++++++++++++++++ midas/cli/main.py | 1 + 3 files changed, 29 insertions(+) create mode 100644 midas/cli/commands/stubs.py diff --git a/midas/cli/commands/__init__.py b/midas/cli/commands/__init__.py index 4a3c2a8..0a38d36 100644 --- a/midas/cli/commands/__init__.py +++ b/midas/cli/commands/__init__.py @@ -4,5 +4,6 @@ from .format import format as format from .highlight import highlight as highlight from .parse import parse as parse from .registry import dump_registry as dump_registry +from .stubs import stubs as stubs from .types import types as types from .validate import validate as validate diff --git a/midas/cli/commands/stubs.py b/midas/cli/commands/stubs.py new file mode 100644 index 0000000..98b3cd4 --- /dev/null +++ b/midas/cli/commands/stubs.py @@ -0,0 +1,27 @@ +import ast +from pathlib import Path +from typing import TextIO + +import click + +from midas.checker.checker import TypeChecker +from midas.generator.stubs import StubsGenerator + + +@click.command(help="Generate stubs from Midas definitions") +@click.argument("file", type=click.File("r")) +@click.option("-o", "--output", type=click.File("w"), default="-") +def stubs( + file: TextIO, + output: TextIO, +): + source_path: Path = Path(file.name).resolve() + + checker = TypeChecker() + checker.import_midas(source_path) + + generator = StubsGenerator(checker.types) + module: ast.Module = generator.generate_stubs() + module = ast.fix_missing_locations(module) + + output.write(ast.unparse(module)) diff --git a/midas/cli/main.py b/midas/cli/main.py index 084adf4..05db15e 100644 --- a/midas/cli/main.py +++ b/midas/cli/main.py @@ -18,6 +18,7 @@ midas.add_command(commands.highlight) midas.add_command(commands.parse) midas.add_command(commands.dump_registry) midas.add_command(commands.types) +midas.add_command(commands.stubs) midas.add_command(commands.validate)