Skip to content

Commit

Permalink
Fix sphinx-doc#7418: std domain: term role role could not match case-…
Browse files Browse the repository at this point in the history
…insensitively
  • Loading branch information
tk0miya committed Apr 18, 2020
1 parent 21ca437 commit 527a3c4
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -20,6 +20,7 @@ Bugs fixed
----------

* #7461: py domain: fails with IndexError for empty tuple in type annotation
* #7418: std domain: :rst:role:`term` role could not match case-insensitively
* #7461: autodoc: empty tuple in type annotation is not shown correctly
* C++, fix spacing issue in east-const declarations.

Expand Down
24 changes: 24 additions & 0 deletions sphinx/domains/std.py
Expand Up @@ -789,6 +789,8 @@ def resolve_xref(self, env: "BuildEnvironment", fromdocname: str, builder: "Buil
RemovedInSphinx40Warning)
domain = env.get_domain('citation')
return domain.resolve_xref(env, fromdocname, builder, typ, target, node, contnode)
elif typ == 'term':
resolver = self._resolve_term_xref
else:
resolver = self._resolve_obj_xref

Expand Down Expand Up @@ -923,6 +925,28 @@ def _resolve_option_xref(self, env: "BuildEnvironment", fromdocname: str,
return make_refnode(builder, fromdocname, docname,
labelid, contnode)

def _resolve_term_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str,
node: pending_xref, contnode: Element) -> Element:
result = self._resolve_obj_xref(env, fromdocname, builder, typ,
target, node, contnode)
if result:
return result
else:
for objtype, term in self.objects:
if objtype == 'term' and term.lower() == target.lower():
docname, labelid = self.objects[objtype, term]
logger.warning(__('term %s not found in case sensitive match.'
'made a reference to %s instead.'),
target, term, location=node, type='ref', subtype='term')
break
else:
docname, labelid = '', ''
if not docname:
return None
return make_refnode(builder, fromdocname, docname,
labelid, contnode)

def _resolve_obj_xref(self, env: "BuildEnvironment", fromdocname: str,
builder: "Builder", typ: str, target: str,
node: pending_xref, contnode: Element) -> Element:
Expand Down
13 changes: 12 additions & 1 deletion tests/test_domain_std.py
Expand Up @@ -141,12 +141,23 @@ def test_glossary(app):
[nodes.definition, nodes.paragraph, "description"])

# index
objects = list(app.env.get_domain("std").get_objects())
domain = app.env.get_domain("std")
objects = list(domain.get_objects())
assert ("term1", "term1", "term", "index", "term-term1", -1) in objects
assert ("TERM2", "TERM2", "term", "index", "term-TERM2", -1) in objects
assert ("term3", "term3", "term", "index", "term-term3", -1) in objects
assert ("term4", "term4", "term", "index", "term-term4", -1) in objects

# term reference (case sensitive)
refnode = domain.resolve_xref(app.env, 'index', app.builder, 'term', 'term1',
pending_xref(), nodes.paragraph())
assert_node(refnode, nodes.reference, refid="term-term1")

# term reference (case insensitive)
refnode = domain.resolve_xref(app.env, 'index', app.builder, 'term', 'term2',
pending_xref(), nodes.paragraph())
assert_node(refnode, nodes.reference, refid="term-TERM2")


def test_glossary_warning(app, status, warning):
# empty line between terms
Expand Down

0 comments on commit 527a3c4

Please sign in to comment.