Migrate to py3 style type annotation: sphinx.domains.changeset

This commit is contained in:
Takeshi KOMIYA 2019-06-04 12:25:31 +09:00
parent 62e5f6935b
commit 6c47f7d4a2

View File

@ -9,9 +9,11 @@
""" """
from collections import namedtuple from collections import namedtuple
from typing import Any, Dict, List
from typing import cast from typing import cast
from docutils import nodes from docutils import nodes
from docutils.nodes import Node
from sphinx import addnodes from sphinx import addnodes
from sphinx import locale from sphinx import locale
@ -23,9 +25,8 @@ from sphinx.util.docutils import SphinxDirective
if False: if False:
# For type annotation # For type annotation
from typing import Any, Dict, List # NOQA from sphinx.application import Sphinx
from sphinx.application import Sphinx # NOQA from sphinx.environment import BuildEnvironment
from sphinx.environment import BuildEnvironment # NOQA
versionlabels = { versionlabels = {
@ -63,8 +64,7 @@ class VersionChange(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]
node = addnodes.versionmodified() node = addnodes.versionmodified()
node.document = self.state.document node.document = self.state.document
self.set_source_info(node) self.set_source_info(node)
@ -102,7 +102,7 @@ class VersionChange(SphinxDirective):
domain = cast(ChangeSetDomain, self.env.get_domain('changeset')) domain = cast(ChangeSetDomain, self.env.get_domain('changeset'))
domain.note_changeset(node) domain.note_changeset(node)
ret = [node] # type: List[nodes.Node] ret = [node] # type: List[Node]
ret += messages ret += messages
return ret return ret
@ -117,15 +117,13 @@ class ChangeSetDomain(Domain):
'changes': {}, # version -> list of ChangeSet 'changes': {}, # version -> list of ChangeSet
} # type: Dict } # type: Dict
def clear_doc(self, docname): def clear_doc(self, docname: str) -> None:
# type: (str) -> None
for version, changes in self.data['changes'].items(): for version, changes in self.data['changes'].items():
for changeset in changes[:]: for changeset in changes[:]:
if changeset.docname == docname: if changeset.docname == docname:
changes.remove(changeset) changes.remove(changeset)
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 version, otherchanges in otherdata['changes'].items(): for version, otherchanges in otherdata['changes'].items():
changes = self.data['changes'].setdefault(version, []) changes = self.data['changes'].setdefault(version, [])
@ -133,12 +131,10 @@ class ChangeSetDomain(Domain):
if changeset.docname in docnames: if changeset.docname in docnames:
changes.append(changeset) changes.append(changeset)
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
pass # nothing to do here. All changesets are registered on calling directive. pass # nothing to do here. All changesets are registered on calling directive.
def note_changeset(self, node): def note_changeset(self, node: addnodes.versionmodified) -> None:
# type: (addnodes.versionmodified) -> None
version = node['version'] version = node['version']
module = self.env.ref_context.get('py:module') module = self.env.ref_context.get('py:module')
objname = self.env.temp_data.get('object') objname = self.env.temp_data.get('object')
@ -146,13 +142,11 @@ class ChangeSetDomain(Domain):
module, objname, node.astext()) module, objname, node.astext())
self.data['changes'].setdefault(version, []).append(changeset) self.data['changes'].setdefault(version, []).append(changeset)
def get_changesets_for(self, version): def get_changesets_for(self, version: str) -> List[ChangeSet]:
# type: (str) -> List[ChangeSet]
return self.data['changes'].get(version, []) return self.data['changes'].get(version, [])
def setup(app): def setup(app: "Sphinx") -> Dict[str, Any]:
# type: (Sphinx) -> Dict[str, Any]
app.add_domain(ChangeSetDomain) app.add_domain(ChangeSetDomain)
app.add_directive('deprecated', VersionChange) app.add_directive('deprecated', VersionChange)
app.add_directive('versionadded', VersionChange) app.add_directive('versionadded', VersionChange)