from docutils.parsers.rst import directives from docutils import nodes from sphinx import addnodes from sphinx.application import Sphinx from sphinx.directives import ObjectDescription from sphinx.util.docfields import Field, GroupedField import llvm_slug # Example: # ```{lldbsetting} dwim-print-verbosity # :type: "enum" # # The verbosity level used by dwim-print. # # :enum none: Use no verbosity when running dwim-print. # :enum expression: Use partial verbosity when running dwim-print - display a message when `expression` evaluation is used. # :enum full: Use full verbosity when running dwim-print. # :default: none # ``` class LLDBSetting(ObjectDescription): option_spec = { "type": directives.unchanged, } doc_field_types = [ Field("default", label="Default", has_arg=False, names=("default",)), GroupedField("enum", label="Enumerations", names=("enum",)), ] def handle_signature(self, sig: str, signode: addnodes.desc_signature): typ = self.options.get("type", None) desc = addnodes.desc_name(text=sig) desc += nodes.inline( "", typ, classes=[ "lldb-setting-type", f"lldb-setting-type-{llvm_slug.make_slug(typ)}", ], ) signode["ids"].append(sig) signode += desc def setup(app: Sphinx): app.add_directive("lldbsetting", LLDBSetting) return { "version": "0.1", "parallel_read_safe": True, "parallel_write_safe": True, }