Skip to content

Commit 13bca4c

Browse files
fix: adjust help printout formatting
1 parent 735816f commit 13bca4c

1 file changed

Lines changed: 34 additions & 17 deletions

File tree

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

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,12 @@ def _get_extension_suppressions(mod_loaders):
519519
def _display_cached_help(self, help_index):
520520
"""Display help from cached help index without loading modules."""
521521
from azure.cli.core._help import WELCOME_MESSAGE, PRIVACY_STATEMENT
522+
import re
523+
524+
def _strip_ansi(text):
525+
"""Remove ANSI color codes from text for length calculation."""
526+
ansi_escape = re.compile(r'\x1b\[[0-9;]*m')
527+
return ansi_escape.sub('', text)
522528

523529
# Show privacy statement if first run
524530
ran_before = self.cli_ctx.config.getboolean('core', 'first_run', fallback=False)
@@ -537,38 +543,49 @@ def _display_cached_help(self, help_index):
537543
groups = help_index.get('groups', {})
538544
commands = help_index.get('commands', {})
539545

540-
# Calculate max name length including tags for proper alignment
541-
def _get_display_len(name, tags):
542-
tag_len = len(tags) + 1 if tags else 0 # +1 for space before tags
543-
return len(name) + tag_len
544-
545-
max_len = 0
546-
if groups:
547-
max_len = max(max_len, max(_get_display_len(name, item.get('tags', '')) for name, item in groups.items()))
548-
if commands:
549-
max_len = max(max_len, max(_get_display_len(name, item.get('tags', '')) for name, item in commands.items()))
550-
551546
# Display subgroups
552547
if groups:
553548
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+
554557
for name in sorted(groups.keys()):
555558
item = groups[name]
556559
tags = item.get('tags', '')
557560
summary = item.get('summary', '')
558-
name_with_tags = f"{name} {tags}" if tags else name
559-
padding = ' ' * (max_len - _get_display_len(name, tags))
560-
print(f" {name_with_tags}{padding} : {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}")
561568

562569
# Display commands
563570
if commands:
564571
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+
565580
for name in sorted(commands.keys()):
566581
item = commands[name]
567582
tags = item.get('tags', '')
568583
summary = item.get('summary', '')
569-
name_with_tags = f"{name} {tags}" if tags else name
570-
padding = ' ' * (max_len - _get_display_len(name, tags))
571-
print(f" {name_with_tags}{padding} : {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}")
572589

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

0 commit comments

Comments
 (0)