Fix links to external option docs with intersphinx (refs: #3769)

This commit is contained in:
Takeshi KOMIYA 2018-01-01 23:29:10 +09:00
parent f21fe6f24f
commit 850e9a9c5c
4 changed files with 20 additions and 6 deletions

View File

@ -38,6 +38,7 @@ Bugs fixed
* #4315: For PDF 'howto' documents, ``latex_toplevel_sectioning='part'`` generates * #4315: For PDF 'howto' documents, ``latex_toplevel_sectioning='part'`` generates
``\chapter`` commands ``\chapter`` commands
* #4214: Two todolist directives break sphinx-1.6.5 * #4214: Two todolist directives break sphinx-1.6.5
* Fix links to external option docs with intersphinx (refs: #3769)
Testing Testing
-------- --------

View File

@ -959,12 +959,18 @@ class StandardDomain(Domain):
def get_full_qualified_name(self, node): def get_full_qualified_name(self, node):
# type: (nodes.Node) -> unicode # type: (nodes.Node) -> unicode
progname = node.get('std:program') if node.get('reftype') == 'option':
target = node.get('reftarget') progname = node.get('std:program')
if progname is None or target is None: command = ws_re.split(node.get('reftarget'))
return None if progname:
command.insert(0, progname)
option = command.pop()
if command:
return '.'.join(['-'.join(command), option])
else:
return None
else: else:
return '.'.join([progname, target]) return None
def setup(app): def setup(app):

View File

@ -304,6 +304,7 @@ def missing_reference(app, env, node, contnode):
in_set = setname in_set = setname
to_try.append((inventories.named_inventory[setname], newtarget)) to_try.append((inventories.named_inventory[setname], newtarget))
if domain: if domain:
node['reftarget'] = newtarget
full_qualified_name = env.get_domain(domain).get_full_qualified_name(node) full_qualified_name = env.get_domain(domain).get_full_qualified_name(node)
if full_qualified_name: if full_qualified_name:
to_try.append((inventories.named_inventory[setname], full_qualified_name)) to_try.append((inventories.named_inventory[setname], full_qualified_name))

View File

@ -194,7 +194,7 @@ def test_missing_reference_stddomain(tempdir, app, status, warning):
inv_file = tempdir / 'inventory' inv_file = tempdir / 'inventory'
inv_file.write_bytes(inventory_v2) inv_file.write_bytes(inventory_v2)
app.config.intersphinx_mapping = { app.config.intersphinx_mapping = {
'https://docs.python.org/': inv_file, 'cmd': ('https://docs.python.org/', inv_file),
} }
app.config.intersphinx_cache_limit = 0 app.config.intersphinx_cache_limit = 0
@ -213,6 +213,12 @@ def test_missing_reference_stddomain(tempdir, app, status, warning):
rn = missing_reference(app, app.env, node, contnode) rn = missing_reference(app, app.env, node, contnode)
assert rn.astext() == 'ls -l' assert rn.astext() == 'ls -l'
# refers inventory by name
kwargs = {}
node, contnode = fake_node('std', 'option', 'cmd:ls -l', '-l', **kwargs)
rn = missing_reference(app, app.env, node, contnode)
assert rn.astext() == '-l'
@pytest.mark.sphinx('html', testroot='ext-intersphinx-cppdomain') @pytest.mark.sphinx('html', testroot='ext-intersphinx-cppdomain')
def test_missing_reference_cppdomain(tempdir, app, status, warning): def test_missing_reference_cppdomain(tempdir, app, status, warning):