summaryrefslogtreecommitdiff
path: root/sphinx/domains/c.py
diff options
context:
space:
mode:
authorJakob Lykke Andersen <jakobandersen@users.noreply.github.com>2020-07-02 15:38:45 +0200
committerGitHub <noreply@github.com>2020-07-02 15:38:45 +0200
commit8c82ecbf2c2f7f9d32959f65be17bf2853aab625 (patch)
treed87b354f6ca0ef84df0517a6c3d6282b47a53230 /sphinx/domains/c.py
parent61c9aa584c8d7c4b60f32465dd4e4bff64e1e09c (diff)
parentff5eb7cc2b39653153d6b94c1fcec7845873114b (diff)
downloadsphinx-git-8c82ecbf2c2f7f9d32959f65be17bf2853aab625.tar.gz
Merge pull request #7895 from jakobandersen/c_cpp_noindex
C, C++: remove noindex option
Diffstat (limited to 'sphinx/domains/c.py')
-rw-r--r--sphinx/domains/c.py33
1 files changed, 16 insertions, 17 deletions
diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py
index 210757f8c..8a0b8a105 100644
--- a/sphinx/domains/c.py
+++ b/sphinx/domains/c.py
@@ -1887,7 +1887,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)
@@ -3022,6 +3022,13 @@ class CObject(ObjectDescription):
names=('rtype',)),
]
+ option_spec = {
+ # have a dummy option to ensure proper errors on options,
+ # otherwise the option is taken as a continuation of the
+ # argument
+ 'dummy': None
+ }
+
def _add_enumerator_to_parent(self, ast: ASTDeclaration) -> None:
assert ast.objectType == 'enumerator'
# find the parent, if it exists && is an enum
@@ -3088,7 +3095,8 @@ class CObject(ObjectDescription):
self.state.document.note_explicit_target(signode)
domain = cast(CDomain, self.env.get_domain('c'))
- domain.note_object(name, self.objtype, newestId)
+ if name not in domain.objects:
+ domain.objects[name] = (domain.env.docname, newestId, self.objtype)
indexText = self.get_index_text(name)
self.indexnode['entries'].append(('single', indexText, newestId, '', None))
@@ -3153,7 +3161,10 @@ class CObject(ObjectDescription):
# Assume we are actually in the old symbol,
# instead of the newly created duplicate.
self.env.temp_data['c: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)
@@ -3523,14 +3534,6 @@ class CDomain(Domain):
def objects(self) -> Dict[str, Tuple[str, str, str]]:
return self.data.setdefault('objects', {}) # fullname -> docname, node_id, objtype
- def note_object(self, name: str, objtype: str, node_id: str, location: Any = None) -> None:
- if name in self.objects:
- docname = self.objects[name][0]
- logger.warning(__('Duplicate C object description of %s, '
- 'other instance in %s, use :noindex: for one of them'),
- name, docname, location=location)
- self.objects[name] = (self.env.docname, node_id, objtype)
-
def clear_doc(self, docname: str) -> None:
if Symbol.debug_show_tree:
print("clear_doc:", docname)
@@ -3576,13 +3579,9 @@ class CDomain(Domain):
ourObjects = self.data['objects']
for fullname, (fn, id_, objtype) in otherdata['objects'].items():
if fn in docnames:
- if fullname in ourObjects:
- msg = __("Duplicate declaration, also defined in '%s'.\n"
- "Name of declaration is '%s'.")
- msg = msg % (ourObjects[fullname], fullname)
- logger.warning(msg, location=fn)
- else:
+ if fullname not in ourObjects:
ourObjects[fullname] = (fn, id_, objtype)
+ # no need to warn on duplicates, the symbol merge already does that
def _resolve_xref_inner(self, env: BuildEnvironment, fromdocname: str, builder: Builder,
typ: str, target: str, node: pending_xref,