in azdev/operations/linter/rules/help_rules.py [0:0]
def _extract_commands_from_example(example_text):
# fold commands spanning multiple lines into one line. Split commands that use pipes
# handle single and double quotes properly
lines = example_text.splitlines()
example_text = ""
quote = None
for line in lines:
for ch in line:
if quote is None:
if ch in ('"', "'"):
quote = ch
elif ch == quote:
quote = None
if quote is None and line.endswith("\\"):
# attach this line with removed '\' and no '\n' (space at the end to keep consistent with initial algorithm)
example_text += line[0:-1] + " "
elif quote is not None:
# attach this line without '\n'
example_text += line
else:
# attach this line with '\n' as no quote and no continuation
example_text += line + "\n"
# this is also for consistency with original algorithm
example_text = example_text.replace("\\ ", " ")
commands = example_text.splitlines()
processed_commands = []
for command in commands: # filter out commands
command.strip()
if command.startswith("az"): # if this is a single az command add it.
processed_commands.append(command)
for re_prog in [_CMD_SUB_1, _CMD_SUB_2]:
start = 0
match = re_prog.search(command, start)
while match: # while there is a nested az command of type 1 $( az ...)
processed_commands.append(match.group(1).strip()) # add it
start = match.end(1) # get index of rest of string
match = re_prog.search(command, start) # attempt to get next match
return processed_commands