doc/sphinx/cligroup/cligroup.py (62 lines of code) (raw):

# -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- import copy from docutils import nodes from sphinx import addnodes from sphinx.directives import ObjectDescription try: # Deprecated in 1.6 and removed in 1.7 from sphinx.util.compat import Directive except ImportError: from docutils.parsers.rst import Directive # pylint: disable=import-error from sphinx.util.docfields import Field cli_field_types = [ Field('summary', label='Summary', has_arg=False, names=('summary', 'shortdesc')), Field('description', label='Description', has_arg=False, names=('description', 'desc', 'longdesc')) ] class CliBaseDirective(ObjectDescription): def handle_signature(self, sig, signode): signode += addnodes.desc_addname(sig, sig) return sig def needs_arglist(self): return False def add_target_and_index(self, name, sig, signode): signode['ids'].append(name) def get_index_text(self, modname, name): return name class CliGroupDirective(CliBaseDirective): doc_field_types = copy.copy(cli_field_types) doc_field_types.extend([ Field('docsource', label='Doc Source', has_arg=False, names=('docsource', 'documentsource')), Field('deprecated', label='Deprecated', has_arg=False, names=('deprecated')) ]) class CliCommandDirective(CliBaseDirective): doc_field_types = copy.copy(cli_field_types) doc_field_types.extend([ Field('docsource', label='Doc Source', has_arg=False, names=('docsource', 'documentsource')), Field('deprecated', label='Deprecated', has_arg=False, names=('deprecated')) ]) class CliArgumentDirective(CliBaseDirective): doc_field_types = copy.copy(cli_field_types) doc_field_types.extend([ Field('required', label='Required', has_arg=False, names=('required')), Field('values', label='Allowed values', has_arg=False, names=('values', 'choices', 'options')), Field('default', label='Default value', has_arg=False, names=('default')), Field('source', label='Values from', has_arg=False, names=('source', 'sources')), Field('deprecated', label='Deprecated', has_arg=False, names=('deprecated')) ]) class CliExampleDirective(CliBaseDirective): pass def setup(app): app.add_directive('cligroup', CliGroupDirective) app.add_directive('clicommand', CliCommandDirective) app.add_directive('cliarg', CliArgumentDirective) app.add_directive('cliexample', CliExampleDirective)