diff --git a/CHANGES b/CHANGES index 9e3e29fe0..b394c54e3 100644 --- a/CHANGES +++ b/CHANGES @@ -18,9 +18,12 @@ Deprecated ---------- * pending_xref node for viewcode extension +* ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.anchors_ignore`` +* ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.auth`` * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.broken`` * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.good`` * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.redirected`` +* ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.to_ignore`` * ``sphinx.builders.linkcheck.node_line_or_0()`` * ``sphinx.ext.autodoc.AttributeDocumenter.isinstanceattribute()`` * ``sphinx.ext.autodoc.directive.DocumenterBridge.reporter`` diff --git a/doc/extdev/deprecated.rst b/doc/extdev/deprecated.rst index 1350085ef..dbebb840c 100644 --- a/doc/extdev/deprecated.rst +++ b/doc/extdev/deprecated.rst @@ -27,6 +27,16 @@ The following is a list of deprecated interfaces. - 5.0 - ``sphinx.ext.viewcode.viewcode_anchor`` + * - ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.anchors_ignore`` + - 3.5 + - 5.0 + - N/A + + * - ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.auth`` + - 3.5 + - 5.0 + - N/A + * - ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.broken`` - 3.5 - 5.0 @@ -42,6 +52,11 @@ The following is a list of deprecated interfaces. - 5.0 - N/A + * - ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.to_ignore`` + - 3.5 + - 5.0 + - N/A + * - ``sphinx.builders.linkcheck.node_line_or_0()`` - 3.5 - 5.0 diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py index 659305d32..900346def 100644 --- a/sphinx/builders/linkcheck.py +++ b/sphinx/builders/linkcheck.py @@ -19,7 +19,7 @@ from email.utils import parsedate_to_datetime from html.parser import HTMLParser from os import path from threading import Thread -from typing import Any, Dict, List, NamedTuple, Optional, Set, Tuple, cast +from typing import Any, Dict, List, NamedTuple, Optional, Pattern, Set, Tuple, cast from urllib.parse import unquote, urlparse from docutils import nodes @@ -114,11 +114,6 @@ class CheckExternalLinksBuilder(DummyBuilder): def init(self) -> None: self.hyperlinks = {} # type: Dict[str, Hyperlink] - self.to_ignore = [re.compile(x) for x in self.config.linkcheck_ignore] - self.anchors_ignore = [re.compile(x) - for x in self.config.linkcheck_anchors_ignore] - self.auth = [(re.compile(pattern), auth_info) for pattern, auth_info - in self.config.linkcheck_auth] self._good = set() # type: Set[str] self._broken = {} # type: Dict[str, str] self._redirected = {} # type: Dict[str, Tuple[str, int]] @@ -138,6 +133,34 @@ class CheckExternalLinksBuilder(DummyBuilder): def is_ignored_uri(self, uri: str) -> bool: return any(pat.match(uri) for pat in self.to_ignore) + @property + def anchors_ignore(self) -> List[Pattern]: + warnings.warn( + "%s.%s is deprecated." % (self.__class__.__name__, "anchors_ignore"), + RemovedInSphinx50Warning, + stacklevel=2, + ) + return [re.compile(x) for x in self.config.linkcheck_anchors_ignore] + + @property + def auth(self) -> List[Tuple[Pattern, Any]]: + warnings.warn( + "%s.%s is deprecated." % (self.__class__.__name__, "auth"), + RemovedInSphinx50Warning, + stacklevel=2, + ) + return [(re.compile(pattern), auth_info) for pattern, auth_info + in self.config.linkcheck_auth] + + @property + def to_ignore(self) -> List[Pattern]: + warnings.warn( + "%s.%s is deprecated." % (self.__class__.__name__, "to_ignore"), + RemovedInSphinx50Warning, + stacklevel=2, + ) + return [re.compile(x) for x in self.config.linkcheck_ignore] + @property def good(self) -> Set[str]: warnings.warn( @@ -277,15 +300,18 @@ class HyperlinkAvailabilityCheckWorker(Thread): """A worker class for checking the availability of hyperlinks.""" def __init__(self, builder: CheckExternalLinksBuilder) -> None: - self.anchors_ignore = builder.anchors_ignore - self.auth = builder.auth self.config = builder.config self.env = builder.env self.rate_limits = builder.rate_limits self.rqueue = builder.rqueue - self.to_ignore = builder.to_ignore self.wqueue = builder.wqueue + self.anchors_ignore = [re.compile(x) + for x in self.config.linkcheck_anchors_ignore] + self.auth = [(re.compile(pattern), auth_info) for pattern, auth_info + in self.config.linkcheck_auth] + self.to_ignore = [re.compile(x) for x in self.config.linkcheck_ignore] + self._good = builder._good self._broken = builder._broken self._redirected = builder._redirected