scss-lint 0.25.1 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/default.yml +10 -1
- data/data/property-sort-orders/concentric.txt +99 -0
- data/lib/scss_lint.rb +1 -0
- data/lib/scss_lint/cli.rb +9 -3
- data/lib/scss_lint/exceptions.rb +4 -0
- data/lib/scss_lint/linter.rb +10 -1
- data/lib/scss_lint/linter/capitalization_in_selector.rb +14 -6
- data/lib/scss_lint/linter/compass/property_with_mixin.rb +9 -2
- data/lib/scss_lint/linter/indentation.rb +28 -6
- data/lib/scss_lint/linter/property_sort_order.rb +61 -9
- data/lib/scss_lint/linter/single_line_per_property.rb +53 -0
- data/lib/scss_lint/linter/single_line_per_selector.rb +6 -1
- data/lib/scss_lint/linter/space_after_comma.rb +27 -19
- data/lib/scss_lint/linter/space_before_brace.rb +5 -4
- data/lib/scss_lint/linter/trailing_semicolon.rb +53 -0
- data/lib/scss_lint/linter/unnecessary_parent_reference.rb +36 -0
- data/lib/scss_lint/reporter/default_reporter.rb +7 -2
- data/lib/scss_lint/reporter/xml_reporter.rb +2 -1
- data/lib/scss_lint/runner.rb +7 -3
- data/lib/scss_lint/version.rb +1 -1
- data/spec/scss_lint/cli_spec.rb +314 -0
- data/spec/scss_lint/config_spec.rb +439 -0
- data/spec/scss_lint/engine_spec.rb +24 -0
- data/spec/scss_lint/linter/border_zero_spec.rb +84 -0
- data/spec/scss_lint/linter/capitalization_in_selector_spec.rb +71 -0
- data/spec/scss_lint/linter/color_keyword_spec.rb +83 -0
- data/spec/scss_lint/linter/comment_spec.rb +55 -0
- data/spec/scss_lint/linter/compass/property_with_mixin_spec.rb +55 -0
- data/spec/scss_lint/linter/debug_statement_spec.rb +21 -0
- data/spec/scss_lint/linter/declaration_order_spec.rb +94 -0
- data/spec/scss_lint/linter/duplicate_property_spec.rb +176 -0
- data/spec/scss_lint/linter/else_placement_spec.rb +106 -0
- data/spec/scss_lint/linter/empty_line_between_blocks_spec.rb +263 -0
- data/spec/scss_lint/linter/empty_rule_spec.rb +27 -0
- data/spec/scss_lint/linter/final_newline_spec.rb +49 -0
- data/spec/scss_lint/linter/hex_length_spec.rb +104 -0
- data/spec/scss_lint/linter/hex_notation_spec.rb +104 -0
- data/spec/scss_lint/linter/hex_validation_spec.rb +36 -0
- data/spec/scss_lint/linter/id_with_extraneous_selector_spec.rb +139 -0
- data/spec/scss_lint/linter/indentation_spec.rb +242 -0
- data/spec/scss_lint/linter/leading_zero_spec.rb +233 -0
- data/spec/scss_lint/linter/mergeable_selector_spec.rb +283 -0
- data/spec/scss_lint/linter/name_format_spec.rb +206 -0
- data/spec/scss_lint/linter/placeholder_in_extend_spec.rb +63 -0
- data/spec/scss_lint/linter/property_sort_order_spec.rb +246 -0
- data/spec/scss_lint/linter/property_spelling_spec.rb +57 -0
- data/spec/scss_lint/linter/selector_depth_spec.rb +159 -0
- data/spec/scss_lint/linter/shorthand_spec.rb +172 -0
- data/spec/scss_lint/linter/single_line_per_property_spec.rb +73 -0
- data/spec/scss_lint/linter/single_line_per_selector_spec.rb +121 -0
- data/spec/scss_lint/linter/space_after_comma_spec.rb +315 -0
- data/spec/scss_lint/linter/space_after_property_colon_spec.rb +238 -0
- data/spec/scss_lint/linter/space_after_property_name_spec.rb +23 -0
- data/spec/scss_lint/linter/space_before_brace_spec.rb +447 -0
- data/spec/scss_lint/linter/space_between_parens_spec.rb +263 -0
- data/spec/scss_lint/linter/string_quotes_spec.rb +303 -0
- data/spec/scss_lint/linter/trailing_semicolon_spec.rb +188 -0
- data/spec/scss_lint/linter/unnecessary_mantissa_spec.rb +67 -0
- data/spec/scss_lint/linter/unnecessary_parent_reference_spec.rb +67 -0
- data/spec/scss_lint/linter/url_format_spec.rb +55 -0
- data/spec/scss_lint/linter/url_quotes_spec.rb +63 -0
- data/spec/scss_lint/linter/zero_unit_spec.rb +113 -0
- data/spec/scss_lint/linter_registry_spec.rb +50 -0
- data/spec/scss_lint/location_spec.rb +42 -0
- data/spec/scss_lint/reporter/config_reporter_spec.rb +42 -0
- data/spec/scss_lint/reporter/default_reporter_spec.rb +73 -0
- data/spec/scss_lint/reporter/files_reporter_spec.rb +38 -0
- data/spec/scss_lint/reporter/xml_reporter_spec.rb +103 -0
- data/spec/scss_lint/reporter_spec.rb +11 -0
- data/spec/scss_lint/runner_spec.rb +132 -0
- data/spec/scss_lint/selector_visitor_spec.rb +264 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/isolated_environment.rb +25 -0
- data/spec/support/matchers/report_lint.rb +48 -0
- metadata +126 -8
- data/lib/scss_lint/linter/trailing_semicolon_after_property_value.rb +0 -40
@@ -0,0 +1,242 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::Indentation do
|
4
|
+
context 'when a line at the root level is indented' do
|
5
|
+
let(:css) { <<-CSS }
|
6
|
+
$var: 5px;
|
7
|
+
$other: 10px;
|
8
|
+
CSS
|
9
|
+
|
10
|
+
it { should_not report_lint line: 1 }
|
11
|
+
it { should report_lint line: 2 }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'when a line in a rule set is properly indented' do
|
15
|
+
let(:css) { <<-CSS }
|
16
|
+
p {
|
17
|
+
margin: 0;
|
18
|
+
}
|
19
|
+
CSS
|
20
|
+
|
21
|
+
it { should_not report_lint }
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when lines in a rule set are not properly indented' do
|
25
|
+
let(:css) { <<-CSS }
|
26
|
+
p {
|
27
|
+
margin: 0;
|
28
|
+
padding: 1em;
|
29
|
+
opacity: 0.5;
|
30
|
+
}
|
31
|
+
CSS
|
32
|
+
|
33
|
+
it { should report_lint line: 2 }
|
34
|
+
it { should_not report_lint line: 3 }
|
35
|
+
it { should report_lint line: 4 }
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'when selector of a nested rule set is not properly indented' do
|
39
|
+
let(:css) { <<-CSS }
|
40
|
+
p {
|
41
|
+
em {
|
42
|
+
font-style: italic;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
CSS
|
46
|
+
|
47
|
+
it { should report_lint line: 2 }
|
48
|
+
it { should_not report_lint line: 3 }
|
49
|
+
it { should_not report_lint line: 4 }
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when multi-line selector of a nested rule set is not properly indented' do
|
53
|
+
let(:css) { <<-CSS }
|
54
|
+
p {
|
55
|
+
b,
|
56
|
+
em,
|
57
|
+
i {
|
58
|
+
font-style: italic;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
CSS
|
62
|
+
|
63
|
+
it { should report_lint line: 2 }
|
64
|
+
it { should_not report_lint line: 3 }
|
65
|
+
it { should_not report_lint line: 4 }
|
66
|
+
it { should_not report_lint line: 5 }
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when a property is on the same line as its rule selector' do
|
70
|
+
let(:css) { 'h1 { margin: 5px; }' }
|
71
|
+
it { should_not report_lint }
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when an argument list spans multiple lines' do
|
75
|
+
let(:css) { <<-CSS }
|
76
|
+
@include mixin(one,
|
77
|
+
two,
|
78
|
+
three);
|
79
|
+
CSS
|
80
|
+
|
81
|
+
it { should_not report_lint }
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when an argument list of an improperly indented script spans multiple lines' do
|
85
|
+
let(:css) { <<-CSS }
|
86
|
+
p {
|
87
|
+
@include mixin(one,
|
88
|
+
two,
|
89
|
+
three);
|
90
|
+
}
|
91
|
+
CSS
|
92
|
+
|
93
|
+
it { should report_lint line: 2 }
|
94
|
+
it { should_not report_lint line: 3 }
|
95
|
+
it { should_not report_lint line: 4 }
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'when an if statement is incorrectly indented' do
|
99
|
+
let(:css) { <<-CSS }
|
100
|
+
$condition: true;
|
101
|
+
@if $condition {
|
102
|
+
padding: 0;
|
103
|
+
}
|
104
|
+
CSS
|
105
|
+
|
106
|
+
it { should report_lint line: 2 }
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'when an if statement is accompanied by a correctly indented else statement' do
|
110
|
+
let(:css) { <<-CSS }
|
111
|
+
@if $condition {
|
112
|
+
padding: 0;
|
113
|
+
} @else {
|
114
|
+
margin: 0;
|
115
|
+
}
|
116
|
+
CSS
|
117
|
+
|
118
|
+
it { should_not report_lint }
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'when @at-root directive contains correctly indented children' do
|
122
|
+
let(:css) { <<-CSS }
|
123
|
+
.block {
|
124
|
+
@at-root {
|
125
|
+
.something {}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
CSS
|
129
|
+
|
130
|
+
it { should_not report_lint }
|
131
|
+
end
|
132
|
+
|
133
|
+
context 'when @at-root directive with an inline selector contains correctly indented children' do
|
134
|
+
let(:css) { <<-CSS }
|
135
|
+
.block {
|
136
|
+
@at-root .something {
|
137
|
+
.something-else {}
|
138
|
+
}
|
139
|
+
}
|
140
|
+
CSS
|
141
|
+
|
142
|
+
it { should_not report_lint }
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'when the indentation width has been explicitly set' do
|
146
|
+
let(:linter_config) { { 'width' => 3 } }
|
147
|
+
|
148
|
+
let(:css) { <<-CSS }
|
149
|
+
p {
|
150
|
+
margin: 0;
|
151
|
+
padding: 5px;
|
152
|
+
}
|
153
|
+
CSS
|
154
|
+
|
155
|
+
it { should report_lint line: 2 }
|
156
|
+
it { should_not report_lint line: 3 }
|
157
|
+
end
|
158
|
+
|
159
|
+
context 'when there are selectors across multiple lines' do
|
160
|
+
let(:css) { <<-CSS }
|
161
|
+
.class1,
|
162
|
+
.class2 {
|
163
|
+
margin: 0;
|
164
|
+
padding: 5px;
|
165
|
+
}
|
166
|
+
CSS
|
167
|
+
|
168
|
+
it { should_not report_lint }
|
169
|
+
end
|
170
|
+
|
171
|
+
context 'when there are selectors across multiple lines with a single line block' do
|
172
|
+
let(:css) { <<-CSS }
|
173
|
+
.class1,
|
174
|
+
.class2 { margin: 0; }
|
175
|
+
CSS
|
176
|
+
|
177
|
+
it { should_not report_lint }
|
178
|
+
end
|
179
|
+
|
180
|
+
context 'when a comment node precedes a node' do
|
181
|
+
let(:css) { <<-CSS }
|
182
|
+
// A comment
|
183
|
+
$var: 1;
|
184
|
+
CSS
|
185
|
+
|
186
|
+
it { should_not report_lint }
|
187
|
+
end
|
188
|
+
|
189
|
+
context 'when a line is indented with tabs' do
|
190
|
+
let(:css) { <<-CSS }
|
191
|
+
p {
|
192
|
+
\tmargin: 0;
|
193
|
+
}
|
194
|
+
CSS
|
195
|
+
|
196
|
+
it { should report_lint line: 2 }
|
197
|
+
end
|
198
|
+
|
199
|
+
context 'when a line contains a mix of tabs and spaces' do
|
200
|
+
let(:css) { <<-CSS }
|
201
|
+
p {
|
202
|
+
\tmargin: 0;
|
203
|
+
}
|
204
|
+
CSS
|
205
|
+
|
206
|
+
it { should report_lint line: 2 }
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'when tabs are preferred' do
|
210
|
+
let(:linter_config) { { 'character' => 'tab', 'width' => 1 } }
|
211
|
+
|
212
|
+
context 'and the line is indented correctly' do
|
213
|
+
let(:css) { <<-CSS }
|
214
|
+
p {
|
215
|
+
\tmargin: 0;
|
216
|
+
}
|
217
|
+
CSS
|
218
|
+
|
219
|
+
it { should_not report_lint }
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'and the line is incorrectly indented' do
|
223
|
+
let(:css) { <<-CSS }
|
224
|
+
p {
|
225
|
+
\t\tmargin: 0;
|
226
|
+
}
|
227
|
+
CSS
|
228
|
+
|
229
|
+
it { should report_lint line: 2 }
|
230
|
+
end
|
231
|
+
|
232
|
+
context 'and the line is indented with spaces' do
|
233
|
+
let(:css) { <<-CSS }
|
234
|
+
p {
|
235
|
+
margin: 0;
|
236
|
+
}
|
237
|
+
CSS
|
238
|
+
|
239
|
+
it { should report_lint line: 2 }
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
@@ -0,0 +1,233 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::LeadingZero do
|
4
|
+
context 'when no values exist' do
|
5
|
+
let(:css) { <<-CSS }
|
6
|
+
p {
|
7
|
+
}
|
8
|
+
CSS
|
9
|
+
|
10
|
+
it { should_not report_lint }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when a zero exists' do
|
14
|
+
let(:css) { <<-CSS }
|
15
|
+
p {
|
16
|
+
margin: 0;
|
17
|
+
}
|
18
|
+
CSS
|
19
|
+
|
20
|
+
it { should_not report_lint }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when an integer value exists' do
|
24
|
+
let(:css) { <<-CSS }
|
25
|
+
p {
|
26
|
+
line-height: 2;
|
27
|
+
}
|
28
|
+
CSS
|
29
|
+
|
30
|
+
it { should_not report_lint }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when an integer value with units exists' do
|
34
|
+
let(:css) { <<-CSS }
|
35
|
+
p {
|
36
|
+
margin: 5px;
|
37
|
+
}
|
38
|
+
CSS
|
39
|
+
|
40
|
+
it { should_not report_lint }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when a unitless fractional value with no leading zero exists' do
|
44
|
+
let(:css) { <<-CSS }
|
45
|
+
p {
|
46
|
+
line-height: .5;
|
47
|
+
}
|
48
|
+
CSS
|
49
|
+
|
50
|
+
it { should_not report_lint }
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when a negative unitless fractional value with no leading zero exists' do
|
54
|
+
let(:css) { <<-CSS }
|
55
|
+
p {
|
56
|
+
line-height: -.5;
|
57
|
+
}
|
58
|
+
CSS
|
59
|
+
|
60
|
+
it { should_not report_lint }
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when a fractional value with units and no leading zero exists' do
|
64
|
+
let(:css) { <<-CSS }
|
65
|
+
p {
|
66
|
+
margin: .5em;
|
67
|
+
}
|
68
|
+
CSS
|
69
|
+
|
70
|
+
it { should_not report_lint }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when a negative fractional value with units and no leading zero exists' do
|
74
|
+
let(:css) { <<-CSS }
|
75
|
+
p {
|
76
|
+
margin: -.5em;
|
77
|
+
}
|
78
|
+
CSS
|
79
|
+
|
80
|
+
it { should_not report_lint }
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'when a fractional value with a leading zero exists' do
|
84
|
+
let(:css) { <<-CSS }
|
85
|
+
p {
|
86
|
+
line-height: 0.5;
|
87
|
+
}
|
88
|
+
CSS
|
89
|
+
|
90
|
+
it { should report_lint line: 2 }
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'when a fractional value with units and a leading zero exists' do
|
94
|
+
let(:css) { <<-CSS }
|
95
|
+
p {
|
96
|
+
margin: 0.5em;
|
97
|
+
}
|
98
|
+
CSS
|
99
|
+
|
100
|
+
it { should report_lint line: 2 }
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'when a negative fractional value with units and a leading zero exists' do
|
104
|
+
let(:css) { <<-CSS }
|
105
|
+
p {
|
106
|
+
margin: -0.5em;
|
107
|
+
}
|
108
|
+
CSS
|
109
|
+
|
110
|
+
it { should report_lint line: 2 }
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'when a fractional value with a mantissa ending in zero exists' do
|
114
|
+
let(:css) { <<-CSS }
|
115
|
+
p {
|
116
|
+
line-height: 10.5;
|
117
|
+
}
|
118
|
+
CSS
|
119
|
+
|
120
|
+
it { should_not report_lint }
|
121
|
+
end
|
122
|
+
|
123
|
+
context 'when multiple fractional values with leading zeros exist' do
|
124
|
+
let(:css) { <<-CSS }
|
125
|
+
p {
|
126
|
+
margin: 0.5em 0.5 0.1px 0.9pt;
|
127
|
+
}
|
128
|
+
CSS
|
129
|
+
|
130
|
+
it { should report_lint count: 4, line: 2 }
|
131
|
+
end
|
132
|
+
|
133
|
+
context 'when leading zeros appear in function arguments' do
|
134
|
+
let(:css) { <<-CSS }
|
135
|
+
p {
|
136
|
+
margin: some-function(0.5em, 0.4 0.3 .2);
|
137
|
+
}
|
138
|
+
CSS
|
139
|
+
|
140
|
+
it { should report_lint count: 3, line: 2 }
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'when leading zeros appear in mixin arguments' do
|
144
|
+
let(:css) { <<-CSS }
|
145
|
+
p {
|
146
|
+
@include some-mixin(0.5em, 0.4 0.3 .2);
|
147
|
+
}
|
148
|
+
CSS
|
149
|
+
|
150
|
+
it { should report_lint count: 3, line: 2 }
|
151
|
+
end
|
152
|
+
|
153
|
+
context 'when leading zeros appear in variable declarations' do
|
154
|
+
let(:css) { '$some-var: 0.5em;' }
|
155
|
+
|
156
|
+
it { should report_lint line: 1 }
|
157
|
+
end
|
158
|
+
|
159
|
+
context 'when leading zeros appear in named arguments' do
|
160
|
+
let(:css) { <<-CSS }
|
161
|
+
p {
|
162
|
+
@include line-clamp($line-height: 0.9, $line-count: 2);
|
163
|
+
}
|
164
|
+
CSS
|
165
|
+
|
166
|
+
it { should report_lint line: 2 }
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'when leading zeros appear in parameter defaults' do
|
170
|
+
let(:css) { <<-CSS }
|
171
|
+
@mixin my-mixin($bad-value: 0.5, $good-value: .9, $string-value: "0.9") {
|
172
|
+
margin: $some-value;
|
173
|
+
padding: $some-other-value;
|
174
|
+
}
|
175
|
+
CSS
|
176
|
+
|
177
|
+
it { should report_lint count: 1, line: 1 }
|
178
|
+
end
|
179
|
+
|
180
|
+
context 'when leading zeros are preferred' do
|
181
|
+
let(:linter_config) { { 'style' => 'include_zero' } }
|
182
|
+
|
183
|
+
context 'when a zero exists' do
|
184
|
+
let(:css) { <<-CSS }
|
185
|
+
p {
|
186
|
+
margin: 0;
|
187
|
+
}
|
188
|
+
CSS
|
189
|
+
|
190
|
+
it { should_not report_lint }
|
191
|
+
end
|
192
|
+
|
193
|
+
context 'when a non-zero integer value exists' do
|
194
|
+
let(:css) { <<-CSS }
|
195
|
+
p {
|
196
|
+
line-height: 2;
|
197
|
+
}
|
198
|
+
CSS
|
199
|
+
|
200
|
+
it { should_not report_lint }
|
201
|
+
end
|
202
|
+
|
203
|
+
context 'when a fractional value with no leading zero exists' do
|
204
|
+
let(:css) { <<-CSS }
|
205
|
+
p {
|
206
|
+
padding: .5em;
|
207
|
+
}
|
208
|
+
CSS
|
209
|
+
|
210
|
+
it { should report_lint line: 2 }
|
211
|
+
end
|
212
|
+
|
213
|
+
context 'when a fractional value with leading zero exists' do
|
214
|
+
let(:css) { <<-CSS }
|
215
|
+
p {
|
216
|
+
padding: 0.5em;
|
217
|
+
}
|
218
|
+
CSS
|
219
|
+
|
220
|
+
it { should_not report_lint }
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'when a fractional value with a mantissa ending in zero exists' do
|
224
|
+
let(:css) { <<-CSS }
|
225
|
+
p {
|
226
|
+
padding: 10.5em;
|
227
|
+
}
|
228
|
+
CSS
|
229
|
+
|
230
|
+
it { should_not report_lint }
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|