diff --git a/src/mwparserfromhell/wikicode.py b/src/mwparserfromhell/wikicode.py index 7739562..b6c379f 100644 --- a/src/mwparserfromhell/wikicode.py +++ b/src/mwparserfromhell/wikicode.py @@ -160,6 +160,12 @@ class Wikicode(StringMixIn): else: inodes = enumerate(self.nodes) for i, node in inodes: + if ( + forcetype is Wikilink + and isinstance(node, Wikilink) + and not str(node.title) + ): + continue if (forcetype is None or isinstance(node, forcetype)) and match( cast(N, node) ): @@ -761,12 +767,8 @@ class Wikicode(StringMixIn): This is equivalent to :meth:`ifilter` with *forcetype* set to :class:`~wikilink.Wikilink`. """ - return ( - node - for node in self.ifilter( - recursive=recursive, matches=matches, flags=flags, forcetype=Wikilink - ) - if str(node.title) + return self.ifilter( + recursive=recursive, matches=matches, flags=flags, forcetype=Wikilink ) @overload @@ -938,8 +940,8 @@ class Wikicode(StringMixIn): This is equivalent to :meth:`filter` with *forcetype* set to :class:`~wikilink.Wikilink`. """ - return list( - self.ifilter_wikilinks(recursive=recursive, matches=matches, flags=flags) + return self.filter( + recursive=recursive, matches=matches, flags=flags, forcetype=Wikilink ) def get_sections( diff --git a/tests/test_parser.py b/tests/test_parser.py index c2939b3..2c921f4 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -123,5 +123,8 @@ def test_empty_title_wikilink_filter_wikilinks(text): """ parsed = parser.Parser().parse(text) assert parsed.filter_wikilinks() == [] + assert parsed.filter(forcetype=Wikilink) == [] + assert list(parsed.ifilter(forcetype=Wikilink)) == [] assert isinstance(parsed.get(0), Wikilink) + assert parsed.get(0) in parsed.filter() assert str(parsed) == text