Enable automatic formatting for `sphinx/domains/rst.py`

This commit is contained in:
Adam Turner 2025-01-01 12:51:39 +00:00
parent f42f3676d5
commit 917b74ab43
2 changed files with 80 additions and 28 deletions

View File

@ -397,6 +397,5 @@ exclude = [
"sphinx/domains/python/_annotations.py",
"sphinx/domains/python/__init__.py",
"sphinx/domains/python/_object.py",
"sphinx/domains/rst.py",
"sphinx/domains/std/__init__.py",
]

View File

@ -47,7 +47,9 @@ class ReSTMarkup(ObjectDescription[str]):
'nocontentsentry': directives.flag,
}
def add_target_and_index(self, name: str, sig: str, signode: desc_signature) -> None:
def add_target_and_index(
self, name: str, sig: str, signode: desc_signature
) -> None:
node_id = make_id(self.env, self.state.document, self.objtype, name)
signode['ids'].append(node_id)
self.state.document.note_explicit_target(signode)
@ -58,7 +60,13 @@ class ReSTMarkup(ObjectDescription[str]):
if 'no-index-entry' not in self.options:
indextext = self.get_index_text(self.objtype, name)
if indextext:
self.indexnode['entries'].append(('single', indextext, node_id, '', None))
self.indexnode['entries'].append((
'single',
indextext,
node_id,
'',
None,
))
def get_index_text(self, objectname: str, name: str) -> str:
return ''
@ -158,13 +166,16 @@ class ReSTDirectiveOption(ReSTMarkup):
signode['fullname'] = name.strip()
signode += addnodes.desc_name(desc_name, desc_name)
if argument:
signode += addnodes.desc_annotation(' ' + argument, ' ' + argument)
text = f' {argument}'
signode += addnodes.desc_annotation(text, text)
if self.options.get('type'):
text = ' (%s)' % self.options['type']
signode += addnodes.desc_annotation(text, text)
return name
def add_target_and_index(self, name: str, sig: str, signode: desc_signature) -> None:
def add_target_and_index(
self, name: str, sig: str, signode: desc_signature
) -> None:
domain = self.env.domains.restructuredtext_domain
directive_name = self.current_directive
@ -182,9 +193,17 @@ class ReSTDirectiveOption(ReSTMarkup):
if directive_name:
key = name[0].upper()
pair = [_('%s (directive)') % directive_name,
_(':%s: (directive option)') % name]
self.indexnode['entries'].append(('pair', '; '.join(pair), node_id, '', key))
pair = [
_('%s (directive)') % directive_name,
_(':%s: (directive option)') % name,
]
self.indexnode['entries'].append((
'pair',
'; '.join(pair),
node_id,
'',
key,
))
else:
key = name[0].upper()
text = _(':%s: (directive option)') % name
@ -221,17 +240,17 @@ class ReSTDomain(Domain):
label = 'reStructuredText'
object_types = {
'directive': ObjType(_('directive'), 'dir'),
'directive': ObjType(_('directive'), 'dir'),
'directive:option': ObjType(_('directive-option'), 'dir'),
'role': ObjType(_('role'), 'role'),
'role': ObjType(_('role'), 'role'),
}
directives = {
'directive': ReSTDirective,
'directive:option': ReSTDirectiveOption,
'role': ReSTRole,
'role': ReSTRole,
}
roles = {
'dir': XRefRole(),
'dir': XRefRole(),
'role': XRefRole(),
}
initial_data: dict[str, dict[tuple[str, str], str]] = {
@ -240,13 +259,21 @@ class ReSTDomain(Domain):
@property
def objects(self) -> dict[tuple[str, str], tuple[str, str]]:
return self.data.setdefault('objects', {}) # (objtype, fullname) -> (docname, node_id)
# (objtype, fullname) -> (docname, node_id)
return self.data.setdefault('objects', {})
def note_object(self, objtype: str, name: str, node_id: str, location: Any = None) -> None:
def note_object(
self, objtype: str, name: str, node_id: str, location: Any = None
) -> None:
if (objtype, name) in self.objects:
docname, node_id = self.objects[objtype, name]
logger.warning(__('duplicate description of %s %s, other instance in %s'),
objtype, name, docname, location=location)
logger.warning(
__('duplicate description of %s %s, other instance in %s'),
objtype,
name,
docname,
location=location,
)
self.objects[objtype, name] = (self.env.docname, node_id)
@ -261,9 +288,16 @@ class ReSTDomain(Domain):
if doc in docnames:
self.objects[typ, name] = (doc, node_id)
def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref, contnode: Element,
) -> nodes.reference | None:
def resolve_xref(
self,
env: BuildEnvironment,
fromdocname: str,
builder: Builder,
typ: str,
target: str,
node: pending_xref,
contnode: Element,
) -> nodes.reference | None:
objtypes = self.objtypes_for_role(typ)
if not objtypes:
return None
@ -271,22 +305,41 @@ class ReSTDomain(Domain):
result = self.objects.get((objtype, target))
if result:
todocname, node_id = result
return make_refnode(builder, fromdocname, todocname, node_id,
contnode, target + ' ' + objtype)
return make_refnode(
builder,
fromdocname,
todocname,
node_id,
contnode,
f'{target} {objtype}',
)
return None
def resolve_any_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
target: str, node: pending_xref, contnode: Element,
) -> list[tuple[str, nodes.reference]]:
def resolve_any_xref(
self,
env: BuildEnvironment,
fromdocname: str,
builder: Builder,
target: str,
node: pending_xref,
contnode: Element,
) -> list[tuple[str, nodes.reference]]:
results: list[tuple[str, nodes.reference]] = []
for objtype in self.object_types:
result = self.objects.get((objtype, target))
if result:
todocname, node_id = result
results.append(
('rst:' + self.role_for_objtype(objtype), # type: ignore[operator]
make_refnode(builder, fromdocname, todocname, node_id,
contnode, target + ' ' + objtype)))
results.append((
f'rst:{self.role_for_objtype(objtype)}',
make_refnode(
builder,
fromdocname,
todocname,
node_id,
contnode,
f'{target} {objtype}',
),
))
return results
def get_objects(self) -> Iterator[tuple[str, str, str, str, str, int]]: