Files
2026-06-18 17:21:58 +02:00

65 lines
1.9 KiB
Python

"""Plugin for validating expect commands.
See https://www.tcl-lang.org/man/expect5.31/expect.1.html for reference.
"""
from tclint.commands.builtin import commands as builtins
from tclint.commands.checks import (
CommandArgError,
check_arg_spec,
map_switches,
)
def close(args, parser):
"""close [-slave] [-onexec 0|1] [-i spawn_id]"""
# Fancy handling since it seems like expect will fall back to Tcl's built-in close
# if none of its switches match, and we can't express this in a static arg spec.
# Try to replicate the logic here, reusing the functions used by `check_arg_spec`.
if len(args) == 0:
# No args is okay.
return None
expect_switches = {
"-slave": {"required": False, "repeated": False, "value": None},
"-onexec": {
"required": False,
"repeated": False,
"value": {"type": "any"},
"metavar": "0|1",
},
"-i": {
"required": False,
"repeated": False,
"value": {"type": "any"},
"metavar": "spawn_id",
},
}
mapped, positionals = map_switches(args, expect_switches, "close")
if len(mapped) > 0:
if len(positionals) > 0:
raise CommandArgError(
f"too many arguments for close: got {len(positionals)}, expected"
" no more than 0"
)
return None
return check_arg_spec("close", args, parser, builtins["close"])
commands = {
"close": close,
"exit": {
"positionals": [
# TODO: break out into switches once we have a way to support -onexit's
# optional value.
{"name": "opts", "value": {"type": "variadic"}, "required": False},
# TODO: add (positive) integer type.
{"name": "status", "value": {"type": "any"}, "required": False},
],
},
}