[Lldb-commits] [lldb] bcae3cd - [lldb] Print the enum values and their description in the help output

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Thu Jul 14 21:37:21 PDT 2022


Author: Jonas Devlieghere
Date: 2022-07-14T21:18:08-07:00
New Revision: bcae3cdbd029210e9ecf42f07d38cc4ed4a95230

URL: https://github.com/llvm/llvm-project/commit/bcae3cdbd029210e9ecf42f07d38cc4ed4a95230
DIFF: https://github.com/llvm/llvm-project/commit/bcae3cdbd029210e9ecf42f07d38cc4ed4a95230.diff

LOG: [lldb] Print the enum values and their description in the help output

Print the enum values and their description in the help output for
argument values. Until now, there was no way to get these values and
their description.

Example output:

(lldb) help <description-verbosity>
  <description-verbosity> -- How verbose the output of 'po' should be.

     compact : Only show the description string
     full    : Show the full output, including persistent variable's
               name and type

Differential revision: https://reviews.llvm.org/D129707

Added: 
    

Modified: 
    lldb/source/Interpreter/CommandObject.cpp
    lldb/test/API/commands/help/TestHelp.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp
index 609ac57e2ac16..719cfbc9e8023 100644
--- a/lldb/source/Interpreter/CommandObject.cpp
+++ b/lldb/source/Interpreter/CommandObject.cpp
@@ -16,6 +16,7 @@
 #include <cstdlib>
 
 #include "lldb/Core/Address.h"
+#include "lldb/Interpreter/CommandOptionArgumentTable.h"
 #include "lldb/Interpreter/Options.h"
 #include "lldb/Utility/ArchSpec.h"
 #include "llvm/ADT/ScopeExit.h"
@@ -398,9 +399,28 @@ void CommandObject::GetArgumentHelp(Stream &str, CommandArgumentType arg_type,
       interpreter.OutputHelpText(str, name_str.GetString(), "--", help_text,
                                  name_str.GetSize());
     }
-  } else
+  } else {
     interpreter.OutputFormattedHelpText(str, name_str.GetString(), "--",
                                         entry->help_text, name_str.GetSize());
+
+    // Print enum values and their description if any.
+    OptionEnumValues enum_values = g_argument_table[arg_type].enum_values;
+    if (!enum_values.empty()) {
+      str.EOL();
+      size_t longest = 0;
+      for (const OptionEnumValueElement &element : enum_values)
+        longest =
+            std::max(longest, llvm::StringRef(element.string_value).size());
+      str.IndentMore(5);
+      for (const OptionEnumValueElement &element : enum_values) {
+        str.Indent();
+        interpreter.OutputHelpText(str, element.string_value, ":",
+                                   element.usage, longest);
+      }
+      str.IndentLess(5);
+      str.EOL();
+    }
+  }
 }
 
 const char *CommandObject::GetArgumentName(CommandArgumentType arg_type) {

diff  --git a/lldb/test/API/commands/help/TestHelp.py b/lldb/test/API/commands/help/TestHelp.py
index 6e0cfe4326636..7d19665498568 100644
--- a/lldb/test/API/commands/help/TestHelp.py
+++ b/lldb/test/API/commands/help/TestHelp.py
@@ -318,3 +318,16 @@ def test_help_show_tags(self):
                     "\(does not apply to binary output\)."])
         self.expect("help memory find", patterns=[
                     "--show-tags\n\s+Include memory tags in output."])
+
+    @no_debug_info_test
+    def test_help_show_enum_values(self):
+        """ Check the help output for a argument type contains the enum values
+        and their descriptions. """
+        self.expect("help <log-handler>", substrs=[
+            'The log handle that will be used to write out log messages.',
+            'default'  , 'Use the default (stream) log handler',
+            'stream'   , 'Write log messages to the debugger output stream',
+            'circular' , 'Write log messages to a fixed size circular buffer',
+            'os'       , 'Write log messages to the operating system log',
+        ])
+


        


More information about the lldb-commits mailing list