mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
1
CHANGES
1
CHANGES
@@ -35,6 +35,7 @@ Bugs fixed
|
||||
* #3329: emit warnings if po file is invalid and can't read it. Also writing mo too
|
||||
* #3337: Ugly rendering of definition list term's classifier
|
||||
* #3335: gettext does not extract field_name of a field in a field_list
|
||||
* #2952: C++, fix refs to operator() functions.
|
||||
|
||||
|
||||
Release 1.5.1 (released Dec 13, 2016)
|
||||
|
||||
@@ -4032,6 +4032,9 @@ class DefinitionParser(object):
|
||||
def parse_xref_object(self):
|
||||
templatePrefix = self._parse_template_declaration_prefix(objectType="xref")
|
||||
name = self._parse_nested_name()
|
||||
# if there are '()' left, just skip them
|
||||
self.skip_ws()
|
||||
self.skip_string('()')
|
||||
templatePrefix = self._check_template_consistency(name, templatePrefix,
|
||||
fullSpecShorthand=True)
|
||||
res = ASTNamespace(name, templatePrefix)
|
||||
@@ -4488,10 +4491,12 @@ class CPPDomain(Domain):
|
||||
if emitWarnings:
|
||||
env.warn_node(msg, node)
|
||||
warner = Warner()
|
||||
# add parens again for those that could be functions
|
||||
if typ == 'any' or typ == 'func':
|
||||
target += '()'
|
||||
parser = DefinitionParser(target, warner, env.config)
|
||||
try:
|
||||
ast = parser.parse_xref_object()
|
||||
parser.skip_ws()
|
||||
parser.assert_end()
|
||||
except DefinitionError as e:
|
||||
warner.warn('Unparseable C++ cross-reference: %r\n%s'
|
||||
@@ -4551,11 +4556,26 @@ class CPPDomain(Domain):
|
||||
name = text_type(fullNestedName).lstrip(':')
|
||||
docname = s.docname
|
||||
assert docname
|
||||
if typ == 'any' and declaration.objectType == 'function':
|
||||
if env.config.add_function_parentheses:
|
||||
if not node['refexplicit']:
|
||||
title = contnode.pop(0).astext()
|
||||
contnode += nodes.Text(title + '()')
|
||||
# If it's operator(), we need to add '()' if explicit function parens
|
||||
# are requested. Then the Sphinx machinery will add another pair.
|
||||
# Also, if it's an 'any' ref that resolves to a function, we need to add
|
||||
# parens as well.
|
||||
addParen = 0
|
||||
if not node['refexplicit'] and declaration.objectType == 'function':
|
||||
# this is just the normal haxing for 'any' roles
|
||||
if env.config.add_function_parentheses and typ == 'any':
|
||||
addParen += 1
|
||||
# and now this stuff for operator()
|
||||
if (env.config.add_function_parentheses and typ == 'function' and
|
||||
contnode[-1].astext().endswith('operator()')):
|
||||
addParen += 1
|
||||
if ((typ == 'any' or typ == 'function') and
|
||||
contnode[-1].astext().endswith('operator') and
|
||||
name.endswith('operator()')):
|
||||
addParen += 1
|
||||
if addParen > 0:
|
||||
title = contnode.pop(0).astext()
|
||||
contnode += nodes.Text(title + '()' * addParen)
|
||||
return make_refnode(builder, fromdocname, docname,
|
||||
declaration.get_newest_id(), contnode, name
|
||||
), declaration.objectType
|
||||
|
||||
@@ -11,3 +11,7 @@ any role
|
||||
* ref function with parens :cpp:any:`paren_2()`
|
||||
* ref function without parens, explicit title :cpp:any:`paren_3_title <paren_3>`
|
||||
* ref function with parens, explicit title :cpp:any:`paren_4_title <paren_4()>`
|
||||
* ref op call without parens :cpp:any:`paren_5::operator()`
|
||||
* ref op call with parens :cpp:any:`paren_6::operator()()`
|
||||
* ref op call without parens, explicit title :cpp:any:`paren_7_title <paren_7::operator()>`
|
||||
* ref op call with parens, explicit title :cpp:any:`paren_8_title <paren_8::operator()()>`
|
||||
|
||||
@@ -38,9 +38,10 @@ directives
|
||||
|
||||
|
||||
.. cpp:function:: void paren_1(int, float)
|
||||
|
||||
.. cpp:function:: void paren_2(int, float)
|
||||
|
||||
.. cpp:function:: void paren_3(int, float)
|
||||
|
||||
.. cpp:function:: void paren_4(int, float)
|
||||
.. cpp:function:: void paren_5::operator()(int)
|
||||
.. cpp:function:: void paren_6::operator()(int)
|
||||
.. cpp:function:: void paren_7::operator()(int)
|
||||
.. cpp:function:: void paren_8::operator()(int)
|
||||
|
||||
@@ -11,3 +11,7 @@ roles
|
||||
* ref function with parens :cpp:func:`paren_2()`
|
||||
* ref function without parens, explicit title :cpp:func:`paren_3_title <paren_3>`
|
||||
* ref function with parens, explicit title :cpp:func:`paren_4_title <paren_4()>`
|
||||
* ref op call without parens :cpp:func:`paren_5::operator()`
|
||||
* ref op call with parens :cpp:func:`paren_6::operator()()`
|
||||
* ref op call without parens, explicit title :cpp:func:`paren_7_title <paren_7::operator()>`
|
||||
* ref op call with parens, explicit title :cpp:func:`paren_8_title <paren_8::operator()()>`
|
||||
|
||||
@@ -524,7 +524,11 @@ def test_build_domain_cpp_with_add_function_parentheses_is_True(app, status, war
|
||||
('ref function without parens ', 'paren_1\(\)'),
|
||||
('ref function with parens ', 'paren_2\(\)'),
|
||||
('ref function without parens, explicit title ', 'paren_3_title'),
|
||||
('ref function with parens, explicit title ', 'paren_4_title')
|
||||
('ref function with parens, explicit title ', 'paren_4_title'),
|
||||
('ref op call without parens ', 'paren_5::operator\(\)\(\)'),
|
||||
('ref op call with parens ', 'paren_6::operator\(\)\(\)'),
|
||||
('ref op call without parens, explicit title ', 'paren_7_title'),
|
||||
('ref op call with parens, explicit title ', 'paren_8_title')
|
||||
]
|
||||
|
||||
f = 'roles.html'
|
||||
@@ -562,7 +566,11 @@ def test_build_domain_cpp_with_add_function_parentheses_is_False(app, status, wa
|
||||
('ref function without parens ', 'paren_1'),
|
||||
('ref function with parens ', 'paren_2'),
|
||||
('ref function without parens, explicit title ', 'paren_3_title'),
|
||||
('ref function with parens, explicit title ', 'paren_4_title')
|
||||
('ref function with parens, explicit title ', 'paren_4_title'),
|
||||
('ref op call without parens ', 'paren_5::operator\(\)'),
|
||||
('ref op call with parens ', 'paren_6::operator\(\)'),
|
||||
('ref op call without parens, explicit title ', 'paren_7_title'),
|
||||
('ref op call with parens, explicit title ', 'paren_8_title')
|
||||
]
|
||||
|
||||
f = 'roles.html'
|
||||
|
||||
Reference in New Issue
Block a user