@@ -26,6 +26,7 @@ function getSortOrder(options) {
26
26
return { } ;
27
27
}
28
28
29
+ // Add sorting indexes to order
29
30
var order = { } ;
30
31
31
32
if ( typeof sortOrder [ 0 ] === 'string' ) {
@@ -49,6 +50,7 @@ function getSortOrder(options) {
49
50
return order ;
50
51
}
51
52
53
+ // Replace multiple line breaks with one
52
54
function cleanLineBreaks ( node ) {
53
55
if ( node . raws . before ) {
54
56
node . raws . before = node . raws . before . replace ( / \r \n \s * \r \n / g, '\r\n' ) . replace ( / \n \s * \n / g, '\n' ) ;
@@ -66,8 +68,10 @@ module.exports = postcss.plugin('postcss-sort', function (opts) {
66
68
var lastPropertyIndex = order [ '...' ] ? order [ '...' ] . prop : Infinity ;
67
69
68
70
css . walk ( function ( rule ) {
71
+ // Process only rules and atrules with nodes
69
72
if ( ( rule . type === 'rule' || rule . type === 'atrule' ) && rule . nodes && rule . nodes . length ) {
70
73
74
+ // Nodes for sorting
71
75
var processed = [ ] ;
72
76
73
77
rule . each ( function ( node , index ) {
@@ -78,20 +82,21 @@ module.exports = postcss.plugin('postcss-sort', function (opts) {
78
82
} else if ( node . type === 'decl' ) {
79
83
sortName = node . prop ;
80
84
81
- // if property start with $ and letters it's a variable
85
+ // If property start with $ and letters it's a variable
82
86
if ( / ^ \$ [ \w - ] + / . test ( node . prop ) ) {
83
87
sortName = '$variable' ;
84
88
}
85
89
} else if ( node . type === 'atrule' ) {
86
90
sortName = '@atrule' ;
87
91
92
+ // If atrule with name is in order use the name
88
93
var atruleName = '@' + node . name ;
89
94
90
95
if ( order [ atruleName ] ) {
91
96
sortName = atruleName ;
92
97
}
93
98
94
- // if atRule has a name like @mixin name or @include name, we can sort by this name too
99
+ // Ff atRule has a parameter like @mixin name or @include name, sort by this parameter
95
100
var atruleParameter = / ^ [ \w - ] + / . exec ( node . params ) ;
96
101
97
102
if ( atruleParameter && atruleParameter . length ) {
@@ -106,14 +111,15 @@ module.exports = postcss.plugin('postcss-sort', function (opts) {
106
111
}
107
112
108
113
// If the declaration's property is in order's list, save its
109
- // group and property indices . Otherwise set them to 10000, so
114
+ // group and property indexes . Otherwise set them to 10000, so
110
115
// declaration appears at the bottom of a sorted list:
111
116
var orderProperty = order [ sortName ] ;
112
117
113
118
node . groupIndex = orderProperty && orderProperty . group > - 1 ? orderProperty . group : lastGroupIndex ;
114
119
node . propertyIndex = orderProperty && orderProperty . prop > - 1 ? orderProperty . prop : lastPropertyIndex ;
115
120
node . initialIndex = index ;
116
121
122
+ // If comment on separate line before node, use node's indexes for comment
117
123
if ( node . prev ( ) && node . prev ( ) . type === 'comment' ) {
118
124
var previousNode = node . prev ( ) ;
119
125
@@ -130,6 +136,7 @@ module.exports = postcss.plugin('postcss-sort', function (opts) {
130
136
131
137
processed . push ( node ) ;
132
138
139
+ // If comment on same line with the node and node, use node's indexes for comment
133
140
if ( node . next ( ) && node . next ( ) . type === 'comment' ) {
134
141
var nextNode = node . next ( ) ;
135
142
@@ -162,6 +169,7 @@ module.exports = postcss.plugin('postcss-sort', function (opts) {
162
169
rule . removeAll ( ) ;
163
170
rule . append ( processed ) ;
164
171
172
+ // Remove all empty lines and add empty lines between groups
165
173
rule . each ( function ( node ) {
166
174
node = cleanLineBreaks ( node ) ;
167
175
0 commit comments