"""Additional command line utilities for the SphinxLanguageServer.""" import argparse import json import sys from typing import List from esbonio.cli import esbonio_converter from esbonio.lsp.sphinx import SphinxConfig def config_cmd(args, extra): if args.to_cli: config_to_cli(args.to_cli) return 0 return cli_to_config(extra) def config_to_cli(config: str): converter = esbonio_converter() conf = converter.structure(json.loads(config), SphinxConfig) print(" ".join(conf.to_cli_args())) return 0 def cli_to_config(cli_args: List[str]): conf = SphinxConfig.from_arguments(cli_args=cli_args) if conf is None: return 1 converter = esbonio_converter() print(json.dumps(converter.unstructure(conf), indent=2)) return 0 cli = argparse.ArgumentParser( prog="esbonio-sphinx", description="Supporting commands and utilities for the SphinxLanguageServer.", ) commands = cli.add_subparsers(title="commands") config = commands.add_parser( "config", usage="%(prog)s [--from-cli] -- ARGS", description="configuration options helper.", ) config.set_defaults(run=config_cmd) mode = config.add_mutually_exclusive_group() mode.add_argument( "--from-cli", action="store_true", default=True, help="convert sphinx-build cli options to esbonio's initialization options.", ) mode.add_argument( "--to-cli", help="convert esbonio's initialization options to sphinx-build options", ) def main(): try: idx = sys.argv.index("--") args, extra = sys.argv[1:idx], sys.argv[idx + 1 :] except ValueError: args, extra = sys.argv[1:], None parsed_args = cli.parse_args(args) if hasattr(parsed_args, "run"): return parsed_args.run(parsed_args, extra) cli.print_help() if __name__ == "__main__": sys.exit(main())