Add :type: option for rst:directive:option directive

This commit is contained in:
Takeshi KOMIYA
2019-04-16 22:32:51 +09:00
parent 4307dec3ac
commit ca605c7437
3 changed files with 42 additions and 2 deletions

View File

@@ -1444,6 +1444,20 @@ The reStructuredText domain (name **rst**) provides the following directives:
.. rst:directive:option:: glob .. rst:directive:option:: glob
.. rubric:: options
.. rst:directive:option:: type
:type: description for the option of directive
Describe the type of option value.
For example::
.. rst:directive:: toctree
.. rst:directive:option:: maxdepth
:type: integer or no value
.. versionadded:: 2.1 .. versionadded:: 2.1
.. rst:directive:: .. rst:role:: name .. rst:directive:: .. rst:role:: name

View File

@@ -11,6 +11,8 @@
import re import re
from typing import cast from typing import cast
from docutils.parsers.rst import directives
from sphinx import addnodes from sphinx import addnodes
from sphinx.directives import ObjectDescription from sphinx.directives import ObjectDescription
from sphinx.domains import Domain, ObjType from sphinx.domains import Domain, ObjType
@@ -115,6 +117,11 @@ class ReSTDirectiveOption(ReSTMarkup):
""" """
Description of an option for reST directive. Description of an option for reST directive.
""" """
option_spec = ReSTMarkup.option_spec.copy()
option_spec.update({
'type': directives.unchanged,
})
def handle_signature(self, sig, signode): def handle_signature(self, sig, signode):
# type: (str, addnodes.desc_signature) -> str # type: (str, addnodes.desc_signature) -> str
try: try:
@@ -125,6 +132,9 @@ class ReSTDirectiveOption(ReSTMarkup):
signode += addnodes.desc_name(':%s:' % name, ':%s:' % name) signode += addnodes.desc_name(':%s:' % name, ':%s:' % name)
if argument: if argument:
signode += addnodes.desc_annotation(' ' + argument, ' ' + argument) signode += addnodes.desc_annotation(' ' + argument, ' ' + argument)
if self.options.get('type'):
text = ' (%s)' % self.options['type']
signode += addnodes.desc_annotation(text, text)
return name return name
def add_target_and_index(self, name, sig, signode): def add_target_and_index(self, name, sig, signode):
@@ -179,8 +189,9 @@ class ReSTDomain(Domain):
label = 'reStructuredText' label = 'reStructuredText'
object_types = { object_types = {
'directive': ObjType(_('directive'), 'dir'), 'directive': ObjType(_('directive'), 'dir'),
'role': ObjType(_('role'), 'role'), 'directive:option': ObjType(_('directive-option'), 'dir'),
'role': ObjType(_('role'), 'role'),
} }
directives = { directives = {
'directive': ReSTDirective, 'directive': ReSTDirective,

View File

@@ -95,6 +95,21 @@ def test_rst_directive_option_with_argument(app):
domain="rst", objtype="directive:option", noindex=False) domain="rst", objtype="directive:option", noindex=False)
def test_rst_directive_option_type(app):
text = (".. rst:directive:option:: foo\n"
" :type: directives.flags\n")
doctree = restructuredtext.parse(app, text)
assert_node(doctree, (addnodes.index,
[desc, ([desc_signature, ([desc_name, ":foo:"],
[desc_annotation, " (directives.flags)"])],
[desc_content, ()])]))
assert_node(doctree[0],
entries=[("single", ":foo: (directive option)",
"directive:option--foo", "", "F")])
assert_node(doctree[1], addnodes.desc, desctype="directive:option",
domain="rst", objtype="directive:option", noindex=False)
def test_rst_directive_and_directive_option(app): def test_rst_directive_and_directive_option(app):
text = (".. rst:directive:: foo\n" text = (".. rst:directive:: foo\n"
"\n" "\n"