Skip to content

Commit 542346a

Browse files
fix: adjust alignment of printout
1 parent 13bca4c commit 542346a

1 file changed

Lines changed: 63 additions & 42 deletions

File tree

src/azure-cli-core/azure/cli/core/__init__.py

Lines changed: 63 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -535,57 +535,78 @@ def _strip_ansi(text):
535535
# Show welcome message
536536
print(WELCOME_MESSAGE)
537537

538-
# Show Group header (to match normal help output)
539538
print("\nGroup")
540539
print(" az")
541540

541+
# Import knack's formatting functions
542+
from knack.help import _print_indent, FIRST_LINE_PREFIX, _get_hanging_indent
543+
542544
# Separate groups and commands
543-
groups = help_index.get('groups', {})
544-
commands = help_index.get('commands', {})
545+
groups_data = help_index.get('groups', {})
546+
commands_data = help_index.get('commands', {})
547+
548+
# Helper function matching knack's _get_line_len
549+
def _get_line_len(name, tags):
550+
tags_len = len(_strip_ansi(tags))
551+
return len(name) + tags_len + (2 if tags_len else 1)
552+
553+
# Helper function matching knack's _get_padding_len
554+
def _get_padding_len(max_len, name, tags):
555+
line_len = _get_line_len(name, tags)
556+
if tags:
557+
pad_len = max_len - line_len + 1
558+
else:
559+
pad_len = max_len - line_len
560+
return pad_len
545561

546-
# Display subgroups
547-
if groups:
562+
# Build items lists and calculate max_line_len across ALL items (groups + commands)
563+
# This ensures colons align across both sections
564+
max_line_len = 0
565+
groups_items = []
566+
for name in sorted(groups_data.keys()):
567+
item = groups_data[name]
568+
tags = item.get('tags', '')
569+
groups_items.append((name, tags, item.get('summary', '')))
570+
max_line_len = max(max_line_len, _get_line_len(name, tags))
571+
572+
commands_items = []
573+
for name in sorted(commands_data.keys()):
574+
item = commands_data[name]
575+
tags = item.get('tags', '')
576+
commands_items.append((name, tags, item.get('summary', '')))
577+
max_line_len = max(max_line_len, _get_line_len(name, tags))
578+
579+
# Display groups
580+
if groups_items:
548581
print("\nSubgroups:")
549-
# Calculate max line length for groups only (matching knack's logic)
550-
max_len = 0
551-
for name, item in groups.items():
552-
tags = item.get('tags', '')
553-
tags_len = len(_strip_ansi(tags))
554-
line_len = len(name) + tags_len + (2 if tags_len else 1)
555-
max_len = max(max_len, line_len)
556-
557-
for name in sorted(groups.keys()):
558-
item = groups[name]
559-
tags = item.get('tags', '')
560-
summary = item.get('summary', '')
561-
# Calculate padding (matching knack's _get_padding_len logic)
562-
tags_len = len(_strip_ansi(tags))
563-
line_len = len(name) + tags_len + (2 if tags_len else 1)
564-
pad_len = max_len - line_len + (1 if tags else 0)
565-
padding = ' ' * pad_len
566-
# Format matches knack: name + padding + tags + " : " + summary
567-
print(f" {name}{padding}{tags} : {summary}")
582+
indent = 1
583+
LINE_FORMAT = '{name}{padding}{tags}{separator}{summary}'
584+
for name, tags, summary in groups_items:
585+
padding = ' ' * _get_padding_len(max_line_len, name, tags)
586+
line = LINE_FORMAT.format(
587+
name=name,
588+
padding=padding,
589+
tags=tags,
590+
separator=FIRST_LINE_PREFIX if summary else '',
591+
summary=summary
592+
)
593+
_print_indent(line, indent, _get_hanging_indent(max_line_len, indent))
568594

569595
# Display commands
570-
if commands:
596+
if commands_items:
571597
print("\nCommands:")
572-
# Calculate max line length for commands only
573-
max_len = 0
574-
for name, item in commands.items():
575-
tags = item.get('tags', '')
576-
tags_len = len(_strip_ansi(tags))
577-
line_len = len(name) + tags_len + (2 if tags_len else 1)
578-
max_len = max(max_len, line_len)
579-
580-
for name in sorted(commands.keys()):
581-
item = commands[name]
582-
tags = item.get('tags', '')
583-
summary = item.get('summary', '')
584-
tags_len = len(_strip_ansi(tags))
585-
line_len = len(name) + tags_len + (2 if tags_len else 1)
586-
pad_len = max_len - line_len + (1 if tags else 0)
587-
padding = ' ' * pad_len
588-
print(f" {name}{padding}{tags} : {summary}")
598+
indent = 1
599+
LINE_FORMAT = '{name}{padding}{tags}{separator}{summary}'
600+
for name, tags, summary in commands_items:
601+
padding = ' ' * _get_padding_len(max_line_len, name, tags)
602+
line = LINE_FORMAT.format(
603+
name=name,
604+
padding=padding,
605+
tags=tags,
606+
separator=FIRST_LINE_PREFIX if summary else '',
607+
summary=summary
608+
)
609+
_print_indent(line, indent, _get_hanging_indent(max_line_len, indent))
589610

590611
print("\nTo search AI knowledge base for examples, use: az find \"az \"")
591612

0 commit comments

Comments
 (0)