From 648d8c605b21c54fbcd395354181ed1b044cc664 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sat, 16 Mar 2024 16:42:54 +0100 Subject: [PATCH] Update coding style for upcoming PHP-CS-Fixer changes Once we bump minimum PHP version, we will get newer PHP-CS-Fixer, which will try to apply this cleanups. Also manually tweak anonymous functions so that they are cleanly formatted once we switch to `fn` syntax. --- .php-cs-fixer.php | 4 +++ src/Readability.php | 61 ++++++++++++++++++++++++--------------- tests/ReadabilityTest.php | 2 +- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index 19cd18d..5f09a0c 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -26,6 +26,10 @@ return (new PhpCsFixer\Config()) 'strict_comparison' => true, 'strict_param' => true, 'concat_space' => ['spacing' => 'one'], + // Pulled in by @Symfony:risky but we still support PHP 7.4 + 'modernize_strpos' => false, + // Pulled in by @Symfony, we cannot add property types until we bump PHP to ≥ 7.4 + 'no_null_property_initialization' => false, ]) ->setFinder($finder) ; diff --git a/src/Readability.php b/src/Readability.php index f41d6c0..7de921e 100644 --- a/src/Readability.php +++ b/src/Readability.php @@ -142,7 +142,7 @@ class Readability implements LoggerAwareInterface * @param string $parser Which parser to use for turning raw HTML into a DOMDocument * @param bool $useTidy Use tidy */ - public function __construct(string $html, string $url = null, string $parser = 'libxml', bool $useTidy = true) + public function __construct(string $html, ?string $url = null, string $parser = 'libxml', bool $useTidy = true) { $this->url = $url; $this->html = $html; @@ -739,7 +739,7 @@ class Readability implements LoggerAwareInterface */ public function addFlag(int $flag): void { - $this->flags = $this->flags | $flag; + $this->flags |= $flag; } /** @@ -747,7 +747,7 @@ class Readability implements LoggerAwareInterface */ public function removeFlag(int $flag): void { - $this->flags = $this->flags & ~$flag; + $this->flags &= ~$flag; } /** @@ -893,11 +893,9 @@ class Readability implements LoggerAwareInterface * Using a variety of metrics (content score, classname, element types), find the content that is * most likely to be the stuff a user wants to read. Then return it wrapped up in a div. * - * @param \DOMElement $page - * * @return \DOMElement|false */ - protected function grabArticle(\DOMElement $page = null) + protected function grabArticle(?\DOMElement $page = null) { if (!$page) { $page = $this->dom; @@ -933,9 +931,9 @@ class Readability implements LoggerAwareInterface // Remove unlikely candidates $unlikelyMatchString = $node->getAttribute('class') . ' ' . $node->getAttribute('id') . ' ' . $node->getAttribute('style'); - if (mb_strlen($unlikelyMatchString) > 3 && // don't process "empty" strings - preg_match($this->regexps['unlikelyCandidates'], $unlikelyMatchString) && - !preg_match($this->regexps['okMaybeItsACandidate'], $unlikelyMatchString) + if (mb_strlen($unlikelyMatchString) > 3 // don't process "empty" strings + && preg_match($this->regexps['unlikelyCandidates'], $unlikelyMatchString) + && !preg_match($this->regexps['okMaybeItsACandidate'], $unlikelyMatchString) ) { $this->logger->debug('Removing unlikely candidate (using conf) ' . $node->getNodePath() . ' by "' . $unlikelyMatchString . '"'); $node->parentNode->removeChild($node); @@ -1120,9 +1118,13 @@ class Readability implements LoggerAwareInterface } } - $topCandidates = array_filter($topCandidates, function ($v, $idx) { - return 0 === $idx || null !== $v; - }, \ARRAY_FILTER_USE_BOTH); + $topCandidates = array_filter( + $topCandidates, + function ($v, $idx) { + return 0 === $idx || null !== $v; + }, + \ARRAY_FILTER_USE_BOTH + ); $topCandidate = $topCandidates[0]; /* @@ -1442,7 +1444,7 @@ class Readability implements LoggerAwareInterface libxml_use_internal_errors(false); } - $this->dom->registerNodeClass(\DOMElement::class, \Readability\JSLikeHTMLElement::class); + $this->dom->registerNodeClass(\DOMElement::class, JSLikeHTMLElement::class); } private function getAncestors(\DOMElement $node, int $maxDepth = 0): array @@ -1464,9 +1466,19 @@ class Readability implements LoggerAwareInterface { return \XML_TEXT_NODE === $node->nodeType || \in_array(strtoupper($node->nodeName), $this->phrasingElements, true) - || (\in_array(strtoupper($node->nodeName), ['A', 'DEL', 'INS'], true) && !\in_array(false, array_map(function ($c) { - return $this->isPhrasingContent($c); - }, iterator_to_array($node->childNodes)), true)); + || ( + \in_array(strtoupper($node->nodeName), ['A', 'DEL', 'INS'], true) + && !\in_array( + false, + array_map( + function ($c) { + return $this->isPhrasingContent($c); + }, + iterator_to_array($node->childNodes) + ), + true + ) + ); } private function hasSingleTagInsideElement(\DOMElement $node, string $tag): bool @@ -1475,10 +1487,12 @@ class Readability implements LoggerAwareInterface return false; } - $a = array_filter(iterator_to_array($node->childNodes), function ($childNode) { - return $childNode instanceof \DOMText && - preg_match($this->regexps['hasContent'], $this->getInnerText($childNode)); - }); + $a = array_filter( + iterator_to_array($node->childNodes), + function ($childNode) { + return $childNode instanceof \DOMText && preg_match($this->regexps['hasContent'], $this->getInnerText($childNode)); + } + ); return 0 === \count($a); } @@ -1491,9 +1505,10 @@ class Readability implements LoggerAwareInterface */ private function isNodeVisible(\DOMElement $node): bool { - return !($node->hasAttribute('style') - && preg_match($this->regexps['isNotVisible'], $node->getAttribute('style')) + return !( + $node->hasAttribute('style') + && preg_match($this->regexps['isNotVisible'], $node->getAttribute('style')) ) - && !$node->hasAttribute('hidden'); + && !$node->hasAttribute('hidden'); } } diff --git a/tests/ReadabilityTest.php b/tests/ReadabilityTest.php index 1c3d5c2..3fb9dc0 100644 --- a/tests/ReadabilityTest.php +++ b/tests/ReadabilityTest.php @@ -550,7 +550,7 @@ class ReadabilityTest extends \PHPUnit\Framework\TestCase } } - private function getReadability(string $html, string $url = null, string $parser = 'libxml', bool $useTidy = true): Readability + private function getReadability(string $html, ?string $url = null, string $parser = 'libxml', bool $useTidy = true): Readability { $readability = new Readability($html, $url, $parser, $useTidy);