Skip to content

Commit 86074d8

Browse files
committed
organizing repl settings panels
1 parent 1061c94 commit 86074d8

1 file changed

Lines changed: 35 additions & 9 deletions

File tree

‎src/hyperbase/cli/repl.py‎

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,22 @@ def cmd_help(self, args: list) -> bool:
659659
return False
660660

661661
def cmd_settings(self, args: list) -> bool:
662+
main_names = sorted({"parser", *BUILTIN_REPL_SETTINGS.keys()})
663+
self.console.print()
664+
self._render_settings_section("Main Settings", main_names)
665+
if self.parser is not None and self.parser_name is not None:
666+
parser_names = sorted(
667+
set(type(self.parser).accepted_params().keys())
668+
| set(self._extra_settings.keys())
669+
)
670+
self._render_settings_section(
671+
f"{self.parser_name} Parser Settings",
672+
parser_names,
673+
)
674+
self.console.print()
675+
return False
676+
677+
def _render_settings_section(self, title: str, names: list[str]) -> None:
662678
table = Table(
663679
show_header=True,
664680
header_style="bold magenta",
@@ -667,17 +683,27 @@ def cmd_settings(self, args: list) -> bool:
667683
)
668684
table.add_column("Setting", style="cyan")
669685
table.add_column("Value", style="green")
670-
671-
for key, value in self.settings.items():
672-
if value is not None:
673-
table.add_row(key, str(value))
674-
675-
self.console.print()
686+
table.add_column("Description", style="dim white")
687+
for name in names:
688+
value = self.settings.get(name)
689+
value_text = "[dim]—[/dim]" if value is None else str(value)
690+
table.add_row(name, value_text, self._setting_description(name))
676691
self.console.print(
677-
Panel(table, title="[bold]Current Settings[/bold]", border_style="blue")
692+
Panel(table, title=f"[bold]{title}[/bold]", border_style="blue")
678693
)
679-
self.console.print()
680-
return False
694+
695+
def _setting_description(self, name: str) -> str:
696+
if name == "parser":
697+
return "Active parser plugin."
698+
if name in BUILTIN_REPL_SETTINGS:
699+
return BUILTIN_REPL_SETTINGS[name].get("description", "")
700+
if name in self._extra_settings:
701+
return self._extra_settings[name].get("description", "")
702+
if self.parser is not None:
703+
params = type(self.parser).accepted_params()
704+
if name in params:
705+
return params[name].get("description", "")
706+
return ""
681707

682708
def _setting_type(self, name: str) -> type | None:
683709
"""Look up the declared type for *name* across all sources."""

0 commit comments

Comments
 (0)