in nubia/internal/ui/lexer.py [0:0]
def command_callback(lexer, match):
"""
When matching a command, the lexer would look up the command registry to
decide on how to highlight the command. We will emit Name.Command if this is
a valid command, otherwise we emit Text. We also take care of the
sub-commands if this is a super command. Otherwise, we consider the second
argument a positional argument in this case.
"""
command = match.group(1)
# We do need to know whether we are parsing two groups (command) or four
# (command with subcommand)
command_with_argument = len(match.groups()) > 2
ctx = context.get_context()
cmd = ctx.registry.find_command(command.strip())
# We know this command
command_token = Name.InvalidCommand
subcommand_token = Name.InvalidCommand
if cmd:
command_token = Name.Command
# Now, let's see if this is a super command or not.
if command_with_argument:
if cmd.super_command:
# That's a sub-command, is this a valid sub-command?
subcmd = match.group(3)
if cmd.has_subcommand(subcmd):
subcommand_token = Name.SubCommand
else:
# Just a positional
subcommand_token = Name.Symbol
yield (match.start(1), command_token, command)
# matches the spaces
yield (match.start(2), Text, match.group(2))
if command_with_argument:
yield (match.start(3), subcommand_token, match.group(3))
# matches the spaces
yield (match.start(4), Text, match.group(4))