From 62b7ace0a4b3abddc5999bdde1e38892bea541c1 Mon Sep 17 00:00:00 2001 From: Jake Hotson Date: Mon, 23 Jun 2025 01:28:13 +0100 Subject: [PATCH 1/2] [TASK] Update `RuleSet::comparePositionable` to use new methods `getLineNo` and `getColNo` are deprecated. When the titled method was extracted, use of the above-mentioned methods was retained to ease backporting and transition to their replacement counterparts: `getLineNumber` and `getColumnNumber`, which differ by returning `null` in the case of 'not set'. This replaces all instances of calls to `getColNo`. Part of #974 --- src/RuleSet/RuleSet.php | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/RuleSet/RuleSet.php b/src/RuleSet/RuleSet.php index 8e0e8ae5f..a766b384e 100644 --- a/src/RuleSet/RuleSet.php +++ b/src/RuleSet/RuleSet.php @@ -314,13 +314,33 @@ protected function renderRules(OutputFormat $outputFormat): string /** * @return int negative if `$first` is before `$second`; zero if they have the same position; positive otherwise + * + * @throws \UnexpectedValueException if either argument does not have a valid position, which should never happen */ private static function comparePositionable(Positionable $first, Positionable $second): int { - if ($first->getLineNo() === $second->getLineNo()) { - return $first->getColNo() - $second->getColNo(); + $firstsLineNumber = $first->getLineNumber(); + $secondsLineNumber = $second->getLineNumber(); + if (!isset($firstsLineNumber, $secondsLineNumber)) { + throw new \UnexpectedValueException( + 'A Rule without a line number was passed to comparePositionable', + 1750637683 + ); } - return $first->getLineNo() - $second->getLineNo(); + + if ($firstsLineNumber === $secondsLineNumber) { + $firstsColumnNumber = $first->getColumnNumber(); + $secondsColumnNumber = $second->getColumnNumber(); + if (!isset($firstsColumnNumber, $secondsColumnNumber)) { + throw new \UnexpectedValueException( + 'A Rule without a column number was passed to comparePositionable', + 1750637761 + ); + } + return $firstsColumnNumber - $secondsColumnNumber; + } + + return $firstsLineNumber - $secondsLineNumber; } private function hasRule(Rule $rule): bool From d29896264a5e92e0eba8fd22c111bee7513a4992 Mon Sep 17 00:00:00 2001 From: Jake Hotson Date: Mon, 23 Jun 2025 23:19:58 +0100 Subject: [PATCH 2/2] Use `is_int` rather than `isset` for greater strictness --- src/RuleSet/RuleSet.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/RuleSet/RuleSet.php b/src/RuleSet/RuleSet.php index a766b384e..b1944e682 100644 --- a/src/RuleSet/RuleSet.php +++ b/src/RuleSet/RuleSet.php @@ -321,7 +321,7 @@ private static function comparePositionable(Positionable $first, Positionable $s { $firstsLineNumber = $first->getLineNumber(); $secondsLineNumber = $second->getLineNumber(); - if (!isset($firstsLineNumber, $secondsLineNumber)) { + if (!\is_int($firstsLineNumber) || !\is_int($secondsLineNumber)) { throw new \UnexpectedValueException( 'A Rule without a line number was passed to comparePositionable', 1750637683 @@ -331,7 +331,7 @@ private static function comparePositionable(Positionable $first, Positionable $s if ($firstsLineNumber === $secondsLineNumber) { $firstsColumnNumber = $first->getColumnNumber(); $secondsColumnNumber = $second->getColumnNumber(); - if (!isset($firstsColumnNumber, $secondsColumnNumber)) { + if (!\is_int($firstsColumnNumber) || !\is_int($secondsColumnNumber)) { throw new \UnexpectedValueException( 'A Rule without a column number was passed to comparePositionable', 1750637761