From af694d5ae98ba209a382ab2cab782be74a0b352c Mon Sep 17 00:00:00 2001 From: Adam Turner <9087854+aa-turner@users.noreply.github.com> Date: Sat, 19 Oct 2024 21:25:06 +0100 Subject: [PATCH] Improve the performance of ``StandardDomain.clear_doc()`` --- sphinx/domains/std/__init__.py | 35 ++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/sphinx/domains/std/__init__.py b/sphinx/domains/std/__init__.py index 1953f7c3a..470a1c054 100644 --- a/sphinx/domains/std/__init__.py +++ b/sphinx/domains/std/__init__.py @@ -749,22 +749,25 @@ class StandardDomain(Domain): return self.data.setdefault('anonlabels', {}) # labelname -> docname, labelid def clear_doc(self, docname: str) -> None: - key: Any = None - for key, (fn, _l) in list(self.progoptions.items()): - if fn == docname: - del self.progoptions[key] - for key, (fn, _l) in list(self.objects.items()): - if fn == docname: - del self.objects[key] - for key, (fn, _l) in list(self._terms.items()): - if fn == docname: - del self._terms[key] - for key, (fn, _l, _l) in list(self.labels.items()): - if fn == docname: - del self.labels[key] - for key, (fn, _l) in list(self.anonlabels.items()): - if fn == docname: - del self.anonlabels[key] + to_remove1 = [key for key, (fn, _l) in self.progoptions.items() if fn == docname] + for key1 in to_remove1: + del self.progoptions[key1] + + to_remove2 = [key for key, (fn, _l) in self.objects.items() if fn == docname] + for key2 in to_remove2: + del self.objects[key2] + + to_remove3 = [key for key, (fn, _l) in self._terms.items() if fn == docname] + for key3 in to_remove3: + del self._terms[key3] + + to_remove3 = [key for key, (fn, _l, _l) in self.labels.items() if fn == docname] + for key3 in to_remove3: + del self.labels[key3] + + to_remove3 = [key for key, (fn, _l) in self.anonlabels.items() if fn == docname] + for key3 in to_remove3: + del self.anonlabels[key3] def merge_domaindata(self, docnames: Set[str], otherdata: dict[str, Any]) -> None: # XXX duplicates?