From b839a7cf0e7d8467f72891e0df42b92879e79819 Mon Sep 17 00:00:00 2001 From: lucdanton Date: Wed, 23 May 2018 03:58:39 +0200 Subject: [PATCH 1/3] C++: parse pack expansions in function calls. --- CHANGES | 1 + sphinx/domains/cpp.py | 25 ++++++++++++++++++++++++- tests/test_domain_cpp.py | 3 +++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index ec5b86c07..a394a7ce6 100644 --- a/CHANGES +++ b/CHANGES @@ -26,6 +26,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 diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 5475b8d4a..f2505f881 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -1219,6 +1219,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 @@ -4273,6 +4289,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 @@ -4299,7 +4318,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 de72148a5..8d097d25e 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") From b371312887869c52e7be9033e60450a9dc12ca0c Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 29 May 2018 01:46:45 +0900 Subject: [PATCH 2/3] Bump to X.Y.Z final --- CHANGES | 19 ++----------------- sphinx/__init__.py | 4 ++-- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/CHANGES b/CHANGES index a394a7ce6..44d9d6a9c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,17 +1,5 @@ -Release 1.7.5 (in development) -============================== - -Dependencies ------------- - -Incompatible changes --------------------- - -Deprecated ----------- - -Features added --------------- +Release 1.7.5 (released May 29, 2018) +===================================== Bugs fixed ---------- @@ -46,9 +34,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/__init__.py b/sphinx/__init__.py index 7b3ddfea8..f608609cc 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -31,13 +31,13 @@ if 'PYTHONWARNINGS' not in os.environ: warnings.filterwarnings('ignore', "'U' mode is deprecated", DeprecationWarning, module='docutils.io') -__version__ = '1.7.5+' +__version__ = '1.7.5' __released__ = '1.7.5' # used when Sphinx builds its own docs # version info for better programmatic use # possible values for 3rd element: 'alpha', 'beta', 'rc', 'final' # 'final' has 0 as the last element -version_info = (1, 7, 5, 'beta', 0) +version_info = (1, 7, 5, 'final', 0) package_dir = path.abspath(path.dirname(__file__)) From e0e0d917a6a02ea74d99e044c506cd73dfdd06d4 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 29 May 2018 02:12:26 +0900 Subject: [PATCH 3/3] Bump version --- CHANGES | 21 +++++++++++++++++++++ sphinx/__init__.py | 6 +++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 44d9d6a9c..bca34a529 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,24 @@ +Release 1.7.6 (in development) +============================== + +Dependencies +------------ + +Incompatible changes +-------------------- + +Deprecated +---------- + +Features added +-------------- + +Bugs fixed +---------- + +Testing +-------- + Release 1.7.5 (released May 29, 2018) ===================================== diff --git a/sphinx/__init__.py b/sphinx/__init__.py index f608609cc..c81166603 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -31,13 +31,13 @@ if 'PYTHONWARNINGS' not in os.environ: warnings.filterwarnings('ignore', "'U' mode is deprecated", DeprecationWarning, module='docutils.io') -__version__ = '1.7.5' -__released__ = '1.7.5' # used when Sphinx builds its own docs +__version__ = '1.7.6+' +__released__ = '1.7.6' # used when Sphinx builds its own docs # version info for better programmatic use # possible values for 3rd element: 'alpha', 'beta', 'rc', 'final' # 'final' has 0 as the last element -version_info = (1, 7, 5, 'final', 0) +version_info = (1, 7, 6, 'beta', 0) package_dir = path.abspath(path.dirname(__file__))