65 lines
1.9 KiB
Python
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},
|
|
],
|
|
},
|
|
}
|