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,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::EmptyRule do
|
4
|
+
context 'when rule is empty' do
|
5
|
+
let(:css) { <<-CSS }
|
6
|
+
p {
|
7
|
+
}
|
8
|
+
CSS
|
9
|
+
|
10
|
+
it { should report_lint line: 1 }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when rule contains an empty nested rule' do
|
14
|
+
let(:css) { <<-CSS }
|
15
|
+
p {
|
16
|
+
background: #000;
|
17
|
+
display: none;
|
18
|
+
margin: 5px;
|
19
|
+
padding: 10px;
|
20
|
+
a {
|
21
|
+
}
|
22
|
+
}
|
23
|
+
CSS
|
24
|
+
|
25
|
+
it { should report_lint line: 6 }
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::FinalNewline do
|
4
|
+
let(:linter_config) { { 'present' => present } }
|
5
|
+
|
6
|
+
context 'when trailing newline is preferred' do
|
7
|
+
let(:present) { true }
|
8
|
+
|
9
|
+
context 'when the file is empty' do
|
10
|
+
let(:css) { '' }
|
11
|
+
|
12
|
+
it { should_not report_lint }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when the file ends with a newline' do
|
16
|
+
let(:css) { "p {}\n" }
|
17
|
+
|
18
|
+
it { should_not report_lint }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when the file does not end with a newline' do
|
22
|
+
let(:css) { 'p {}' }
|
23
|
+
|
24
|
+
it { should report_lint }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when no trailing newline is preferred' do
|
29
|
+
let(:present) { false }
|
30
|
+
|
31
|
+
context 'when the file is empty' do
|
32
|
+
let(:css) { '' }
|
33
|
+
|
34
|
+
it { should_not report_lint }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when the file ends with a newline' do
|
38
|
+
let(:css) { "p {}\n" }
|
39
|
+
|
40
|
+
it { should report_lint }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when the file does not end with a newline' do
|
44
|
+
let(:css) { 'p {}' }
|
45
|
+
|
46
|
+
it { should_not report_lint }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::HexLength do
|
4
|
+
let(:linter_config) { { 'style' => style } }
|
5
|
+
let(:style) { 'short' }
|
6
|
+
|
7
|
+
context 'when rule is empty' do
|
8
|
+
let(:css) { <<-CSS }
|
9
|
+
p {
|
10
|
+
}
|
11
|
+
CSS
|
12
|
+
|
13
|
+
it { should_not report_lint }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when rule contains properties with valid hex code' do
|
17
|
+
let(:css) { <<-CSS }
|
18
|
+
p {
|
19
|
+
color: #1234ab;
|
20
|
+
}
|
21
|
+
CSS
|
22
|
+
|
23
|
+
it { should_not report_lint }
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when ID selector starts with a hex code' do
|
27
|
+
let(:css) { <<-CSS }
|
28
|
+
#aabbcc {
|
29
|
+
}
|
30
|
+
CSS
|
31
|
+
|
32
|
+
it { should_not report_lint }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when color is specified as a color keyword' do
|
36
|
+
let(:css) { <<-CSS }
|
37
|
+
p {
|
38
|
+
@include box-shadow(0 0 1px 1px gold);
|
39
|
+
}
|
40
|
+
CSS
|
41
|
+
|
42
|
+
it { should_not report_lint }
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when short style is preferred' do
|
46
|
+
let(:style) { 'short' }
|
47
|
+
|
48
|
+
context 'with short hex code' do
|
49
|
+
let(:css) { <<-CSS }
|
50
|
+
p {
|
51
|
+
background: #ccc;
|
52
|
+
background: #CCC;
|
53
|
+
@include crazy-color(#fff);
|
54
|
+
}
|
55
|
+
CSS
|
56
|
+
|
57
|
+
it { should_not report_lint }
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'with long hex code that could be condensed to 3 digits' do
|
61
|
+
let(:css) { <<-CSS }
|
62
|
+
p {
|
63
|
+
background: #cccccc;
|
64
|
+
background: #CCCCCC;
|
65
|
+
@include crazy-color(#ffffff);
|
66
|
+
}
|
67
|
+
CSS
|
68
|
+
|
69
|
+
it { should report_lint line: 2 }
|
70
|
+
it { should report_lint line: 3 }
|
71
|
+
it { should report_lint line: 4 }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'when long style is preferred' do
|
76
|
+
let(:style) { 'long' }
|
77
|
+
|
78
|
+
context 'with long hex code that could be condensed to 3 digits' do
|
79
|
+
let(:css) { <<-CSS }
|
80
|
+
p {
|
81
|
+
background: #cccccc;
|
82
|
+
background: #CCCCCC;
|
83
|
+
@include crazy-color(#ffffff);
|
84
|
+
}
|
85
|
+
CSS
|
86
|
+
|
87
|
+
it { should_not report_lint }
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'with short hex code' do
|
91
|
+
let(:css) { <<-CSS }
|
92
|
+
p {
|
93
|
+
background: #ccc;
|
94
|
+
background: #CCC;
|
95
|
+
@include crazy-color(#fff);
|
96
|
+
}
|
97
|
+
CSS
|
98
|
+
|
99
|
+
it { should report_lint line: 2 }
|
100
|
+
it { should report_lint line: 3 }
|
101
|
+
it { should report_lint line: 4 }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::HexNotation do
|
4
|
+
let(:linter_config) { { 'style' => style } }
|
5
|
+
let(:style) { nil }
|
6
|
+
|
7
|
+
context 'when rule is empty' do
|
8
|
+
let(:css) { <<-CSS }
|
9
|
+
p {
|
10
|
+
}
|
11
|
+
CSS
|
12
|
+
|
13
|
+
it { should_not report_lint }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when rule contains color keyword' do
|
17
|
+
let(:css) { <<-CSS }
|
18
|
+
p {
|
19
|
+
border-color: red;
|
20
|
+
}
|
21
|
+
CSS
|
22
|
+
|
23
|
+
it { should_not report_lint }
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'lowercase style' do
|
27
|
+
let(:style) { 'lowercase' }
|
28
|
+
|
29
|
+
context 'when rule contains properties with lowercase hex code' do
|
30
|
+
let(:css) { <<-CSS }
|
31
|
+
p {
|
32
|
+
background: #ccc;
|
33
|
+
color: #cccccc;
|
34
|
+
@include crazy-color(#fff);
|
35
|
+
}
|
36
|
+
CSS
|
37
|
+
|
38
|
+
it { should_not report_lint }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'with uppercase hex codes' do
|
42
|
+
let(:css) { <<-CSS }
|
43
|
+
p {
|
44
|
+
background: #CCC;
|
45
|
+
color: #CCCCCC;
|
46
|
+
@include crazy-color(#FFF);
|
47
|
+
}
|
48
|
+
CSS
|
49
|
+
|
50
|
+
it { should report_lint line: 2 }
|
51
|
+
it { should report_lint line: 3 }
|
52
|
+
it { should report_lint line: 4 }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'uppercase style' do
|
57
|
+
let(:style) { 'uppercase' }
|
58
|
+
|
59
|
+
context 'with uppercase hex codes' do
|
60
|
+
let(:css) { <<-CSS }
|
61
|
+
p {
|
62
|
+
background: #CCC;
|
63
|
+
color: #CCCCCC;
|
64
|
+
@include crazy-color(#FFF);
|
65
|
+
}
|
66
|
+
CSS
|
67
|
+
|
68
|
+
it { should_not report_lint }
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when rule contains properties with lowercase hex code' do
|
72
|
+
let(:css) { <<-CSS }
|
73
|
+
p {
|
74
|
+
background: #ccc;
|
75
|
+
color: #cccccc;
|
76
|
+
@include crazy-color(#fff);
|
77
|
+
}
|
78
|
+
CSS
|
79
|
+
|
80
|
+
it { should report_lint line: 2 }
|
81
|
+
it { should report_lint line: 3 }
|
82
|
+
it { should report_lint line: 4 }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when ID selector starts with a hex code' do
|
87
|
+
let(:css) { <<-CSS }
|
88
|
+
#aabbcc {
|
89
|
+
}
|
90
|
+
CSS
|
91
|
+
|
92
|
+
it { should_not report_lint }
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'when color is specified as a color keyword' do
|
96
|
+
let(:css) { <<-CSS }
|
97
|
+
p {
|
98
|
+
@include box-shadow(0 0 1px 1px gold);
|
99
|
+
}
|
100
|
+
CSS
|
101
|
+
|
102
|
+
it { should_not report_lint }
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::HexValidation do
|
4
|
+
context 'when rule is empty' do
|
5
|
+
let(:css) { <<-CSS }
|
6
|
+
p {
|
7
|
+
}
|
8
|
+
CSS
|
9
|
+
|
10
|
+
it { should_not report_lint }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when rule contains valid hex codes or color keyword' do
|
14
|
+
let(:css) { <<-CSS }
|
15
|
+
p {
|
16
|
+
background: #000;
|
17
|
+
color: #FFFFFF;
|
18
|
+
border-color: red;
|
19
|
+
}
|
20
|
+
CSS
|
21
|
+
|
22
|
+
it { should_not report_lint }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when rule contains invalid hex codes' do
|
26
|
+
let(:css) { <<-CSS }
|
27
|
+
p {
|
28
|
+
background: #dd;
|
29
|
+
color: #dddd;
|
30
|
+
}
|
31
|
+
CSS
|
32
|
+
|
33
|
+
it { should report_lint line: 2 }
|
34
|
+
it { should report_lint line: 3 }
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::IdWithExtraneousSelector do
|
4
|
+
context 'when rule is just a type' do
|
5
|
+
let(:css) { <<-CSS }
|
6
|
+
p {
|
7
|
+
}
|
8
|
+
CSS
|
9
|
+
|
10
|
+
it { should_not report_lint }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when rule is just an ID' do
|
14
|
+
let(:css) { <<-CSS }
|
15
|
+
#identifier {
|
16
|
+
}
|
17
|
+
CSS
|
18
|
+
|
19
|
+
it { should_not report_lint }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when rule is just a class' do
|
23
|
+
let(:css) { <<-CSS }
|
24
|
+
.class {
|
25
|
+
}
|
26
|
+
CSS
|
27
|
+
|
28
|
+
it { should_not report_lint }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when rule is a type with a class' do
|
32
|
+
let(:css) { <<-CSS }
|
33
|
+
a.class {
|
34
|
+
}
|
35
|
+
CSS
|
36
|
+
|
37
|
+
it { should_not report_lint }
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'when rule is a type with an ID' do
|
41
|
+
let(:css) { <<-CSS }
|
42
|
+
a#identifier {
|
43
|
+
}
|
44
|
+
CSS
|
45
|
+
|
46
|
+
it { should report_lint line: 1 }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when rule is an ID with a pseudo' do
|
50
|
+
let(:css) { <<-CSS }
|
51
|
+
#identifier:active {
|
52
|
+
}
|
53
|
+
CSS
|
54
|
+
|
55
|
+
it { should_not report_lint }
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'when rule is a type with an ID with a pseudo' do
|
59
|
+
let(:css) { <<-CSS }
|
60
|
+
a#identifier:active {
|
61
|
+
}
|
62
|
+
CSS
|
63
|
+
|
64
|
+
it { should report_lint line: 1 }
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'when rule contains multiple selectors' do
|
68
|
+
context 'when all of the selectors are just IDs, classes, or types' do
|
69
|
+
let(:css) { <<-CSS }
|
70
|
+
#identifier,
|
71
|
+
.class,
|
72
|
+
a {
|
73
|
+
}
|
74
|
+
CSS
|
75
|
+
|
76
|
+
it { should_not report_lint }
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'when one of the rules is an ID with a pseudo' do
|
80
|
+
let(:css) { <<-CSS }
|
81
|
+
#identifier:active,
|
82
|
+
.class {
|
83
|
+
}
|
84
|
+
CSS
|
85
|
+
|
86
|
+
it { should_not report_lint }
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when one of the rules is a type with an ID with a pseudo' do
|
90
|
+
let(:css) { <<-CSS }
|
91
|
+
a#identifier:active,
|
92
|
+
.class {
|
93
|
+
}
|
94
|
+
CSS
|
95
|
+
|
96
|
+
it { should report_lint line: 1 }
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'when one of the selectors is a type and class' do
|
100
|
+
let(:css) { <<-CSS }
|
101
|
+
#identifier,
|
102
|
+
a.class {
|
103
|
+
}
|
104
|
+
CSS
|
105
|
+
|
106
|
+
it { should_not report_lint }
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'when one of the selectors is a type and ID' do
|
110
|
+
let(:css) { <<-CSS }
|
111
|
+
#identifier,
|
112
|
+
a#my-id {
|
113
|
+
}
|
114
|
+
CSS
|
115
|
+
|
116
|
+
it { should report_lint line: 1 }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'when rule contains a nested rule with type and ID' do
|
121
|
+
let(:css) { <<-CSS }
|
122
|
+
p {
|
123
|
+
a#identifier {
|
124
|
+
}
|
125
|
+
}
|
126
|
+
CSS
|
127
|
+
|
128
|
+
it { should report_lint line: 2 }
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'when selector contains a class and ID' do
|
132
|
+
let(:css) { <<-CSS }
|
133
|
+
#id.class {
|
134
|
+
}
|
135
|
+
CSS
|
136
|
+
|
137
|
+
it { should report_lint line: 1 }
|
138
|
+
end
|
139
|
+
end
|