mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
C++, add support for final classes.
This commit is contained in:
parent
bf25b48d78
commit
8e864076a9
3
CHANGES
3
CHANGES
@ -66,7 +66,8 @@ Bugs fixed
|
|||||||
transforming.
|
transforming.
|
||||||
* C++, fix parsing of 'signed char' and 'unsigned char' as types.
|
* C++, fix parsing of 'signed char' and 'unsigned char' as types.
|
||||||
* C++, add missing support for 'friend' functions.
|
* C++, add missing support for 'friend' functions.
|
||||||
* C++, add support for virtual bases (thanks to Rapptz).
|
* C++, add missing support for virtual base classes (thanks to Rapptz).
|
||||||
|
* C++, add support for final classes.
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
-------------
|
-------------
|
||||||
|
@ -210,8 +210,7 @@ from sphinx.util.docfields import Field, GroupedField
|
|||||||
class_object:
|
class_object:
|
||||||
goal: a class declaration, but with specification of a base class
|
goal: a class declaration, but with specification of a base class
|
||||||
grammar:
|
grammar:
|
||||||
nested-name
|
nested-name "final"[opt] (":" base-specifier-list)[opt]
|
||||||
| nested-name ":" base-specifier-list
|
|
||||||
base-specifier-list ->
|
base-specifier-list ->
|
||||||
base-specifier
|
base-specifier
|
||||||
| base-specifier-list, base-specifier
|
| base-specifier-list, base-specifier
|
||||||
@ -1878,8 +1877,9 @@ class ASTBaseClass(ASTBase):
|
|||||||
|
|
||||||
|
|
||||||
class ASTClass(ASTBase):
|
class ASTClass(ASTBase):
|
||||||
def __init__(self, name, bases):
|
def __init__(self, name, final, bases):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
self.final = final
|
||||||
self.bases = bases
|
self.bases = bases
|
||||||
|
|
||||||
def get_id_v1(self, objectType, symbol):
|
def get_id_v1(self, objectType, symbol):
|
||||||
@ -1891,6 +1891,8 @@ class ASTClass(ASTBase):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
res = []
|
res = []
|
||||||
res.append(text_type(self.name))
|
res.append(text_type(self.name))
|
||||||
|
if self.final:
|
||||||
|
res.append(' final')
|
||||||
if len(self.bases) > 0:
|
if len(self.bases) > 0:
|
||||||
res.append(' : ')
|
res.append(' : ')
|
||||||
first = True
|
first = True
|
||||||
@ -1904,6 +1906,9 @@ class ASTClass(ASTBase):
|
|||||||
def describe_signature(self, signode, mode, env, symbol):
|
def describe_signature(self, signode, mode, env, symbol):
|
||||||
_verify_description_mode(mode)
|
_verify_description_mode(mode)
|
||||||
self.name.describe_signature(signode, mode, env, symbol=symbol)
|
self.name.describe_signature(signode, mode, env, symbol=symbol)
|
||||||
|
if self.final:
|
||||||
|
signode += nodes.Text(' ')
|
||||||
|
signode += addnodes.desc_annotation('final', 'final')
|
||||||
if len(self.bases) > 0:
|
if len(self.bases) > 0:
|
||||||
signode += nodes.Text(' : ')
|
signode += nodes.Text(' : ')
|
||||||
for b in self.bases:
|
for b in self.bases:
|
||||||
@ -3011,6 +3016,8 @@ class DefinitionParser(object):
|
|||||||
|
|
||||||
def _parse_class(self):
|
def _parse_class(self):
|
||||||
name = self._parse_nested_name()
|
name = self._parse_nested_name()
|
||||||
|
self.skip_ws()
|
||||||
|
final = self.skip_word_and_ws('final')
|
||||||
bases = []
|
bases = []
|
||||||
self.skip_ws()
|
self.skip_ws()
|
||||||
if self.skip_string(':'):
|
if self.skip_string(':'):
|
||||||
@ -3032,7 +3039,7 @@ class DefinitionParser(object):
|
|||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
return ASTClass(name, bases)
|
return ASTClass(name, final, bases)
|
||||||
|
|
||||||
def _parse_enum(self):
|
def _parse_enum(self):
|
||||||
scoped = None # is set by CPPEnumObject
|
scoped = None # is set by CPPEnumObject
|
||||||
|
@ -296,6 +296,10 @@ def test_templates():
|
|||||||
None, "I0E5allowP1FN4funcI1F1BXG!=1EE4typeE")
|
None, "I0E5allowP1FN4funcI1F1BXG!=1EE4typeE")
|
||||||
|
|
||||||
|
|
||||||
|
def test_class():
|
||||||
|
check('class', 'A final', 'A', '1A')
|
||||||
|
|
||||||
|
|
||||||
def test_bases():
|
def test_bases():
|
||||||
check('class', 'A', "A", "1A")
|
check('class', 'A', "A", "1A")
|
||||||
check('class', 'A::B::C', "A::B::C", "N1A1B1CE")
|
check('class', 'A::B::C', "A::B::C", "N1A1B1CE")
|
||||||
|
Loading…
Reference in New Issue
Block a user