[llvm-branch-commits] [lldb] [lldb][Docs] Show available enum values for settings (PR #224641)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Sep 18 08:58:49 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Nerixyz (Nerixyz)

<details>
<summary>Changes</summary>

All enum settings on the lldb website didn't show the possible values and their default value. This PR uses the TableGen definitions and generates `:enum name: description` entries from them.

I didn't scope the inclusion of available enum values to the `Enum` type. This means that the values are also shown on other types. Notably `Dictionary`. For example on `target.auto-load-scripts-for-modules`, this shows the possible values - without that, you wouldn't know which ones you could input.

You can see a preview at <https://nerixyz.github.io/test-gh-pages/use/settings.html>

---
Full diff: https://github.com/llvm/llvm-project/pull/224641.diff


10 Files Affected:

- (modified) lldb/include/lldb/Core/CMakeLists.txt (+4) 
- (modified) lldb/include/lldb/Interpreter/CMakeLists.txt (+4) 
- (modified) lldb/scripts/gen-property-docs-from-json.py (+72-5) 
- (modified) lldb/source/Core/CMakeLists.txt (+4) 
- (modified) lldb/source/Interpreter/CMakeLists.txt (+4) 
- (modified) lldb/source/Plugins/DynamicLoader/Darwin-Kernel/CMakeLists.txt (+4) 
- (modified) lldb/source/Plugins/JITLoader/GDB/CMakeLists.txt (+4) 
- (modified) lldb/source/Plugins/ObjectFile/PECOFF/CMakeLists.txt (+4) 
- (modified) lldb/source/Plugins/SymbolFile/PDB/CMakeLists.txt (+4) 
- (modified) lldb/source/Target/CMakeLists.txt (+8) 


``````````diff
diff --git a/lldb/include/lldb/Core/CMakeLists.txt b/lldb/include/lldb/Core/CMakeLists.txt
index 9a29e181e5571..53251f2667f82 100644
--- a/lldb/include/lldb/Core/CMakeLists.txt
+++ b/lldb/include/lldb/Core/CMakeLists.txt
@@ -1,3 +1,7 @@
 lldb_tablegen(ModuleListEnums.inc -gen-lldb-option-enum-defs
   SOURCE ModuleListEnums.td
   TARGET LLDBModuleListEnumsGen)
+
+lldb_tablegen(ModuleListEnums.json -dump-json
+  SOURCE ModuleListEnums.td
+  TARGET LLDBModuleListEnumsJsonGen)
diff --git a/lldb/include/lldb/Interpreter/CMakeLists.txt b/lldb/include/lldb/Interpreter/CMakeLists.txt
index 9c9511f6abc43..aa365b9dcc5c7 100644
--- a/lldb/include/lldb/Interpreter/CMakeLists.txt
+++ b/lldb/include/lldb/Interpreter/CMakeLists.txt
@@ -1,3 +1,7 @@
 lldb_tablegen(CommandOptionArgumentTableEnums.inc -gen-lldb-option-enum-defs
   SOURCE CommandOptionArgumentTableEnums.td
   TARGET LLDBCommandOptionArgumentTableEnumsGen)
+
+lldb_tablegen(CommandOptionArgumentTableEnums.json -dump-json
+  SOURCE CommandOptionArgumentTableEnums.td
+  TARGET LLDBCommandOptionArgumentTableEnumsJsonGen)
diff --git a/lldb/scripts/gen-property-docs-from-json.py b/lldb/scripts/gen-property-docs-from-json.py
index 5d90f9f7ec8e1..d873b1c06ac5d 100644
--- a/lldb/scripts/gen-property-docs-from-json.py
+++ b/lldb/scripts/gen-property-docs-from-json.py
@@ -4,8 +4,34 @@
 import json
 import re
 
-
 PropertyDef = Dict[str, Any]
+DefTree = Dict[str, Any]
+EnumValueDef = Dict[str, Any]
+EnumDefDict = Dict[str, Any]
+
+
+ at dataclass
+class EnumValue:
+    value: str
+    name: str
+    description: str
+
+    def __init__(self, definition: EnumValueDef, prefix: str):
+        self.value = prefix + definition["Value"]
+        self.name = definition["Name"]
+        self.description = definition["Description"]
+
+    def matches(self, value: str):
+        return self.value.removeprefix("lldb::") == value.removeprefix("lldb::")
+
+
+ at dataclass
+class EnumDef:
+    items: list[EnumValue]
+
+    def __init__(self, definition: EnumDefDict, tree: DefTree):
+        prefix = definition.get("Prefix", "")
+        self.items = [EnumValue(tree[d["def"]], prefix) for d in definition["Values"]]
 
 
 class Property:
@@ -14,6 +40,8 @@ class Property:
     type: str
     description: str
     default: Optional[str]
+    enum_name: Optional[str]
+    enum_values: Optional[EnumDef]
 
     def __init__(self, definition: PropertyDef):
         self.name = definition["Name"]
@@ -21,10 +49,13 @@ def __init__(self, definition: PropertyDef):
         self.type = definition["Type"]
         self.description = definition.get("Description", "").strip()
         self.default = None
+        self.enum_name = None
+        self.enum_values = None
 
         has_default_unsigned = definition.get("HasDefaultUnsignedValue")
         has_default_bool = definition.get("HasDefaultBooleanValue")
         has_default_str = definition.get("HasDefaultStringValue")
+        has_default_enum = definition.get("HasDefaultEnumValue")
         if has_default_bool == 1:
             assert has_default_unsigned
             self.default = (
@@ -34,6 +65,30 @@ def __init__(self, definition: PropertyDef):
             self.default = str(definition.get("DefaultUnsignedValue", 0))
         elif has_default_str:
             self.default = definition.get("DefaultStringValue")
+        elif has_default_enum and self.type != "Language":
+            self.default = definition.get("DefaultEnumValue")
+
+        enum_values: Optional[str] = definition.get("EnumValues")
+        if enum_values:
+            self.enum_name = enum_values.removeprefix("OptionEnumValues(").removesuffix(
+                ")"
+            )
+
+    def find_enum_values(self, enums: Dict[str, EnumDef]):
+        if self.enum_name is None:
+            return
+
+        self.enum_values = enums[self.enum_name]
+        if self.default is not None:
+            default = next(
+                (v.name for v in self.enum_values.items if v.matches(self.default)),
+                None,
+            )
+            if not default:
+                raise RuntimeError(
+                    f"Failed to find enum value for {self.default} in {self.enum_values}"
+                )
+            self.default = default
 
 
 class PropertyGroup(TypedDict):
@@ -74,6 +129,9 @@ def print_property(f: TextIO, path: str, property: Property):
     f.write(f':type: "{property.type}"\n\n')
     f.write(property.description)
     f.write("\n\n")
+    if property.enum_values:
+        for enum in property.enum_values.items:
+            f.write(f":enum {enum.name}: {enum.description}\n")
     if property.default:
         f.write(f":default: {wrap_inline_code(property.default)}\n")
     # FIXME: add enumerations (":enum {name}: {description}")
@@ -126,16 +184,25 @@ def main():
     parser.add_argument("inputs", nargs="*")
     args = parser.parse_args()
 
-    root = PropertyTree(items={})
+    all_properties: list[Property] = []
+    enums = dict[str, EnumDef]()
+
     for input in args.inputs:
         with open(input, encoding="utf-8") as f:
             properties: dict[str, PropertyDef] = json.load(f)
         for key, prop in properties.items():
             if key.startswith("!"):
                 continue  # tablegen metadata
-            if "Property" not in prop["!superclasses"]:
-                continue  # not a property
-            append_property(root, Property(prop))
+            superclasses = prop["!superclasses"]
+            if "Property" in superclasses:
+                all_properties.append(Property(prop))
+            if "EnumDef" in superclasses:
+                enums["g_" + key] = EnumDef(prop, properties)
+
+    root = PropertyTree(items={})
+    for prop in all_properties:
+        prop.find_enum_values(enums)
+        append_property(root, prop)
 
     with open(args.output, "w", encoding="utf-8") as f:
         f.write(HEADER)
diff --git a/lldb/source/Core/CMakeLists.txt b/lldb/source/Core/CMakeLists.txt
index 58b0794bcae95..41f1dab242812 100644
--- a/lldb/source/Core/CMakeLists.txt
+++ b/lldb/source/Core/CMakeLists.txt
@@ -10,6 +10,10 @@ lldb_tablegen(DebuggerEnums.inc -gen-lldb-option-enum-defs
   SOURCE DebuggerEnums.td
   TARGET LLDBDebuggerEnumsGen)
 
+lldb_tablegen(DebuggerEnums.json -dump-json
+  SOURCE DebuggerEnums.td
+  TARGET LLDBDebuggerEnumsJsonGen)
+
 lldb_tablegen(CoreProperties.json -dump-json
   SOURCE CoreProperties.td
   TARGET LLDBCorePropertiesJsonGen)
diff --git a/lldb/source/Interpreter/CMakeLists.txt b/lldb/source/Interpreter/CMakeLists.txt
index 27625676b9425..2377909da8f85 100644
--- a/lldb/source/Interpreter/CMakeLists.txt
+++ b/lldb/source/Interpreter/CMakeLists.txt
@@ -10,6 +10,10 @@ lldb_tablegen(OptionGroupWatchpointEnums.inc -gen-lldb-option-enum-defs
   SOURCE OptionGroupWatchpointEnums.td
   TARGET LLDBOptionGroupWatchpointEnumsGen)
 
+lldb_tablegen(OptionGroupWatchpointEnums.json -dump-json
+  SOURCE OptionGroupWatchpointEnums.td
+  TARGET LLDBOptionGroupWatchpointEnumsJsonGen)
+
 lldb_tablegen(InterpreterProperties.json -dump-json
   SOURCE InterpreterProperties.td
   TARGET LLDBInterpreterPropertiesJsonGen)
diff --git a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/CMakeLists.txt b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/CMakeLists.txt
index 977dad935fa12..8e495d2fb33bd 100644
--- a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/CMakeLists.txt
+++ b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/CMakeLists.txt
@@ -10,6 +10,10 @@ lldb_tablegen(DynamicLoaderDarwinKernelEnums.inc -gen-lldb-option-enum-defs
   SOURCE DynamicLoaderDarwinKernelEnums.td
   TARGET LLDBPluginDynamicLoaderDarwinKernelEnumsGen)
 
+lldb_tablegen(DynamicLoaderDarwinKernelEnums.json -dump-json
+  SOURCE DynamicLoaderDarwinKernelEnums.td
+  TARGET LLDBPluginDynamicLoaderDarwinKernelEnumsJsonGen)
+
 lldb_tablegen(DynamicLoaderDarwinKernelProperties.json -dump-json
   SOURCE DynamicLoaderDarwinKernelProperties.td
   TARGET LLDBPluginDynamicLoaderDarwinKernelPropertiesJsonGen)
diff --git a/lldb/source/Plugins/JITLoader/GDB/CMakeLists.txt b/lldb/source/Plugins/JITLoader/GDB/CMakeLists.txt
index e62efe476fad9..742ae2f361495 100644
--- a/lldb/source/Plugins/JITLoader/GDB/CMakeLists.txt
+++ b/lldb/source/Plugins/JITLoader/GDB/CMakeLists.txt
@@ -10,6 +10,10 @@ lldb_tablegen(JITLoaderGDBEnums.inc -gen-lldb-option-enum-defs
   SOURCE JITLoaderGDBEnums.td
   TARGET LLDBPluginJITLoaderGDBEnumsGen)
 
+lldb_tablegen(JITLoaderGDBEnums.json -dump-json
+  SOURCE JITLoaderGDBEnums.td
+  TARGET LLDBPluginJITLoaderGDBEnumsJsonGen)
+
 lldb_tablegen(JITLoaderGDBProperties.json -dump-json
   SOURCE JITLoaderGDBProperties.td
   TARGET LLDBPluginJITLoaderGDBPropertiesJsonGen)
diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/CMakeLists.txt b/lldb/source/Plugins/ObjectFile/PECOFF/CMakeLists.txt
index 6d9781c42f228..3edb9dfd9883d 100644
--- a/lldb/source/Plugins/ObjectFile/PECOFF/CMakeLists.txt
+++ b/lldb/source/Plugins/ObjectFile/PECOFF/CMakeLists.txt
@@ -17,6 +17,10 @@ lldb_tablegen(ObjectFilePECOFFEnums.inc -gen-lldb-option-enum-defs
   SOURCE ObjectFilePECOFFEnums.td
   TARGET LLDBPluginObjectFilePECOFFEnumsGen)
 
+lldb_tablegen(ObjectFilePECOFFEnums.json -dump-json
+  SOURCE ObjectFilePECOFFEnums.td
+  TARGET LLDBPluginObjectFilePECOFFEnumsJsonGen)
+
 lldb_tablegen(ObjectFilePECOFFProperties.json -dump-json
   SOURCE ObjectFilePECOFFProperties.td
   TARGET LLDBPluginObjectFilePECOFFPropertiesJsonGen)
diff --git a/lldb/source/Plugins/SymbolFile/PDB/CMakeLists.txt b/lldb/source/Plugins/SymbolFile/PDB/CMakeLists.txt
index 076f607797d80..6092e85d9eb04 100644
--- a/lldb/source/Plugins/SymbolFile/PDB/CMakeLists.txt
+++ b/lldb/source/Plugins/SymbolFile/PDB/CMakeLists.txt
@@ -10,6 +10,10 @@ lldb_tablegen(SymbolFilePDBEnums.inc -gen-lldb-option-enum-defs
   SOURCE SymbolFilePDBEnums.td
   TARGET LLDBPluginSymbolFilePDBEnumsGen)
 
+lldb_tablegen(SymbolFilePDBEnums.json -dump-json
+  SOURCE SymbolFilePDBEnums.td
+  TARGET LLDBPluginSymbolFilePDBEnumsJsonGen)
+
 lldb_tablegen(SymbolFilePDBProperties.json -dump-json
   SOURCE SymbolFilePDBProperties.td
   TARGET LLDBPluginSymbolFilePDBPropertiesJsonGen)
diff --git a/lldb/source/Target/CMakeLists.txt b/lldb/source/Target/CMakeLists.txt
index 37d32b1033a84..1fa4cfa25f440 100644
--- a/lldb/source/Target/CMakeLists.txt
+++ b/lldb/source/Target/CMakeLists.txt
@@ -10,10 +10,18 @@ lldb_tablegen(ProcessEnums.inc -gen-lldb-option-enum-defs
   SOURCE ProcessEnums.td
   TARGET LLDBProcessEnumsGen)
 
+lldb_tablegen(ProcessEnums.json -dump-json
+  SOURCE ProcessEnums.td
+  TARGET LLDBProcessEnumsJsonGen)
+
 lldb_tablegen(TargetEnums.inc -gen-lldb-option-enum-defs
   SOURCE TargetEnums.td
   TARGET LLDBTargetEnumsGen)
 
+lldb_tablegen(TargetEnums.json -dump-json
+  SOURCE TargetEnums.td
+  TARGET LLDBTargetEnumsJsonGen)
+
 lldb_tablegen(TargetProperties.json -dump-json
   SOURCE TargetProperties.td
   TARGET LLDBTargetPropertiesJsonGen)

``````````

</details>


https://github.com/llvm/llvm-project/pull/224641


More information about the llvm-branch-commits mailing list