@@ -104,12 +104,35 @@ public function addRule(Rule $ruleToAdd, ?Rule $sibling = null): void
104
104
$ position = \count ($ this ->rules [$ propertyName ]);
105
105
106
106
if ($ sibling !== null ) {
107
+ $ siblingLineNumber = $ sibling ->getLineNumber ();
108
+ $ siblingColumnNumber = $ sibling ->getColumnNumber ();
109
+ $ siblingIsInSet = false ;
107
110
$ siblingPosition = \array_search ($ sibling , $ this ->rules [$ propertyName ], true );
108
111
if ($ siblingPosition !== false ) {
112
+ $ siblingIsInSet = true ;
109
113
$ position = $ siblingPosition ;
114
+ } else {
115
+ foreach ($ this ->rules as $ rulesForAProperty ) {
116
+ if (\in_array ($ sibling , $ rulesForAProperty , true )) {
117
+ $ siblingIsInSet = true ;
118
+ // Maintain ordering within `$this->rules[$propertyName]`
119
+ // by inserting before first `Rule` with a same-or-later position than the sibling.
120
+ foreach ($ this ->rules [$ propertyName ] as $ index => $ rule ) {
121
+ if (
122
+ $ rule ->getLineNumber () > $ siblingLineNumber ||
123
+ $ rule ->getLineNumber () === $ siblingLineNumber &&
124
+ $ rule ->getColumnNumber () >= $ siblingColumnNumber
125
+ ) {
126
+ $ position = $ index ;
127
+ break ;
128
+ }
129
+ }
130
+ break ;
131
+ }
132
+ }
133
+ }
134
+ if ($ siblingIsInSet ) {
110
135
// Increment column number of all existing rules on same line, starting at sibling
111
- $ siblingLineNumber = $ sibling ->getLineNumber ();
112
- $ siblingColumnNumber = $ sibling ->getColumnNumber ();
113
136
foreach ($ this ->rules as $ rulesForAProperty ) {
114
137
foreach ($ rulesForAProperty as $ rule ) {
115
138
if (
@@ -123,6 +146,7 @@ public function addRule(Rule $ruleToAdd, ?Rule $sibling = null): void
123
146
$ ruleToAdd ->setPosition ($ siblingLineNumber , $ siblingColumnNumber );
124
147
}
125
148
}
149
+
126
150
if ($ ruleToAdd ->getLineNumber () === null ) {
127
151
//this node is added manually, give it the next best line
128
152
$ columnNumber = $ ruleToAdd ->getColumnNumber () ?? 0 ;
0 commit comments