From 1989727f6d3e057785a967447eb81adbde7472e3 Mon Sep 17 00:00:00 2001 From: Jake Hotson Date: Wed, 28 May 2025 18:38:17 +0100 Subject: [PATCH] [BUGFIX] Set line number for `AddRule()` with only column number Continue to preserve the column number. Also tighten the test to confirm the `Rule` is added at the end. Note that the reason for `markTestSkipped()` was incorrect - the line number was not being set at all. Part of #974. --- CHANGELOG.md | 2 ++ src/RuleSet/RuleSet.php | 7 ++++--- tests/Unit/RuleSet/RuleSetTest.php | 7 +++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71fdf758..005255af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -105,6 +105,8 @@ Please also have a look at our ### Fixed +- Set line number when `RuleSet::addRule()` called with only column number set + (#1265) - Ensure first rule added with `RuleSet::addRule()` has valid position (#1262) - Don't render `rgb` colors with percentage values using hex notation (#803) diff --git a/src/RuleSet/RuleSet.php b/src/RuleSet/RuleSet.php index beb3deff..d211277e 100644 --- a/src/RuleSet/RuleSet.php +++ b/src/RuleSet/RuleSet.php @@ -110,15 +110,16 @@ public function addRule(Rule $ruleToAdd, ?Rule $sibling = null): void $ruleToAdd->setPosition($sibling->getLineNo(), $sibling->getColNo() - 1); } } - if ($ruleToAdd->getLineNo() === 0 && $ruleToAdd->getColNo() === 0) { + if ($ruleToAdd->getLineNumber() === null) { //this node is added manually, give it the next best line + $columnNumber = $ruleToAdd->getColumnNumber() ?? 0; $rules = $this->getRules(); $rulesCount = \count($rules); if ($rulesCount > 0) { $last = $rules[$rulesCount - 1]; - $ruleToAdd->setPosition($last->getLineNo() + 1, 0); + $ruleToAdd->setPosition($last->getLineNo() + 1, $columnNumber); } else { - $ruleToAdd->setPosition(1, 0); + $ruleToAdd->setPosition(1, $columnNumber); } } elseif ($ruleToAdd->getColumnNumber() === null) { $ruleToAdd->setPosition($ruleToAdd->getLineNumber(), 0); diff --git a/tests/Unit/RuleSet/RuleSetTest.php b/tests/Unit/RuleSet/RuleSetTest.php index 9e7c8381..384fc59f 100644 --- a/tests/Unit/RuleSet/RuleSetTest.php +++ b/tests/Unit/RuleSet/RuleSetTest.php @@ -138,19 +138,18 @@ public function addRuleWithOnlyLineNumberAddsRuleAndSetsColumnNumberPreservingLi * * @param list $initialPropertyNames */ - public function addRuleWithOnlyColumnNumberAddsRuleAndSetsLineNumberPreservingColumnNumber( + public function addRuleWithOnlyColumnNumberAddsRuleAfterInitialRulesAndSetsLineNumberPreservingColumnNumber( array $initialPropertyNames, string $propertyNameToAdd ): void { - self::markTestSkipped('currently broken - does not preserve column number'); - $ruleToAdd = new Rule($propertyNameToAdd); $ruleToAdd->setPosition(null, 42); $this->setRulesFromPropertyNames($initialPropertyNames); $this->subject->addRule($ruleToAdd); - self::assertContains($ruleToAdd, $this->subject->getRules()); + $rules = $this->subject->getRules(); + self::assertSame($ruleToAdd, \end($rules)); self::assertIsInt($ruleToAdd->getLineNumber(), 'line number not set'); self::assertGreaterThanOrEqual(1, $ruleToAdd->getLineNumber(), 'line number not valid'); self::assertSame(42, $ruleToAdd->getColumnNumber(), 'column number not preserved');