diff --git a/CHANGES b/CHANGES index 6cc443227..add6c1735 100644 --- a/CHANGES +++ b/CHANGES @@ -144,7 +144,7 @@ Features removed * ``sphinx.ext.pngmath`` extension -Release 1.7.5 (in development) +Release 1.7.6 (in development) ============================== Dependencies @@ -162,6 +162,15 @@ Features added Bugs fixed ---------- +Testing +-------- + +Release 1.7.5 (released May 29, 2018) +===================================== + +Bugs fixed +---------- + * #4924: html search: Upper characters problem in any other languages * #4932: apidoc: some subpackage is ignored if sibling subpackage contains a module starting with underscore @@ -172,6 +181,7 @@ Bugs fixed * #4825: C++, properly parse expr roles and give better error messages when (escaped) line breaks are present. * C++, properly use ``desc_addname`` nodes for prefixes of names. +* C++, parse pack expansions in function calls. * #4915, #4916: links on search page are broken when using dirhtml builder * #4969: autodoc: constructor method should not have return annotation * latex: deeply nested enumerated list which is beginning with non-1 causes @@ -191,9 +201,6 @@ Bugs fixed napoleon module * #5007: sphinx-build crashes when error log contains a "%" character -Testing --------- - Release 1.7.4 (released Apr 25, 2018) ===================================== diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index d247b4c7f..03f09c455 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -1221,6 +1221,22 @@ class ASTPostfixExpr(ASTBase): p.describe_signature(signode, mode, env, symbol) +class ASTPackExpansionExpr(ASTBase): + def __init__(self, expr): + self.expr = expr + + def __unicode__(self): + return text_type(self.expr) + '...' + + def get_id(self, version): + id = self.expr.get_id(version) + return 'sp' + id + + def describe_signature(self, signode, mode, env, symbol): + self.expr.describe_signature(signode, mode, env, symbol) + signode += nodes.Text('...') + + class ASTFallbackExpr(ASTBase): def __init__(self, expr): self.expr = expr @@ -4298,6 +4314,9 @@ class DefinitionParser(object): if self.skip_string('*'): # don't steal the dot self.pos -= 2 + elif self.skip_string('..'): + # don't steal the dot + self.pos -= 3 else: name = self._parse_nested_name() postFixes.append(ASTPostfixMember(name)) # type: ignore @@ -4324,7 +4343,11 @@ class DefinitionParser(object): while True: self.skip_ws() expr = self._parse_expression(inTemplate=False) - exprs.append(expr) + self.skip_ws() + if self.skip_string('...'): + exprs.append(ASTPackExpansionExpr(expr)) + else: + exprs.append(expr) self.skip_ws() if self.skip_string(')'): break diff --git a/tests/test_domain_cpp.py b/tests/test_domain_cpp.py index 759b0b74b..972448b05 100644 --- a/tests/test_domain_cpp.py +++ b/tests/test_domain_cpp.py @@ -214,6 +214,9 @@ def test_expressions(): exprCheck('operator()()', 'clclE') exprCheck('operator()()', 'clclIiEE') + # pack expansion + exprCheck('a(b(c, 1 + d...)..., e(f..., g))', 'cl1aspcl1b1cspplL1E1dEcl1esp1f1gEE') + def test_type_definitions(): check("type", "public bool b", {1: "b", 2: "1b"}, "bool b")