Skip to content

Commit 8ded419

Browse files
committed
Fix comments wrong ordering and add better tests for it
1 parent 404df95 commit 8ded419

File tree

5 files changed

+312
-12
lines changed

5 files changed

+312
-12
lines changed

index.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ function getOrderProperty(node, order) {
124124
return orderProperty;
125125
}
126126

127-
function fetchAllCommentsBeforeNode(comments, previousNode, node) {
127+
function fetchAllCommentsBeforeNode(comments, previousNode, node, currentInitialIndex) {
128128
if (!previousNode || previousNode.type !== 'comment') {
129129
return comments;
130130
}
@@ -133,17 +133,19 @@ function fetchAllCommentsBeforeNode(comments, previousNode, node) {
133133
return comments;
134134
}
135135

136+
currentInitialIndex = currentInitialIndex || node.initialIndex;
137+
136138
previousNode.groupIndex = node.groupIndex;
137139
previousNode.propertyIndex = node.propertyIndex;
138-
previousNode.initialIndex = node.initialIndex - 1;
140+
previousNode.initialIndex = currentInitialIndex - 0.0001;
139141

140142
var previousNodeClone = cleanLineBreaks(previousNode);
141143
var newComments = [previousNodeClone].concat(comments);
142144

143-
return fetchAllCommentsBeforeNode(newComments, previousNode.prev(), node);
145+
return fetchAllCommentsBeforeNode(newComments, previousNode.prev(), node, previousNode.initialIndex);
144146
}
145147

146-
function fetchAllCommentsAfterNode(comments, nextNode, node) {
148+
function fetchAllCommentsAfterNode(comments, nextNode, node, currentInitialIndex) {
147149
if (!nextNode || nextNode.type !== 'comment') {
148150
return comments;
149151
}
@@ -152,11 +154,13 @@ function fetchAllCommentsAfterNode(comments, nextNode, node) {
152154
return comments;
153155
}
154156

157+
currentInitialIndex = currentInitialIndex || node.initialIndex;
158+
155159
nextNode.groupIndex = node.groupIndex;
156160
nextNode.propertyIndex = node.propertyIndex;
157-
nextNode.initialIndex = node.initialIndex + 1;
161+
nextNode.initialIndex = currentInitialIndex + 0.0001;
158162

159-
return fetchAllCommentsAfterNode(comments.concat(nextNode), nextNode.next(), node);
163+
return fetchAllCommentsAfterNode(comments.concat(nextNode), nextNode.next(), node, nextNode.initialIndex);
160164
}
161165

162166
module.exports = postcss.plugin('postcss-sorting', function (opts) {
Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,83 @@
1-
div p em {
1+
div {
2+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
3+
// upline comment 1
4+
// upline comment 2
5+
// upline comment 3
6+
// upline comment 4
7+
font-style: italic;
8+
}
9+
div {
10+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
11+
// upline comment 1
12+
// upline comment 2
13+
// upline comment 3
14+
// upline comment 4
15+
font-style: italic;
16+
17+
display: none;
18+
}
19+
div {
20+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
21+
// upline comment 1
22+
// upline comment 2
23+
// upline comment 3
24+
// upline comment 4
25+
font-style: italic;
26+
27+
display: none;
28+
position: absolute;
29+
}
30+
div {
31+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
32+
// upline comment 1
33+
// upline comment 2
34+
// upline comment 3
35+
// upline comment 4
36+
font-style: italic;
37+
38+
display: none;
39+
position: absolute;
40+
top: 0;
41+
}
42+
43+
div {
44+
border-bottom: 1px solid red; // trololo 1
45+
// upline comment 1
46+
// upline comment 2
47+
// upline comment 3
48+
// upline comment 4
49+
font-style: italic;
50+
}
51+
div {
52+
border-bottom: 1px solid red; // trololo 1
53+
// upline comment 1
54+
// upline comment 2
55+
// upline comment 3
56+
// upline comment 4
57+
font-style: italic;
58+
59+
display: none;
60+
}
61+
div {
62+
border-bottom: 1px solid red; // trololo 1
63+
// upline comment 1
64+
// upline comment 2
65+
// upline comment 3
66+
// upline comment 4
67+
font-style: italic;
68+
69+
display: none;
70+
position: absolute;
71+
}
72+
div {
273
border-bottom: 1px solid red; // trololo 1
374
// upline comment 1
475
// upline comment 2
76+
// upline comment 3
77+
// upline comment 4
578
font-style: italic;
79+
80+
display: none;
81+
position: absolute;
82+
top: 0;
683
}
Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,77 @@
1-
div p em {
1+
div {
22
// upline comment 1
33
// upline comment 2
4+
// upline comment 3
5+
// upline comment 4
6+
font-style: italic;
7+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
8+
}
9+
div {
10+
display: none;
11+
// upline comment 1
12+
// upline comment 2
13+
// upline comment 3
14+
// upline comment 4
15+
font-style: italic;
16+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
17+
}
18+
div {
19+
display: none;
20+
position: absolute;
21+
// upline comment 1
22+
// upline comment 2
23+
// upline comment 3
24+
// upline comment 4
25+
font-style: italic;
26+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
27+
}
28+
div {
29+
display: none;
30+
position: absolute;
31+
top: 0;
32+
// upline comment 1
33+
// upline comment 2
34+
// upline comment 3
35+
// upline comment 4
36+
font-style: italic;
37+
border-bottom: 1px solid red; // trololo 1 // trololo 2 // trololo 3 // trololo 4
38+
}
39+
40+
div {
41+
// upline comment 1
42+
// upline comment 2
43+
// upline comment 3
44+
// upline comment 4
445
font-style: italic;
546
border-bottom: 1px solid red; // trololo 1
647
}
48+
div {
49+
display: none;
50+
// upline comment 1
51+
// upline comment 2
52+
// upline comment 3
53+
// upline comment 4
54+
font-style: italic;
55+
border-bottom: 1px solid red; // trololo 1
56+
}
57+
div {
58+
display: none;
59+
position: absolute;
60+
// upline comment 1
61+
// upline comment 2
62+
// upline comment 3
63+
// upline comment 4
64+
font-style: italic;
65+
border-bottom: 1px solid red; // trololo 1
66+
}
67+
div {
68+
display: none;
69+
border-bottom: 1px solid red; // trololo 1
70+
position: absolute;
71+
top: 0;
72+
// upline comment 1
73+
// upline comment 2
74+
// upline comment 3
75+
// upline comment 4
76+
font-style: italic;
77+
}
Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,77 @@
1-
div p em {
1+
div {
22
/* upline comment 1 */
33
/* upline comment 2 */
4+
/* upline comment 3 */
5+
/* upline comment 4 */
6+
font-style: italic;
7+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
8+
}
9+
div {
10+
display: none;
11+
/* upline comment 1 */
12+
/* upline comment 2 */
13+
/* upline comment 3 */
14+
/* upline comment 4 */
15+
font-style: italic;
16+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
17+
}
18+
div {
19+
display: none;
20+
position: absolute;
21+
/* upline comment 1 */
22+
/* upline comment 2 */
23+
/* upline comment 3 */
24+
/* upline comment 4 */
25+
font-style: italic;
26+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
27+
}
28+
div {
29+
display: none;
30+
position: absolute;
31+
top: 0;
32+
/* upline comment 1 */
33+
/* upline comment 2 */
34+
/* upline comment 3 */
35+
/* upline comment 4 */
36+
font-style: italic;
37+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
38+
}
39+
40+
div {
41+
/* upline comment 1 */
42+
/* upline comment 2 */
43+
/* upline comment 3 */
44+
/* upline comment 4 */
45+
font-style: italic;
46+
border-bottom: 1px solid red; /* trololo 1 */
47+
}
48+
div {
49+
display: none;
50+
/* upline comment 1 */
51+
/* upline comment 2 */
52+
/* upline comment 3 */
53+
/* upline comment 4 */
54+
font-style: italic;
55+
border-bottom: 1px solid red; /* trololo 1 */
56+
}
57+
div {
58+
display: none;
59+
position: absolute;
60+
/* upline comment 1 */
61+
/* upline comment 2 */
62+
/* upline comment 3 */
63+
/* upline comment 4 */
64+
font-style: italic;
65+
border-bottom: 1px solid red; /* trololo 1 */
66+
}
67+
div {
68+
display: none;
69+
border-bottom: 1px solid red; /* trololo 1 */
70+
position: absolute;
71+
top: 0;
72+
/* upline comment 1 */
73+
/* upline comment 2 */
74+
/* upline comment 3 */
75+
/* upline comment 4 */
476
font-style: italic;
5-
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */
677
}
Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,83 @@
1-
div p em {
2-
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */
1+
div {
2+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
33
/* upline comment 1 */
44
/* upline comment 2 */
5+
/* upline comment 3 */
6+
/* upline comment 4 */
57
font-style: italic;
68
}
9+
div {
10+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
11+
/* upline comment 1 */
12+
/* upline comment 2 */
13+
/* upline comment 3 */
14+
/* upline comment 4 */
15+
font-style: italic;
16+
17+
display: none;
18+
}
19+
div {
20+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
21+
/* upline comment 1 */
22+
/* upline comment 2 */
23+
/* upline comment 3 */
24+
/* upline comment 4 */
25+
font-style: italic;
26+
27+
display: none;
28+
position: absolute;
29+
}
30+
div {
31+
border-bottom: 1px solid red; /* trololo 1 */ /* trololo 2 */ /* trololo 3 */ /* trololo 4 */
32+
/* upline comment 1 */
33+
/* upline comment 2 */
34+
/* upline comment 3 */
35+
/* upline comment 4 */
36+
font-style: italic;
37+
38+
display: none;
39+
position: absolute;
40+
top: 0;
41+
}
42+
43+
div {
44+
border-bottom: 1px solid red; /* trololo 1 */
45+
/* upline comment 1 */
46+
/* upline comment 2 */
47+
/* upline comment 3 */
48+
/* upline comment 4 */
49+
font-style: italic;
50+
}
51+
div {
52+
border-bottom: 1px solid red; /* trololo 1 */
53+
/* upline comment 1 */
54+
/* upline comment 2 */
55+
/* upline comment 3 */
56+
/* upline comment 4 */
57+
font-style: italic;
58+
59+
display: none;
60+
}
61+
div {
62+
border-bottom: 1px solid red; /* trololo 1 */
63+
/* upline comment 1 */
64+
/* upline comment 2 */
65+
/* upline comment 3 */
66+
/* upline comment 4 */
67+
font-style: italic;
68+
69+
display: none;
70+
position: absolute;
71+
}
72+
div {
73+
border-bottom: 1px solid red; /* trololo 1 */
74+
/* upline comment 1 */
75+
/* upline comment 2 */
76+
/* upline comment 3 */
77+
/* upline comment 4 */
78+
font-style: italic;
79+
80+
display: none;
81+
position: absolute;
82+
top: 0;
83+
}

0 commit comments

Comments
 (0)