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:
2
CHANGES
2
CHANGES
@@ -93,6 +93,8 @@ Bugs fixed
|
|||||||
* C, properly reject function declarations when a keyword is used
|
* C, properly reject function declarations when a keyword is used
|
||||||
as parameter name.
|
as parameter name.
|
||||||
* #8933: viewcode: Failed to create back-links on parallel build
|
* #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
|
Testing
|
||||||
--------
|
--------
|
||||||
|
|||||||
@@ -669,15 +669,24 @@ class ASTParameters(ASTBase):
|
|||||||
def describe_signature(self, signode: TextElement, mode: str,
|
def describe_signature(self, signode: TextElement, mode: str,
|
||||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||||
verify_description_mode(mode)
|
verify_description_mode(mode)
|
||||||
paramlist = addnodes.desc_parameterlist()
|
# only use the desc_parameterlist for the outer list, not for inner lists
|
||||||
for arg in self.args:
|
if mode == 'lastIsName':
|
||||||
param = addnodes.desc_parameter('', '', noemph=True)
|
paramlist = addnodes.desc_parameterlist()
|
||||||
if mode == 'lastIsName': # i.e., outer-function params
|
for arg in self.args:
|
||||||
|
param = addnodes.desc_parameter('', '', noemph=True)
|
||||||
arg.describe_signature(param, 'param', env, symbol=symbol)
|
arg.describe_signature(param, 'param', env, symbol=symbol)
|
||||||
else:
|
paramlist += param
|
||||||
arg.describe_signature(param, 'markType', env, symbol=symbol)
|
signode += paramlist
|
||||||
paramlist += param
|
else:
|
||||||
signode += paramlist
|
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:
|
for attr in self.attrs:
|
||||||
signode += nodes.Text(' ')
|
signode += nodes.Text(' ')
|
||||||
attr.describe_signature(signode)
|
attr.describe_signature(signode)
|
||||||
|
|||||||
@@ -1967,15 +1967,23 @@ class ASTParametersQualifiers(ASTBase):
|
|||||||
def describe_signature(self, signode: TextElement, mode: str,
|
def describe_signature(self, signode: TextElement, mode: str,
|
||||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||||
verify_description_mode(mode)
|
verify_description_mode(mode)
|
||||||
paramlist = addnodes.desc_parameterlist()
|
# only use the desc_parameterlist for the outer list, not for inner lists
|
||||||
for arg in self.args:
|
if mode == 'lastIsName':
|
||||||
param = addnodes.desc_parameter('', '', noemph=True)
|
paramlist = addnodes.desc_parameterlist()
|
||||||
if mode == 'lastIsName': # i.e., outer-function params
|
for arg in self.args:
|
||||||
|
param = addnodes.desc_parameter('', '', noemph=True)
|
||||||
arg.describe_signature(param, 'param', env, symbol=symbol)
|
arg.describe_signature(param, 'param', env, symbol=symbol)
|
||||||
else:
|
paramlist += param
|
||||||
arg.describe_signature(param, 'markType', env, symbol=symbol)
|
signode += paramlist
|
||||||
paramlist += param
|
else:
|
||||||
signode += paramlist
|
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:
|
def _add_anno(signode: TextElement, text: str) -> None:
|
||||||
signode += nodes.Text(' ')
|
signode += nodes.Text(' ')
|
||||||
|
|||||||
@@ -420,6 +420,9 @@ def test_function_definitions():
|
|||||||
with pytest.raises(DefinitionError):
|
with pytest.raises(DefinitionError):
|
||||||
parse('function', 'void f(int for)')
|
parse('function', 'void f(int for)')
|
||||||
|
|
||||||
|
# from #8960
|
||||||
|
check('function', 'void f(void (*p)(int, double), int i)', {1: 'f'})
|
||||||
|
|
||||||
|
|
||||||
def test_nested_name():
|
def test_nested_name():
|
||||||
check('struct', '{key}.A', {1: "A"})
|
check('struct', '{key}.A', {1: "A"})
|
||||||
|
|||||||
@@ -619,6 +619,9 @@ def test_function_definitions():
|
|||||||
# from breathe#441
|
# from breathe#441
|
||||||
check('function', 'auto MakeThingy() -> Thingy*', {1: 'MakeThingy', 2: '10MakeThingyv'})
|
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():
|
def test_operators():
|
||||||
check('function', 'void operator new()', {1: "new-operator", 2: "nwv"})
|
check('function', 'void operator new()', {1: "new-operator", 2: "nwv"})
|
||||||
|
|||||||
Reference in New Issue
Block a user