Skip to content

Commit 3fb3fdb

Browse files
committed
C++, add parameter pack expansion as base classes.
1 parent 8e86407 commit 3fb3fdb

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

sphinx/domains/cpp.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,8 @@
212212
grammar:
213213
nested-name "final"[opt] (":" base-specifier-list)[opt]
214214
base-specifier-list ->
215-
base-specifier
216-
| base-specifier-list, base-specifier
215+
base-specifier "..."[opt]
216+
| base-specifier-list, base-specifier "..."[opt]
217217
base-specifier ->
218218
base-type-specifier
219219
| "virtual" access-spe"cifier[opt] base-type-specifier
@@ -1849,10 +1849,11 @@ def describe_signature(self, signode, mode, env, symbol):
18491849

18501850

18511851
class ASTBaseClass(ASTBase):
1852-
def __init__(self, name, visibility, virtual):
1852+
def __init__(self, name, visibility, virtual, pack):
18531853
self.name = name
18541854
self.visibility = visibility
18551855
self.virtual = virtual
1856+
self.pack = pack
18561857

18571858
def __unicode__(self):
18581859
res = []
@@ -1862,6 +1863,8 @@ def __unicode__(self):
18621863
if self.virtual:
18631864
res.append('virtual ')
18641865
res.append(text_type(self.name))
1866+
if self.pack:
1867+
res.append('...')
18651868
return u''.join(res)
18661869

18671870
def describe_signature(self, signode, mode, env, symbol):
@@ -1874,6 +1877,8 @@ def describe_signature(self, signode, mode, env, symbol):
18741877
signode += addnodes.desc_annotation('virtual', 'virtual')
18751878
signode += nodes.Text(' ')
18761879
self.name.describe_signature(signode, 'markType', env, symbol=symbol)
1880+
if self.pack:
1881+
signode += nodes.Text('...')
18771882

18781883

18791884
class ASTClass(ASTBase):
@@ -3025,6 +3030,7 @@ def _parse_class(self):
30253030
self.skip_ws()
30263031
visibility = 'private'
30273032
virtual = False
3033+
pack = False
30283034
if self.skip_word_and_ws('virtual'):
30293035
virtual = True
30303036
if self.match(_visibility_re):
@@ -3033,7 +3039,9 @@ def _parse_class(self):
30333039
if not virtual and self.skip_word_and_ws('virtual'):
30343040
virtual = True
30353041
baseName = self._parse_nested_name()
3036-
bases.append(ASTBaseClass(baseName, visibility, virtual))
3042+
self.skip_ws()
3043+
pack = self.skip_string('...')
3044+
bases.append(ASTBaseClass(baseName, visibility, virtual, pack))
30373045
self.skip_ws()
30383046
if self.skip_string(','):
30393047
continue

tests/test_domain_cpp.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,8 @@ def test_bases():
311311
check('class', 'A : virtual private B', 'A', '1A', output='A : virtual B')
312312
check('class', 'A : B, virtual C', 'A', '1A')
313313
check('class', 'A : public virtual B', 'A', '1A')
314+
check('class', 'A : B, C...', 'A', '1A')
315+
check('class', 'A : B..., C', 'A', '1A')
314316

315317

316318
def test_operators():

0 commit comments

Comments
 (0)