mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
C and C++, fix nested paramter lists
This commit is contained in:
parent
cba9ed0bb5
commit
72e231d0e6
2
CHANGES
2
CHANGES
@ -93,6 +93,8 @@ Bugs fixed
|
||||
* C, properly reject function declarations when a keyword is used
|
||||
as parameter name.
|
||||
* #8933: viewcode: Failed to create back-links on parallel build
|
||||
* #8960: C and C++, fix rendering of (member) function pointer types in
|
||||
function parameter lists.
|
||||
|
||||
Testing
|
||||
--------
|
||||
|
@ -669,15 +669,24 @@ class ASTParameters(ASTBase):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
paramlist = addnodes.desc_parameterlist()
|
||||
for arg in self.args:
|
||||
param = addnodes.desc_parameter('', '', noemph=True)
|
||||
if mode == 'lastIsName': # i.e., outer-function params
|
||||
# only use the desc_parameterlist for the outer list, not for inner lists
|
||||
if mode == 'lastIsName':
|
||||
paramlist = addnodes.desc_parameterlist()
|
||||
for arg in self.args:
|
||||
param = addnodes.desc_parameter('', '', noemph=True)
|
||||
arg.describe_signature(param, 'param', env, symbol=symbol)
|
||||
else:
|
||||
arg.describe_signature(param, 'markType', env, symbol=symbol)
|
||||
paramlist += param
|
||||
signode += paramlist
|
||||
paramlist += param
|
||||
signode += paramlist
|
||||
else:
|
||||
signode += nodes.Text('(', '(')
|
||||
first = True
|
||||
for arg in self.args:
|
||||
if not first:
|
||||
signode += nodes.Text(', ', ', ')
|
||||
first = False
|
||||
arg.describe_signature(signode, 'markType', env, symbol=symbol)
|
||||
signode += nodes.Text(')', ')')
|
||||
|
||||
for attr in self.attrs:
|
||||
signode += nodes.Text(' ')
|
||||
attr.describe_signature(signode)
|
||||
|
@ -1967,15 +1967,23 @@ class ASTParametersQualifiers(ASTBase):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
paramlist = addnodes.desc_parameterlist()
|
||||
for arg in self.args:
|
||||
param = addnodes.desc_parameter('', '', noemph=True)
|
||||
if mode == 'lastIsName': # i.e., outer-function params
|
||||
# only use the desc_parameterlist for the outer list, not for inner lists
|
||||
if mode == 'lastIsName':
|
||||
paramlist = addnodes.desc_parameterlist()
|
||||
for arg in self.args:
|
||||
param = addnodes.desc_parameter('', '', noemph=True)
|
||||
arg.describe_signature(param, 'param', env, symbol=symbol)
|
||||
else:
|
||||
arg.describe_signature(param, 'markType', env, symbol=symbol)
|
||||
paramlist += param
|
||||
signode += paramlist
|
||||
paramlist += param
|
||||
signode += paramlist
|
||||
else:
|
||||
signode += nodes.Text('(', '(')
|
||||
first = True
|
||||
for arg in self.args:
|
||||
if not first:
|
||||
signode += nodes.Text(', ', ', ')
|
||||
first = False
|
||||
arg.describe_signature(signode, 'markType', env, symbol=symbol)
|
||||
signode += nodes.Text(')', ')')
|
||||
|
||||
def _add_anno(signode: TextElement, text: str) -> None:
|
||||
signode += nodes.Text(' ')
|
||||
|
@ -420,6 +420,9 @@ def test_function_definitions():
|
||||
with pytest.raises(DefinitionError):
|
||||
parse('function', 'void f(int for)')
|
||||
|
||||
# from #8960
|
||||
check('function', 'void f(void (*p)(int, double), int i)', {1: 'f'})
|
||||
|
||||
|
||||
def test_nested_name():
|
||||
check('struct', '{key}.A', {1: "A"})
|
||||
|
@ -619,6 +619,9 @@ def test_function_definitions():
|
||||
# from breathe#441
|
||||
check('function', 'auto MakeThingy() -> Thingy*', {1: 'MakeThingy', 2: '10MakeThingyv'})
|
||||
|
||||
# from #8960
|
||||
check('function', 'void f(void (*p)(int, double), int i)', {2: '1fPFvidEi'})
|
||||
|
||||
|
||||
def test_operators():
|
||||
check('function', 'void operator new()', {1: "new-operator", 2: "nwv"})
|
||||
|
Loading…
Reference in New Issue
Block a user