scss_lint-auto_correct 1.0.0 → 1.1.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/lib/scss_lint/auto_correct/cli.rb +4 -2
- data/lib/scss_lint/auto_correct/correctors/base.rb +1 -1
- data/lib/scss_lint/auto_correct/correctors/property_sort_order.rb +53 -0
- data/lib/scss_lint/auto_correct/correctors/shorter_versions_of_colors.rb +4 -0
- data/lib/scss_lint/auto_correct/correctors/use_hex_instead_of_color_keywords.rb +4 -0
- data/lib/scss_lint/auto_correct/property_sorter.rb +92 -0
- data/lib/scss_lint/auto_correct/version.rb +1 -1
- data/test/fixtures/unsorted_properties.scss +4 -0
- data/test/fixtures/unsorted_properties_corrected.scss +4 -0
- data/test/fixtures/unsorted_properties_disable_rule.scss +6 -0
- data/test/unit/property_sort_order_test.rb +24 -0
- metadata +11 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fba2efff4f1df225710a78b728482a14cc8131a4
|
4
|
+
data.tar.gz: 12f5ab2d724a3b3127d39246d9e5441bfb130b5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9442a72c3feefe5d8c588510f560f031a175ae7d9c5ad2ef0795bb82f9400a0e63c52b26ca872be2607ad311129dce7cb1591793ab1e29b2682afaf5ddb2f4e
|
7
|
+
data.tar.gz: 8fe3ac34f4de8717ca5db69bf396f0cecaa6dbfb91ebcb08601dddaf23e3c36cf92028ad263beb5e4d4761e1a4547db681be5c81b4c82528e9ca99d09fa67cc9
|
@@ -61,6 +61,7 @@ module SCSSLint::AutoCorrect
|
|
61
61
|
puts " --verbose, -v"
|
62
62
|
puts " --dry"
|
63
63
|
puts " --list"
|
64
|
+
puts " --force Ignore config disabling of corrector"
|
64
65
|
puts "Only apply specific correctors, using any combination of:"
|
65
66
|
@correctors.each do |c|
|
66
67
|
puts " --#{c.short_name}"
|
@@ -123,8 +124,9 @@ module SCSSLint::AutoCorrect
|
|
123
124
|
|
124
125
|
def invoke_correctors(contents)
|
125
126
|
@correctors.each do |corrector|
|
126
|
-
config = corrector.
|
127
|
-
|
127
|
+
config = corrector.linter_name ? @config.options['linters'].fetch(corrector.linter_name) : {}
|
128
|
+
instance = corrector.new(config)
|
129
|
+
contents = instance.call(contents) if instance.enabled? || option?(:force)
|
128
130
|
end
|
129
131
|
contents
|
130
132
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module SCSSLint::AutoCorrect::Correctors
|
2
|
+
class PropertySortOrder < Base
|
3
|
+
def initialize(config = {})
|
4
|
+
super
|
5
|
+
@result = []
|
6
|
+
@buffer = []
|
7
|
+
@enabled = true
|
8
|
+
@sorter = SCSSLint::AutoCorrect::PropertySorter.new rules: @config["order"]
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(source)
|
12
|
+
source.lines.each { |line| visit_line(line) }
|
13
|
+
flush_buffer!
|
14
|
+
@result.join
|
15
|
+
end
|
16
|
+
|
17
|
+
def visit_line(line)
|
18
|
+
if line =~ /scss-lint:disable.*PropertySortOrder/
|
19
|
+
@result << line
|
20
|
+
@enabled = false
|
21
|
+
return
|
22
|
+
end
|
23
|
+
if line =~ /scss-lint:enable.*PropertySortOrder/
|
24
|
+
@result << line
|
25
|
+
@enabled = true
|
26
|
+
return
|
27
|
+
end
|
28
|
+
if @enabled && @sorter.property?(line)
|
29
|
+
@buffer << line
|
30
|
+
else
|
31
|
+
flush_buffer!
|
32
|
+
@result << line
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def flush_buffer!
|
37
|
+
@result += reduce_buffer(@buffer)
|
38
|
+
@buffer = []
|
39
|
+
end
|
40
|
+
|
41
|
+
def reduce_buffer(lines)
|
42
|
+
@sorter.sort_lines(lines)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.linter_name
|
46
|
+
"PropertySortOrder"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.description
|
50
|
+
"Sorts properties correctly"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require "scss_lint/constants"
|
2
|
+
|
3
|
+
module SCSSLint::AutoCorrect
|
4
|
+
class PropertySorter
|
5
|
+
def initialize(rules: "")
|
6
|
+
@rules = rules
|
7
|
+
end
|
8
|
+
|
9
|
+
def preferred_order
|
10
|
+
return @preferred_order unless @preferred_order.nil?
|
11
|
+
path = File.join \
|
12
|
+
SCSSLint::SCSS_LINT_DATA,
|
13
|
+
"property-sort-orders",
|
14
|
+
"#{@rules}.txt"
|
15
|
+
|
16
|
+
@preferred_order = []
|
17
|
+
|
18
|
+
if File.file?(path)
|
19
|
+
@preferred_order = File.open(path) \
|
20
|
+
.read
|
21
|
+
.split("\n")
|
22
|
+
.reject { |line| line =~ /^\s*#/ || line.strip == "" }
|
23
|
+
end
|
24
|
+
|
25
|
+
@preferred_order
|
26
|
+
end
|
27
|
+
|
28
|
+
def property?(line)
|
29
|
+
parsed = parse_line(line)
|
30
|
+
return false if parsed.nil?
|
31
|
+
!!parsed[:property]
|
32
|
+
# !preferred_order.index(parsed[:property]).nil?
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_line(line)
|
36
|
+
mm = line.match(/^\s*([^:]+):/)
|
37
|
+
full = mm[1]
|
38
|
+
if full[0] == "-"
|
39
|
+
mm2 = full.match(/^-([^-]+)-(.*)$/)
|
40
|
+
{
|
41
|
+
vendor: mm2[1],
|
42
|
+
property: mm2[2],
|
43
|
+
line: line
|
44
|
+
}
|
45
|
+
else
|
46
|
+
{
|
47
|
+
property: full,
|
48
|
+
line: line
|
49
|
+
}
|
50
|
+
end
|
51
|
+
rescue
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def compare_lines(a, b)
|
56
|
+
compare_properties \
|
57
|
+
parse_line(a),
|
58
|
+
parse_line(b)
|
59
|
+
end
|
60
|
+
|
61
|
+
def compare_properties(a, b)
|
62
|
+
if a[:property] == b[:property]
|
63
|
+
compare_by_vendor(a, b)
|
64
|
+
elsif preferred_order.any?
|
65
|
+
compare_by_order(a, b)
|
66
|
+
else
|
67
|
+
a[:property] <=> b[:property]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def compare_by_order(a, b)
|
72
|
+
(preferred_order.index(a[:property]) || Float::INFINITY) <=>
|
73
|
+
(preferred_order.index(b[:property]) || Float::INFINITY)
|
74
|
+
end
|
75
|
+
|
76
|
+
def compare_by_vendor(a, b)
|
77
|
+
if a[:vendor] && b[:vendor]
|
78
|
+
a[:vendor] <=> b[:vendor]
|
79
|
+
elsif a[:vendor]
|
80
|
+
-1
|
81
|
+
elsif b[:vendor]
|
82
|
+
1
|
83
|
+
else
|
84
|
+
0
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def sort_lines(lines)
|
89
|
+
lines.sort { |a,b| compare_lines(a, b) }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
class PropertySortOrderTest < Minitest::Test
|
4
|
+
describe "SCSSLint::AutoCorrect::Correctors::PropertySortOrder" do
|
5
|
+
let(:corrector) { SCSSLint::AutoCorrect::Correctors::PropertySortOrder }
|
6
|
+
|
7
|
+
it "basically works" do
|
8
|
+
corrector.new
|
9
|
+
end
|
10
|
+
|
11
|
+
it "process input" do
|
12
|
+
input = load_file "unsorted_properties.scss"
|
13
|
+
expected = load_file "unsorted_properties_corrected.scss"
|
14
|
+
output = corrector.new.call input
|
15
|
+
assert_equal expected, output
|
16
|
+
end
|
17
|
+
|
18
|
+
it "ignores blocks, when pre-processor instructions are present" do
|
19
|
+
input = load_file "unsorted_properties_disable_rule.scss"
|
20
|
+
output = corrector.new.call input
|
21
|
+
assert_equal input, output
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scss_lint-auto_correct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Marié
|
@@ -46,16 +46,22 @@ files:
|
|
46
46
|
- lib/scss_lint/auto_correct/correctors/lines_end_with_semicolons.rb
|
47
47
|
- lib/scss_lint/auto_correct/correctors/newlines_for_each_selector.rb
|
48
48
|
- lib/scss_lint/auto_correct/correctors/no_spaces_before_semicolons.rb
|
49
|
+
- lib/scss_lint/auto_correct/correctors/property_sort_order.rb
|
49
50
|
- lib/scss_lint/auto_correct/correctors/short_versions_of_numbers.rb
|
50
51
|
- lib/scss_lint/auto_correct/correctors/shorter_versions_of_colors.rb
|
51
52
|
- lib/scss_lint/auto_correct/correctors/spacing_before_selectors.rb
|
52
53
|
- lib/scss_lint/auto_correct/correctors/use_hex_instead_of_color_keywords.rb
|
53
54
|
- lib/scss_lint/auto_correct/correctors/variable_names.rb
|
55
|
+
- lib/scss_lint/auto_correct/property_sorter.rb
|
54
56
|
- lib/scss_lint/auto_correct/version.rb
|
55
57
|
- test/fixtures/has_uppercase_colors.scss
|
58
|
+
- test/fixtures/unsorted_properties.scss
|
59
|
+
- test/fixtures/unsorted_properties_corrected.scss
|
60
|
+
- test/fixtures/unsorted_properties_disable_rule.scss
|
56
61
|
- test/test_helper.rb
|
57
62
|
- test/unit/cli_test.rb
|
58
63
|
- test/unit/downcase_colors_test.rb
|
64
|
+
- test/unit/property_sort_order_test.rb
|
59
65
|
homepage: https://github.com/Dorian/scss-lint-auto-correct
|
60
66
|
licenses:
|
61
67
|
- MIT
|
@@ -82,6 +88,10 @@ specification_version: 4
|
|
82
88
|
summary: Auto corrections for SCSS lint tool
|
83
89
|
test_files:
|
84
90
|
- test/fixtures/has_uppercase_colors.scss
|
91
|
+
- test/fixtures/unsorted_properties.scss
|
92
|
+
- test/fixtures/unsorted_properties_corrected.scss
|
93
|
+
- test/fixtures/unsorted_properties_disable_rule.scss
|
85
94
|
- test/test_helper.rb
|
86
95
|
- test/unit/cli_test.rb
|
87
96
|
- test/unit/downcase_colors_test.rb
|
97
|
+
- test/unit/property_sort_order_test.rb
|