summaryrefslogtreecommitdiff
path: root/sphinx/domains/cpp.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/domains/cpp.py')
-rw-r--r--sphinx/domains/cpp.py53
1 files changed, 27 insertions, 26 deletions
diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py
index 1783db491..310691d49 100644
--- a/sphinx/domains/cpp.py
+++ b/sphinx/domains/cpp.py
@@ -31,7 +31,8 @@ from sphinx.transforms import SphinxTransform
from sphinx.transforms.post_transforms import ReferencesResolver
from sphinx.util import logging
from sphinx.util.cfamily import (
- NoOldIdError, ASTBaseBase, ASTAttribute, verify_description_mode, StringifyTransform,
+ NoOldIdError, ASTBaseBase, ASTAttribute, ASTBaseParenExprList,
+ verify_description_mode, StringifyTransform,
BaseParser, DefinitionError, UnsupportedMultiCharacterCharLiteral,
identifier_re, anon_identifier_re, integer_literal_re, octal_literal_re,
hex_literal_re, binary_literal_re, integers_literal_suffix_re,
@@ -2742,7 +2743,7 @@ class ASTPackExpansionExpr(ASTExpression):
signode += nodes.Text('...')
-class ASTParenExprList(ASTBase):
+class ASTParenExprList(ASTBaseParenExprList):
def __init__(self, exprs: List[Union[ASTExpression, ASTBracedInitList]]) -> None:
self.exprs = exprs
@@ -4454,7 +4455,7 @@ class Symbol:
ourChild._fill_empty(otherChild.declaration, otherChild.docname)
elif ourChild.docname != otherChild.docname:
name = str(ourChild.declaration)
- msg = __("Duplicate declaration, also defined in '%s'.\n"
+ msg = __("Duplicate C++ declaration, also defined in '%s'.\n"
"Declaration is '%s'.")
msg = msg % (ourChild.docname, name)
logger.warning(msg, location=otherChild.docname)
@@ -4882,7 +4883,7 @@ class DefinitionParser(BaseParser):
raise self._make_multi_error([
(eFold, "If fold expression"),
(eExpr, "If parenthesized expression")
- ], "Error in fold expression or parenthesized expression.")
+ ], "Error in fold expression or parenthesized expression.") from eExpr
return ASTParenExpr(res)
# now it definitely is a fold expression
if self.skip_string(')'):
@@ -5066,7 +5067,7 @@ class DefinitionParser(BaseParser):
errors = []
errors.append((eType, "If type"))
errors.append((eExpr, "If expression"))
- raise self._make_multi_error(errors, header)
+ raise self._make_multi_error(errors, header) from eExpr
else: # a primary expression or a type
pos = self.pos
try:
@@ -5093,7 +5094,7 @@ class DefinitionParser(BaseParser):
errors = []
errors.append((eOuter, "If primary expression"))
errors.append((eInner, "If type"))
- raise self._make_multi_error(errors, header)
+ raise self._make_multi_error(errors, header) from eInner
# and now parse postfixes
postFixes = [] # type: List[ASTPostfixOp]
@@ -5253,7 +5254,8 @@ class DefinitionParser(BaseParser):
errs = []
errs.append((exCast, "If type cast expression"))
errs.append((exUnary, "If unary expression"))
- raise self._make_multi_error(errs, "Error in cast expression.")
+ raise self._make_multi_error(errs,
+ "Error in cast expression.") from exUnary
else:
return self._parse_unary_expression()
@@ -5504,7 +5506,7 @@ class DefinitionParser(BaseParser):
self.pos = pos
prevErrors.append((e, "If non-type argument"))
header = "Error in parsing template argument list."
- raise self._make_multi_error(prevErrors, header)
+ raise self._make_multi_error(prevErrors, header) from e
if parsedEnd:
assert not parsedComma
break
@@ -5949,7 +5951,7 @@ class DefinitionParser(BaseParser):
self.pos = pos
prevErrors.append((exNoPtrParen, "If parenthesis in noptr-declarator"))
header = "Error in declarator"
- raise self._make_multi_error(prevErrors, header)
+ raise self._make_multi_error(prevErrors, header) from exNoPtrParen
if typed: # pointer to member
pos = self.pos
try:
@@ -5988,7 +5990,7 @@ class DefinitionParser(BaseParser):
self.pos = pos
prevErrors.append((e, "If declarator-id"))
header = "Error in declarator or parameters-and-qualifiers"
- raise self._make_multi_error(prevErrors, header)
+ raise self._make_multi_error(prevErrors, header) from e
def _parse_initializer(self, outer: str = None, allowFallback: bool = True
) -> ASTInitializer:
@@ -6096,7 +6098,7 @@ class DefinitionParser(BaseParser):
header = "Error when parsing function declaration."
else:
assert False
- raise self._make_multi_error(prevErrors, header)
+ raise self._make_multi_error(prevErrors, header) from exTyped
else:
# For testing purposes.
# do it again to get the proper traceback (how do you
@@ -6163,7 +6165,7 @@ class DefinitionParser(BaseParser):
errs.append((eType, "If default template argument is a type"))
msg = "Error in non-type template parameter"
msg += " or constrained template parameter."
- raise self._make_multi_error(errs, msg)
+ raise self._make_multi_error(errs, msg) from eType
def _parse_type_using(self) -> ASTTypeUsing:
name = self._parse_nested_name()
@@ -6510,7 +6512,7 @@ class DefinitionParser(BaseParser):
self.pos = pos
prevErrors.append((e, "If type alias or template alias"))
header = "Error in type declaration."
- raise self._make_multi_error(prevErrors, header)
+ raise self._make_multi_error(prevErrors, header) from e
elif objectType == 'concept':
declaration = self._parse_concept()
elif objectType == 'member':
@@ -6576,7 +6578,7 @@ class DefinitionParser(BaseParser):
errs.append((e1, "If shorthand ref"))
errs.append((e2, "If full function ref"))
msg = "Error in cross-reference."
- raise self._make_multi_error(errs, msg)
+ raise self._make_multi_error(errs, msg) from e2
def parse_expression(self) -> Union[ASTExpression, ASTType]:
pos = self.pos
@@ -6597,7 +6599,7 @@ class DefinitionParser(BaseParser):
errs = []
errs.append((exExpr, "If expression"))
errs.append((exType, "If type"))
- raise self._make_multi_error(errs, header)
+ raise self._make_multi_error(errs, header) from exType
def _make_phony_error_name() -> ASTNestedName:
@@ -6622,8 +6624,9 @@ class CPPObject(ObjectDescription):
names=('returns', 'return')),
]
- option_spec = dict(ObjectDescription.option_spec)
- option_spec['tparam-line-spec'] = directives.flag
+ option_spec = {
+ 'tparam-line-spec': directives.flag,
+ }
def _add_enumerator_to_parent(self, ast: ASTDeclaration) -> None:
assert ast.objectType == 'enumerator'
@@ -6790,7 +6793,7 @@ class CPPObject(ObjectDescription):
name = _make_phony_error_name()
symbol = parentSymbol.add_name(name)
self.env.temp_data['cpp:last_symbol'] = symbol
- raise ValueError
+ raise ValueError from e
try:
symbol = parentSymbol.add_declaration(ast, docname=self.env.docname)
@@ -6806,7 +6809,10 @@ class CPPObject(ObjectDescription):
# Assume we are actually in the old symbol,
# instead of the newly created duplicate.
self.env.temp_data['cpp:last_symbol'] = e.symbol
- logger.warning("Duplicate declaration, %s", sig, location=signode)
+ msg = __("Duplicate C++ declaration, also defined in '%s'.\n"
+ "Declaration is '%s'.")
+ msg = msg % (e.symbol.docname, sig)
+ logger.warning(msg, location=signode)
if ast.objectType == 'enumerator':
self._add_enumerator_to_parent(ast)
@@ -7081,7 +7087,6 @@ class CPPAliasObject(ObjectDescription):
node['domain'] = self.domain
# 'desctype' is a backwards compatible attribute
node['objtype'] = node['desctype'] = self.objtype
- node['noindex'] = True
self.names = [] # type: List[str]
signatures = self.get_signatures()
@@ -7273,13 +7278,9 @@ class CPPDomain(Domain):
ourNames = self.data['names']
for name, docname in otherdata['names'].items():
if docname in docnames:
- if name in ourNames:
- msg = __("Duplicate declaration, also defined in '%s'.\n"
- "Name of declaration is '%s'.")
- msg = msg % (ourNames[name], name)
- logger.warning(msg, location=docname)
- else:
+ if name not in ourNames:
ourNames[name] = docname
+ # no need to warn on duplicates, the symbol merge already does that
if Symbol.debug_show_tree:
print("\tresult:")
print(self.data['root_symbol'].dump(1))