summaryrefslogtreecommitdiff
path: root/sphinx/ext/viewcode.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/ext/viewcode.py')
-rw-r--r--sphinx/ext/viewcode.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py
index 6bedf2e1c..f2a42f33f 100644
--- a/sphinx/ext/viewcode.py
+++ b/sphinx/ext/viewcode.py
@@ -111,7 +111,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
for objnode in doctree.traverse(addnodes.desc):
if objnode.get('domain') != 'py':
continue
- names = set() # type: Set[str]
+ names: Set[str] = set()
for signode in objnode:
if not isinstance(signode, addnodes.desc_signature):
continue
@@ -146,7 +146,14 @@ def env_merge_info(app: Sphinx, env: BuildEnvironment, docnames: Iterable[str],
if not hasattr(env, '_viewcode_modules'):
env._viewcode_modules = {} # type: ignore
# now merge in the information from the subprocess
- env._viewcode_modules.update(other._viewcode_modules) # type: ignore
+ for modname, entry in other._viewcode_modules.items(): # type: ignore
+ if modname not in env._viewcode_modules: # type: ignore
+ env._viewcode_modules[modname] = entry # type: ignore
+ else:
+ used = env._viewcode_modules[modname][2] # type: ignore
+ for fullname, docname in entry[2].items():
+ if fullname not in used:
+ used[fullname] = docname
def env_purge_doc(app: Sphinx, env: BuildEnvironment, docname: str) -> None: