scss_lint-auto_correct 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|