From f1fb1b6d2c2d73ed2a69b98de917af8fa2acc3e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <1289205+lahwaacz@users.noreply.github.com> Date: Sun, 11 May 2025 15:46:52 +0200 Subject: [PATCH] Add type hints: mwparserfromhell.nodes.external_link --- src/mwparserfromhell/nodes/external_link.py | 54 +++++++++++++++++++---------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/src/mwparserfromhell/nodes/external_link.py b/src/mwparserfromhell/nodes/external_link.py index 85f1fae..70a23dd 100644 --- a/src/mwparserfromhell/nodes/external_link.py +++ b/src/mwparserfromhell/nodes/external_link.py @@ -19,23 +19,34 @@ # SOFTWARE. +from typing import TYPE_CHECKING, Any, Optional, Generator, Callable + from ._base import Node from ..utils import parse_anything +if TYPE_CHECKING: + from ..wikicode import Wikicode + __all__ = ["ExternalLink"] class ExternalLink(Node): """Represents an external link, like ``[http://example.com/ Example]``.""" - def __init__(self, url, title=None, brackets=True, suppress_space=False): + def __init__( + self, + url: Any, + title: Any = None, + brackets: bool = True, + suppress_space: bool = False, + ): super().__init__() self.url = url self.title = title self.brackets = brackets self.suppress_space = suppress_space - def __str__(self): + def __str__(self) -> str: if self.brackets: if self.title is not None: if self.suppress_space is True: @@ -44,19 +55,24 @@ class ExternalLink(Node): return "[" + str(self.url) + "]" return str(self.url) - def __children__(self): + def __children__(self) -> Generator["Wikicode"]: yield self.url if self.title is not None: yield self.title - def __strip__(self, **kwargs): + def __strip__(self, **kwargs: Any) -> Optional[str]: if self.brackets: if self.title: return self.title.strip_code(**kwargs) return None return self.url.strip_code(**kwargs) - def __showtree__(self, write, get, mark): + def __showtree__( + self, + write: Callable[[str], None], + get: Callable[["Wikicode"], None], + mark: Callable[[], None], + ) -> None: if self.brackets: write("[") get(self.url) @@ -66,31 +82,31 @@ class ExternalLink(Node): write("]") @property - def url(self): + def url(self) -> "Wikicode": """The URL of the link target, as a :class:`.Wikicode` object.""" return self._url - @property - def title(self): - """The link title (if given), as a :class:`.Wikicode` object.""" - return self._title - - @property - def brackets(self): - """Whether to enclose the URL in brackets or display it straight.""" - return self._brackets - @url.setter - def url(self, value): + def url(self, value: Any) -> None: # pylint: disable=import-outside-toplevel from ..parser import contexts self._url = parse_anything(value, contexts.EXT_LINK_URI) + @property + def title(self) -> Optional["Wikicode"]: + """The link title (if given), as a :class:`.Wikicode` object.""" + return self._title + @title.setter - def title(self, value): + def title(self, value: Any) -> None: self._title = None if value is None else parse_anything(value) + @property + def brackets(self) -> bool: + """Whether to enclose the URL in brackets or display it straight.""" + return self._brackets + @brackets.setter - def brackets(self, value): + def brackets(self, value: bool) -> None: self._brackets = bool(value)