@@ -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