mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Migrate to py3 style type annotation: sphinx.domains.std
This commit is contained in:
parent
320661ee94
commit
62e5f6935b
@ -12,13 +12,16 @@ import re
|
|||||||
import unicodedata
|
import unicodedata
|
||||||
import warnings
|
import warnings
|
||||||
from copy import copy
|
from copy import copy
|
||||||
|
from typing import Any, Callable, Dict, Iterable, Iterator, List, Optional, Tuple, Type, Union
|
||||||
from typing import cast
|
from typing import cast
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.parsers.rst import directives
|
from docutils.nodes import Element, Node, system_message
|
||||||
|
from docutils.parsers.rst import Directive, directives
|
||||||
from docutils.statemachine import StringList
|
from docutils.statemachine import StringList
|
||||||
|
|
||||||
from sphinx import addnodes
|
from sphinx import addnodes
|
||||||
|
from sphinx.addnodes import desc_signature, pending_xref
|
||||||
from sphinx.deprecation import RemovedInSphinx30Warning, RemovedInSphinx40Warning
|
from sphinx.deprecation import RemovedInSphinx30Warning, RemovedInSphinx40Warning
|
||||||
from sphinx.directives import ObjectDescription
|
from sphinx.directives import ObjectDescription
|
||||||
from sphinx.domains import Domain, ObjType
|
from sphinx.domains import Domain, ObjType
|
||||||
@ -28,15 +31,13 @@ from sphinx.roles import XRefRole
|
|||||||
from sphinx.util import ws_re, logging, docname_join
|
from sphinx.util import ws_re, logging, docname_join
|
||||||
from sphinx.util.docutils import SphinxDirective
|
from sphinx.util.docutils import SphinxDirective
|
||||||
from sphinx.util.nodes import clean_astext, make_refnode
|
from sphinx.util.nodes import clean_astext, make_refnode
|
||||||
|
from sphinx.util.typing import RoleFunction
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
# For type annotation
|
# For type annotation
|
||||||
from typing import Any, Callable, Dict, Iterable, Iterator, List, Tuple, Type, Union # NOQA
|
from sphinx.application import Sphinx
|
||||||
from docutils.parsers.rst import Directive # NOQA
|
from sphinx.builders import Builder
|
||||||
from sphinx.application import Sphinx # NOQA
|
from sphinx.environment import BuildEnvironment
|
||||||
from sphinx.builders import Builder # NOQA
|
|
||||||
from sphinx.environment import BuildEnvironment # NOQA
|
|
||||||
from sphinx.util.typing import RoleFunction # NOQA
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -52,10 +53,9 @@ class GenericObject(ObjectDescription):
|
|||||||
A generic x-ref directive registered with Sphinx.add_object_type().
|
A generic x-ref directive registered with Sphinx.add_object_type().
|
||||||
"""
|
"""
|
||||||
indextemplate = ''
|
indextemplate = ''
|
||||||
parse_node = None # type: Callable[[GenericObject, BuildEnvironment, str, addnodes.desc_signature], str] # NOQA
|
parse_node = None # type: Callable[[GenericObject, BuildEnvironment, str, desc_signature], str] # NOQA
|
||||||
|
|
||||||
def handle_signature(self, sig, signode):
|
def handle_signature(self, sig: str, signode: desc_signature) -> str:
|
||||||
# type: (str, addnodes.desc_signature) -> str
|
|
||||||
if self.parse_node:
|
if self.parse_node:
|
||||||
name = self.parse_node(self.env, sig, signode)
|
name = self.parse_node(self.env, sig, signode)
|
||||||
else:
|
else:
|
||||||
@ -65,8 +65,7 @@ class GenericObject(ObjectDescription):
|
|||||||
name = ws_re.sub('', sig)
|
name = ws_re.sub('', sig)
|
||||||
return name
|
return name
|
||||||
|
|
||||||
def add_target_and_index(self, name, sig, signode):
|
def add_target_and_index(self, name: str, sig: str, signode: desc_signature) -> None:
|
||||||
# type: (str, str, addnodes.desc_signature) -> None
|
|
||||||
targetname = '%s-%s' % (self.objtype, name)
|
targetname = '%s-%s' % (self.objtype, name)
|
||||||
signode['ids'].append(targetname)
|
signode['ids'].append(targetname)
|
||||||
self.state.document.note_explicit_target(signode)
|
self.state.document.note_explicit_target(signode)
|
||||||
@ -94,8 +93,8 @@ class EnvVarXRefRole(XRefRole):
|
|||||||
Cross-referencing role for environment variables (adds an index entry).
|
Cross-referencing role for environment variables (adds an index entry).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def result_nodes(self, document, env, node, is_ref):
|
def result_nodes(self, document: nodes.document, env: "BuildEnvironment", node: Element,
|
||||||
# type: (nodes.document, BuildEnvironment, nodes.Element, bool) -> Tuple[List[nodes.Node], List[nodes.system_message]] # NOQA
|
is_ref: bool) -> Tuple[List[Node], List[system_message]]:
|
||||||
if not is_ref:
|
if not is_ref:
|
||||||
return [node], []
|
return [node], []
|
||||||
varname = node['reftarget']
|
varname = node['reftarget']
|
||||||
@ -122,8 +121,7 @@ class Target(SphinxDirective):
|
|||||||
final_argument_whitespace = True
|
final_argument_whitespace = True
|
||||||
option_spec = {} # type: Dict
|
option_spec = {} # type: Dict
|
||||||
|
|
||||||
def run(self):
|
def run(self) -> List[Node]:
|
||||||
# type: () -> List[nodes.Node]
|
|
||||||
# normalize whitespace in fullname like XRefRole does
|
# normalize whitespace in fullname like XRefRole does
|
||||||
fullname = ws_re.sub(' ', self.arguments[0].strip())
|
fullname = ws_re.sub(' ', self.arguments[0].strip())
|
||||||
targetname = '%s-%s' % (self.name, fullname)
|
targetname = '%s-%s' % (self.name, fullname)
|
||||||
@ -155,8 +153,7 @@ class Cmdoption(ObjectDescription):
|
|||||||
Description of a command-line option (.. option).
|
Description of a command-line option (.. option).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def handle_signature(self, sig, signode):
|
def handle_signature(self, sig: str, signode: desc_signature) -> str:
|
||||||
# type: (str, addnodes.desc_signature) -> str
|
|
||||||
"""Transform an option description into RST nodes."""
|
"""Transform an option description into RST nodes."""
|
||||||
count = 0
|
count = 0
|
||||||
firstname = ''
|
firstname = ''
|
||||||
@ -184,8 +181,7 @@ class Cmdoption(ObjectDescription):
|
|||||||
raise ValueError
|
raise ValueError
|
||||||
return firstname
|
return firstname
|
||||||
|
|
||||||
def add_target_and_index(self, firstname, sig, signode):
|
def add_target_and_index(self, firstname: str, sig: str, signode: desc_signature) -> None:
|
||||||
# type: (str, str, addnodes.desc_signature) -> None
|
|
||||||
currprogram = self.env.ref_context.get('std:program')
|
currprogram = self.env.ref_context.get('std:program')
|
||||||
for optname in signode.get('allnames', []):
|
for optname in signode.get('allnames', []):
|
||||||
targetname = optname.replace('/', '-')
|
targetname = optname.replace('/', '-')
|
||||||
@ -221,8 +217,7 @@ class Program(SphinxDirective):
|
|||||||
final_argument_whitespace = True
|
final_argument_whitespace = True
|
||||||
option_spec = {} # type: Dict
|
option_spec = {} # type: Dict
|
||||||
|
|
||||||
def run(self):
|
def run(self) -> List[Node]:
|
||||||
# type: () -> List[nodes.Node]
|
|
||||||
program = ws_re.sub('-', self.arguments[0].strip())
|
program = ws_re.sub('-', self.arguments[0].strip())
|
||||||
if program == 'None':
|
if program == 'None':
|
||||||
self.env.ref_context.pop('std:program', None)
|
self.env.ref_context.pop('std:program', None)
|
||||||
@ -232,21 +227,20 @@ class Program(SphinxDirective):
|
|||||||
|
|
||||||
|
|
||||||
class OptionXRefRole(XRefRole):
|
class OptionXRefRole(XRefRole):
|
||||||
def process_link(self, env, refnode, has_explicit_title, title, target):
|
def process_link(self, env: "BuildEnvironment", refnode: Element, has_explicit_title: bool,
|
||||||
# type: (BuildEnvironment, nodes.Element, bool, str, str) -> Tuple[str, str]
|
title: str, target: str) -> Tuple[str, str]:
|
||||||
refnode['std:program'] = env.ref_context.get('std:program')
|
refnode['std:program'] = env.ref_context.get('std:program')
|
||||||
return title, target
|
return title, target
|
||||||
|
|
||||||
|
|
||||||
def split_term_classifiers(line):
|
def split_term_classifiers(line: str) -> List[Optional[str]]:
|
||||||
# type: (str) -> List[Union[str, None]]
|
|
||||||
# split line into a term and classifiers. if no classifier, None is used..
|
# split line into a term and classifiers. if no classifier, None is used..
|
||||||
parts = re.split(' +: +', line) + [None]
|
parts = re.split(' +: +', line) + [None]
|
||||||
return parts
|
return parts
|
||||||
|
|
||||||
|
|
||||||
def make_glossary_term(env, textnodes, index_key, source, lineno, new_id=None):
|
def make_glossary_term(env: "BuildEnvironment", textnodes: Iterable[Node], index_key: str,
|
||||||
# type: (BuildEnvironment, Iterable[nodes.Node], str, str, int, str) -> nodes.term
|
source: str, lineno: int, new_id: str = None) -> nodes.term:
|
||||||
# get a text-only representation of the term and register it
|
# get a text-only representation of the term and register it
|
||||||
# as a cross-reference target
|
# as a cross-reference target
|
||||||
term = nodes.term('', '', *textnodes)
|
term = nodes.term('', '', *textnodes)
|
||||||
@ -292,8 +286,7 @@ class Glossary(SphinxDirective):
|
|||||||
'sorted': directives.flag,
|
'sorted': directives.flag,
|
||||||
}
|
}
|
||||||
|
|
||||||
def run(self):
|
def run(self) -> List[Node]:
|
||||||
# type: () -> List[nodes.Node]
|
|
||||||
node = addnodes.glossary()
|
node = addnodes.glossary()
|
||||||
node.document = self.state.document
|
node.document = self.state.document
|
||||||
|
|
||||||
@ -399,16 +392,15 @@ class Glossary(SphinxDirective):
|
|||||||
return messages + [node]
|
return messages + [node]
|
||||||
|
|
||||||
|
|
||||||
def token_xrefs(text):
|
def token_xrefs(text: str) -> List[Node]:
|
||||||
# type: (str) -> List[nodes.Node]
|
|
||||||
retnodes = [] # type: List[nodes.Node]
|
retnodes = [] # type: List[nodes.Node]
|
||||||
pos = 0
|
pos = 0
|
||||||
for m in token_re.finditer(text):
|
for m in token_re.finditer(text):
|
||||||
if m.start() > pos:
|
if m.start() > pos:
|
||||||
txt = text[pos:m.start()]
|
txt = text[pos:m.start()]
|
||||||
retnodes.append(nodes.Text(txt, txt))
|
retnodes.append(nodes.Text(txt, txt))
|
||||||
refnode = addnodes.pending_xref(
|
refnode = pending_xref(m.group(1), reftype='token', refdomain='std',
|
||||||
m.group(1), reftype='token', refdomain='std', reftarget=m.group(1))
|
reftarget=m.group(1))
|
||||||
refnode += nodes.literal(m.group(1), m.group(1), classes=['xref'])
|
refnode += nodes.literal(m.group(1), m.group(1), classes=['xref'])
|
||||||
retnodes.append(refnode)
|
retnodes.append(refnode)
|
||||||
pos = m.end()
|
pos = m.end()
|
||||||
@ -428,8 +420,7 @@ class ProductionList(SphinxDirective):
|
|||||||
final_argument_whitespace = True
|
final_argument_whitespace = True
|
||||||
option_spec = {} # type: Dict
|
option_spec = {} # type: Dict
|
||||||
|
|
||||||
def run(self):
|
def run(self) -> List[Node]:
|
||||||
# type: () -> List[nodes.Node]
|
|
||||||
domain = cast(StandardDomain, self.env.get_domain('std'))
|
domain = cast(StandardDomain, self.env.get_domain('std'))
|
||||||
node = addnodes.productionlist() # type: nodes.Element
|
node = addnodes.productionlist() # type: nodes.Element
|
||||||
i = 0
|
i = 0
|
||||||
@ -534,8 +525,7 @@ class StandardDomain(Domain):
|
|||||||
nodes.container: ('code-block', None),
|
nodes.container: ('code-block', None),
|
||||||
} # type: Dict[Type[nodes.Node], Tuple[str, Callable]]
|
} # type: Dict[Type[nodes.Node], Tuple[str, Callable]]
|
||||||
|
|
||||||
def __init__(self, env):
|
def __init__(self, env: "BuildEnvironment") -> None:
|
||||||
# type: (BuildEnvironment) -> None
|
|
||||||
super().__init__(env)
|
super().__init__(env)
|
||||||
|
|
||||||
# set up enumerable nodes
|
# set up enumerable nodes
|
||||||
@ -544,27 +534,22 @@ class StandardDomain(Domain):
|
|||||||
self.enumerable_nodes[node] = settings
|
self.enumerable_nodes[node] = settings
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def objects(self):
|
def objects(self) -> Dict[Tuple[str, str], Tuple[str, str]]:
|
||||||
# type: () -> Dict[Tuple[str, str], Tuple[str, str]]
|
|
||||||
return self.data.setdefault('objects', {}) # (objtype, name) -> docname, labelid
|
return self.data.setdefault('objects', {}) # (objtype, name) -> docname, labelid
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def progoptions(self):
|
def progoptions(self) -> Dict[Tuple[str, str], Tuple[str, str]]:
|
||||||
# type: () -> Dict[Tuple[str, str], Tuple[str, str]]
|
|
||||||
return self.data.setdefault('progoptions', {}) # (program, name) -> docname, labelid
|
return self.data.setdefault('progoptions', {}) # (program, name) -> docname, labelid
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def labels(self):
|
def labels(self) -> Dict[str, Tuple[str, str, str]]:
|
||||||
# type: () -> Dict[str, Tuple[str, str, str]]
|
|
||||||
return self.data.setdefault('labels', {}) # labelname -> docname, labelid, sectionname
|
return self.data.setdefault('labels', {}) # labelname -> docname, labelid, sectionname
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def anonlabels(self):
|
def anonlabels(self) -> Dict[str, Tuple[str, str]]:
|
||||||
# type: () -> Dict[str, Tuple[str, str]]
|
|
||||||
return self.data.setdefault('anonlabels', {}) # labelname -> docname, labelid
|
return self.data.setdefault('anonlabels', {}) # labelname -> docname, labelid
|
||||||
|
|
||||||
def clear_doc(self, docname):
|
def clear_doc(self, docname: str) -> None:
|
||||||
# type: (str) -> None
|
|
||||||
key = None # type: Any
|
key = None # type: Any
|
||||||
for key, (fn, _l) in list(self.progoptions.items()):
|
for key, (fn, _l) in list(self.progoptions.items()):
|
||||||
if fn == docname:
|
if fn == docname:
|
||||||
@ -579,8 +564,7 @@ class StandardDomain(Domain):
|
|||||||
if fn == docname:
|
if fn == docname:
|
||||||
del self.anonlabels[key]
|
del self.anonlabels[key]
|
||||||
|
|
||||||
def merge_domaindata(self, docnames, otherdata):
|
def merge_domaindata(self, docnames: List[str], otherdata: Dict) -> None:
|
||||||
# type: (List[str], Dict) -> None
|
|
||||||
# XXX duplicates?
|
# XXX duplicates?
|
||||||
for key, data in otherdata['progoptions'].items():
|
for key, data in otherdata['progoptions'].items():
|
||||||
if data[0] in docnames:
|
if data[0] in docnames:
|
||||||
@ -595,8 +579,7 @@ class StandardDomain(Domain):
|
|||||||
if data[0] in docnames:
|
if data[0] in docnames:
|
||||||
self.anonlabels[key] = data
|
self.anonlabels[key] = data
|
||||||
|
|
||||||
def process_doc(self, env, docname, document):
|
def process_doc(self, env: "BuildEnvironment", docname: str, document: nodes.document) -> None: # NOQA
|
||||||
# type: (BuildEnvironment, str, nodes.document) -> None
|
|
||||||
for name, explicit in document.nametypes.items():
|
for name, explicit in document.nametypes.items():
|
||||||
if not explicit:
|
if not explicit:
|
||||||
continue
|
continue
|
||||||
@ -637,17 +620,15 @@ class StandardDomain(Domain):
|
|||||||
continue
|
continue
|
||||||
self.labels[name] = docname, labelid, sectname
|
self.labels[name] = docname, labelid, sectname
|
||||||
|
|
||||||
def add_object(self, objtype, name, docname, labelid):
|
def add_object(self, objtype: str, name: str, docname: str, labelid: str) -> None:
|
||||||
# type: (str, str, str, str) -> None
|
|
||||||
self.objects[objtype, name] = (docname, labelid)
|
self.objects[objtype, name] = (docname, labelid)
|
||||||
|
|
||||||
def add_program_option(self, program, name, docname, labelid):
|
def add_program_option(self, program: str, name: str, docname: str, labelid: str) -> None:
|
||||||
# type: (str, str, str, str) -> None
|
|
||||||
self.progoptions[program, name] = (docname, labelid)
|
self.progoptions[program, name] = (docname, labelid)
|
||||||
|
|
||||||
def build_reference_node(self, fromdocname, builder, docname, labelid,
|
def build_reference_node(self, fromdocname: str, builder: "Builder", docname: str,
|
||||||
sectname, rolename, **options):
|
labelid: str, sectname: str, rolename: str, **options
|
||||||
# type: (str, Builder, str, str, str, str, Any) -> nodes.Element
|
) -> Element:
|
||||||
nodeclass = options.pop('nodeclass', nodes.reference)
|
nodeclass = options.pop('nodeclass', nodes.reference)
|
||||||
newnode = nodeclass('', '', internal=True, **options)
|
newnode = nodeclass('', '', internal=True, **options)
|
||||||
innernode = nodes.inline(sectname, sectname)
|
innernode = nodes.inline(sectname, sectname)
|
||||||
@ -660,7 +641,7 @@ class StandardDomain(Domain):
|
|||||||
# set more info in contnode; in case the
|
# set more info in contnode; in case the
|
||||||
# get_relative_uri call raises NoUri,
|
# get_relative_uri call raises NoUri,
|
||||||
# the builder will then have to resolve these
|
# the builder will then have to resolve these
|
||||||
contnode = addnodes.pending_xref('')
|
contnode = pending_xref('')
|
||||||
contnode['refdocname'] = docname
|
contnode['refdocname'] = docname
|
||||||
contnode['refsectname'] = sectname
|
contnode['refsectname'] = sectname
|
||||||
newnode['refuri'] = builder.get_relative_uri(
|
newnode['refuri'] = builder.get_relative_uri(
|
||||||
@ -670,8 +651,8 @@ class StandardDomain(Domain):
|
|||||||
newnode.append(innernode)
|
newnode.append(innernode)
|
||||||
return newnode
|
return newnode
|
||||||
|
|
||||||
def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Builder",
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
typ: str, target: str, node: pending_xref, contnode: Element) -> Element:
|
||||||
if typ == 'ref':
|
if typ == 'ref':
|
||||||
resolver = self._resolve_ref_xref
|
resolver = self._resolve_ref_xref
|
||||||
elif typ == 'numref':
|
elif typ == 'numref':
|
||||||
@ -692,8 +673,9 @@ class StandardDomain(Domain):
|
|||||||
|
|
||||||
return resolver(env, fromdocname, builder, typ, target, node, contnode)
|
return resolver(env, fromdocname, builder, typ, target, node, contnode)
|
||||||
|
|
||||||
def _resolve_ref_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def _resolve_ref_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
builder: "Builder", typ: str, target: str, node: pending_xref,
|
||||||
|
contnode: Element) -> Element:
|
||||||
if node['refexplicit']:
|
if node['refexplicit']:
|
||||||
# reference to anonymous label; the reference uses
|
# reference to anonymous label; the reference uses
|
||||||
# the supplied link caption
|
# the supplied link caption
|
||||||
@ -709,8 +691,9 @@ class StandardDomain(Domain):
|
|||||||
return self.build_reference_node(fromdocname, builder,
|
return self.build_reference_node(fromdocname, builder,
|
||||||
docname, labelid, sectname, 'ref')
|
docname, labelid, sectname, 'ref')
|
||||||
|
|
||||||
def _resolve_numref_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def _resolve_numref_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
builder: "Builder", typ: str, target: str,
|
||||||
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
if target in self.labels:
|
if target in self.labels:
|
||||||
docname, labelid, figname = self.labels.get(target, ('', '', ''))
|
docname, labelid, figname = self.labels.get(target, ('', '', ''))
|
||||||
else:
|
else:
|
||||||
@ -770,8 +753,9 @@ class StandardDomain(Domain):
|
|||||||
nodeclass=addnodes.number_reference,
|
nodeclass=addnodes.number_reference,
|
||||||
title=title)
|
title=title)
|
||||||
|
|
||||||
def _resolve_keyword_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def _resolve_keyword_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
builder: "Builder", typ: str, target: str,
|
||||||
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
# keywords are oddballs: they are referenced by named labels
|
# keywords are oddballs: they are referenced by named labels
|
||||||
docname, labelid, _ = self.labels.get(target, ('', '', ''))
|
docname, labelid, _ = self.labels.get(target, ('', '', ''))
|
||||||
if not docname:
|
if not docname:
|
||||||
@ -779,8 +763,9 @@ class StandardDomain(Domain):
|
|||||||
return make_refnode(builder, fromdocname, docname,
|
return make_refnode(builder, fromdocname, docname,
|
||||||
labelid, contnode)
|
labelid, contnode)
|
||||||
|
|
||||||
def _resolve_doc_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def _resolve_doc_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
builder: "Builder", typ: str, target: str,
|
||||||
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
# directly reference to document by source name; can be absolute or relative
|
# directly reference to document by source name; can be absolute or relative
|
||||||
refdoc = node.get('refdoc', fromdocname)
|
refdoc = node.get('refdoc', fromdocname)
|
||||||
docname = docname_join(refdoc, node['reftarget'])
|
docname = docname_join(refdoc, node['reftarget'])
|
||||||
@ -795,8 +780,9 @@ class StandardDomain(Domain):
|
|||||||
innernode = nodes.inline(caption, caption, classes=['doc'])
|
innernode = nodes.inline(caption, caption, classes=['doc'])
|
||||||
return make_refnode(builder, fromdocname, docname, None, innernode)
|
return make_refnode(builder, fromdocname, docname, None, innernode)
|
||||||
|
|
||||||
def _resolve_option_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def _resolve_option_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
builder: "Builder", typ: str, target: str,
|
||||||
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
progname = node.get('std:program')
|
progname = node.get('std:program')
|
||||||
target = target.strip()
|
target = target.strip()
|
||||||
docname, labelid = self.progoptions.get((progname, target), ('', ''))
|
docname, labelid = self.progoptions.get((progname, target), ('', ''))
|
||||||
@ -816,8 +802,9 @@ class StandardDomain(Domain):
|
|||||||
return make_refnode(builder, fromdocname, docname,
|
return make_refnode(builder, fromdocname, docname,
|
||||||
labelid, contnode)
|
labelid, contnode)
|
||||||
|
|
||||||
def _resolve_citation_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def _resolve_citation_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
builder: "Builder", typ: str, target: str,
|
||||||
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
warnings.warn('StandardDomain._resolve_citation_xref() is deprecated.',
|
warnings.warn('StandardDomain._resolve_citation_xref() is deprecated.',
|
||||||
RemovedInSphinx30Warning)
|
RemovedInSphinx30Warning)
|
||||||
docname, labelid, lineno = self.data['citations'].get(target, ('', '', 0))
|
docname, labelid, lineno = self.data['citations'].get(target, ('', '', 0))
|
||||||
@ -839,8 +826,9 @@ class StandardDomain(Domain):
|
|||||||
del node['ids'][:]
|
del node['ids'][:]
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def _resolve_obj_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
def _resolve_obj_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, str, addnodes.pending_xref, nodes.Element) -> nodes.Element # NOQA
|
builder: "Builder", typ: str, target: str,
|
||||||
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
objtypes = self.objtypes_for_role(typ) or []
|
objtypes = self.objtypes_for_role(typ) or []
|
||||||
for objtype in objtypes:
|
for objtype in objtypes:
|
||||||
if (objtype, target) in self.objects:
|
if (objtype, target) in self.objects:
|
||||||
@ -853,8 +841,9 @@ class StandardDomain(Domain):
|
|||||||
return make_refnode(builder, fromdocname, docname,
|
return make_refnode(builder, fromdocname, docname,
|
||||||
labelid, contnode)
|
labelid, contnode)
|
||||||
|
|
||||||
def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode):
|
def resolve_any_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
# type: (BuildEnvironment, str, Builder, str, addnodes.pending_xref, nodes.Element) -> List[Tuple[str, nodes.Element]] # NOQA
|
builder: "Builder", target: str, node: pending_xref,
|
||||||
|
contnode: Element) -> List[Tuple[str, Element]]:
|
||||||
results = [] # type: List[Tuple[str, nodes.Element]]
|
results = [] # type: List[Tuple[str, nodes.Element]]
|
||||||
ltarget = target.lower() # :ref: lowercases its target automatically
|
ltarget = target.lower() # :ref: lowercases its target automatically
|
||||||
for role in ('ref', 'option'): # do not try "keyword"
|
for role in ('ref', 'option'): # do not try "keyword"
|
||||||
@ -875,8 +864,7 @@ class StandardDomain(Domain):
|
|||||||
labelid, contnode)))
|
labelid, contnode)))
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_objects(self):
|
def get_objects(self) -> Iterator[Tuple[str, str, str, str, str, int]]:
|
||||||
# type: () -> Iterator[Tuple[str, str, str, str, str, int]]
|
|
||||||
# handle the special 'doc' reference here
|
# handle the special 'doc' reference here
|
||||||
for doc in self.env.all_docs:
|
for doc in self.env.all_docs:
|
||||||
yield (doc, clean_astext(self.env.titles[doc]), 'doc', doc, '', -1)
|
yield (doc, clean_astext(self.env.titles[doc]), 'doc', doc, '', -1)
|
||||||
@ -897,17 +885,14 @@ class StandardDomain(Domain):
|
|||||||
if name not in non_anon_labels:
|
if name not in non_anon_labels:
|
||||||
yield (name, name, 'label', docname, labelid, -1)
|
yield (name, name, 'label', docname, labelid, -1)
|
||||||
|
|
||||||
def get_type_name(self, type, primary=False):
|
def get_type_name(self, type: ObjType, primary: bool = False) -> str:
|
||||||
# type: (ObjType, bool) -> str
|
|
||||||
# never prepend "Default"
|
# never prepend "Default"
|
||||||
return type.lname
|
return type.lname
|
||||||
|
|
||||||
def is_enumerable_node(self, node):
|
def is_enumerable_node(self, node: Node) -> bool:
|
||||||
# type: (nodes.Node) -> bool
|
|
||||||
return node.__class__ in self.enumerable_nodes
|
return node.__class__ in self.enumerable_nodes
|
||||||
|
|
||||||
def get_numfig_title(self, node):
|
def get_numfig_title(self, node: Node) -> str:
|
||||||
# type: (nodes.Node) -> str
|
|
||||||
"""Get the title of enumerable nodes to refer them using its title"""
|
"""Get the title of enumerable nodes to refer them using its title"""
|
||||||
if self.is_enumerable_node(node):
|
if self.is_enumerable_node(node):
|
||||||
elem = cast(nodes.Element, node)
|
elem = cast(nodes.Element, node)
|
||||||
@ -921,11 +906,9 @@ class StandardDomain(Domain):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_enumerable_node_type(self, node):
|
def get_enumerable_node_type(self, node: Node) -> str:
|
||||||
# type: (nodes.Node) -> str
|
|
||||||
"""Get type of enumerable nodes."""
|
"""Get type of enumerable nodes."""
|
||||||
def has_child(node, cls):
|
def has_child(node: Element, cls: Type) -> bool:
|
||||||
# type: (nodes.Element, Type) -> bool
|
|
||||||
return any(isinstance(child, cls) for child in node)
|
return any(isinstance(child, cls) for child in node)
|
||||||
|
|
||||||
if isinstance(node, nodes.section):
|
if isinstance(node, nodes.section):
|
||||||
@ -939,8 +922,7 @@ class StandardDomain(Domain):
|
|||||||
figtype, _ = self.enumerable_nodes.get(node.__class__, (None, None))
|
figtype, _ = self.enumerable_nodes.get(node.__class__, (None, None))
|
||||||
return figtype
|
return figtype
|
||||||
|
|
||||||
def get_figtype(self, node):
|
def get_figtype(self, node: Node) -> str:
|
||||||
# type: (nodes.Node) -> str
|
|
||||||
"""Get figure type of nodes.
|
"""Get figure type of nodes.
|
||||||
|
|
||||||
.. deprecated:: 1.8
|
.. deprecated:: 1.8
|
||||||
@ -950,8 +932,8 @@ class StandardDomain(Domain):
|
|||||||
RemovedInSphinx30Warning, stacklevel=2)
|
RemovedInSphinx30Warning, stacklevel=2)
|
||||||
return self.get_enumerable_node_type(node)
|
return self.get_enumerable_node_type(node)
|
||||||
|
|
||||||
def get_fignumber(self, env, builder, figtype, docname, target_node):
|
def get_fignumber(self, env: "BuildEnvironment", builder: "Builder",
|
||||||
# type: (BuildEnvironment, Builder, str, str, nodes.Element) -> Tuple[int, ...]
|
figtype: str, docname: str, target_node: Element) -> Tuple[int, ...]:
|
||||||
if figtype == 'section':
|
if figtype == 'section':
|
||||||
if builder.name == 'latex':
|
if builder.name == 'latex':
|
||||||
return tuple()
|
return tuple()
|
||||||
@ -973,8 +955,7 @@ class StandardDomain(Domain):
|
|||||||
# Maybe it is defined in orphaned document.
|
# Maybe it is defined in orphaned document.
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
def get_full_qualified_name(self, node):
|
def get_full_qualified_name(self, node: Element) -> str:
|
||||||
# type: (nodes.Element) -> str
|
|
||||||
if node.get('reftype') == 'option':
|
if node.get('reftype') == 'option':
|
||||||
progname = node.get('std:program')
|
progname = node.get('std:program')
|
||||||
command = ws_re.split(node.get('reftarget'))
|
command = ws_re.split(node.get('reftarget'))
|
||||||
@ -988,24 +969,20 @@ class StandardDomain(Domain):
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def note_citations(self, env, docname, document):
|
def note_citations(self, env: "BuildEnvironment", docname: str, document: nodes.document) -> None: # NOQA
|
||||||
# type: (BuildEnvironment, str, nodes.document) -> None
|
|
||||||
warnings.warn('StandardDomain.note_citations() is deprecated.',
|
warnings.warn('StandardDomain.note_citations() is deprecated.',
|
||||||
RemovedInSphinx40Warning)
|
RemovedInSphinx40Warning)
|
||||||
|
|
||||||
def note_citation_refs(self, env, docname, document):
|
def note_citation_refs(self, env: "BuildEnvironment", docname: str, document: nodes.document) -> None: # NOQA
|
||||||
# type: (BuildEnvironment, str, nodes.document) -> None
|
|
||||||
warnings.warn('StandardDomain.note_citation_refs() is deprecated.',
|
warnings.warn('StandardDomain.note_citation_refs() is deprecated.',
|
||||||
RemovedInSphinx40Warning)
|
RemovedInSphinx40Warning)
|
||||||
|
|
||||||
def note_labels(self, env, docname, document):
|
def note_labels(self, env: "BuildEnvironment", docname: str, document: nodes.document) -> None: # NOQA
|
||||||
# type: (BuildEnvironment, str, nodes.document) -> None
|
|
||||||
warnings.warn('StandardDomain.note_labels() is deprecated.',
|
warnings.warn('StandardDomain.note_labels() is deprecated.',
|
||||||
RemovedInSphinx40Warning)
|
RemovedInSphinx40Warning)
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app: "Sphinx") -> Dict[str, Any]:
|
||||||
# type: (Sphinx) -> Dict[str, Any]
|
|
||||||
app.add_domain(StandardDomain)
|
app.add_domain(StandardDomain)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
Loading…
Reference in New Issue
Block a user