scss_lint 0.57.0 → 0.60.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 +5 -5
- data/MIT-LICENSE +1 -2
- data/data/properties.txt +28 -0
- data/data/property-sort-orders/smacss.txt +5 -0
- data/data/pseudo-elements.txt +2 -0
- data/lib/scss_lint/cli.rb +4 -4
- data/lib/scss_lint/config.rb +2 -5
- data/lib/scss_lint/constants.rb +1 -1
- data/lib/scss_lint/engine.rb +5 -5
- data/lib/scss_lint/linter/chained_classes.rb +1 -1
- data/lib/scss_lint/linter/color_variable.rb +0 -3
- data/lib/scss_lint/linter/disable_linter_reason.rb +3 -3
- data/lib/scss_lint/linter/hex_length.rb +1 -1
- data/lib/scss_lint/linter/hex_notation.rb +1 -1
- data/lib/scss_lint/linter/hex_validation.rb +2 -2
- data/lib/scss_lint/linter/indentation.rb +1 -1
- data/lib/scss_lint/linter/leading_zero.rb +1 -1
- data/lib/scss_lint/linter/length_variable.rb +1 -1
- data/lib/scss_lint/linter/property_units.rb +1 -1
- data/lib/scss_lint/linter/selector_depth.rb +1 -1
- data/lib/scss_lint/linter/shorthand.rb +1 -1
- data/lib/scss_lint/linter/space_around_operator.rb +1 -1
- data/lib/scss_lint/linter/space_between_parens.rb +2 -2
- data/lib/scss_lint/linter/string_quotes.rb +2 -2
- data/lib/scss_lint/linter/trailing_semicolon.rb +1 -1
- data/lib/scss_lint/linter/trailing_whitespace.rb +1 -1
- data/lib/scss_lint/linter/trailing_zero.rb +1 -1
- data/lib/scss_lint/linter/unnecessary_mantissa.rb +2 -2
- data/lib/scss_lint/linter/url_format.rb +2 -2
- data/lib/scss_lint/linter/url_quotes.rb +2 -2
- data/lib/scss_lint/linter/vendor_prefix.rb +1 -1
- data/lib/scss_lint/linter/zero_unit.rb +1 -1
- data/lib/scss_lint/linter.rb +1 -1
- data/lib/scss_lint/options.rb +3 -3
- data/lib/scss_lint/rake_task.rb +1 -1
- data/lib/scss_lint/runner.rb +8 -8
- data/lib/scss_lint/utils.rb +1 -1
- data/lib/scss_lint/version.rb +1 -1
- data/spec/scss_lint/linter/duplicate_property_spec.rb +1 -1
- data/spec/scss_lint/linter/length_variable_spec.rb +1 -1
- data/spec/scss_lint/plugins/linter_dir_spec.rb +1 -1
- metadata +83 -100
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 570475ca333090a33a54d608ce015b5164c56b4b195d775cb96d4e01178a5c24
|
|
4
|
+
data.tar.gz: 02da18b960f297a62eb8f84736452bfd2aa0107cbac27ea532fbda399dfe0300
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ed25ade8dbb9e0f16674924ecd7751a2a4d843ee08d1870e713623c569832c702f6a5308c31c069e71d5e8fa1e061d3469dce6995547d634a5294cb9061369a4
|
|
7
|
+
data.tar.gz: 5558c11fccfac36b82a6b2d20c741b9a7d2869893315da8957cde5168aa5c284ff1e2f7ad06ebcb838ef6b0d088afa1f533c5d93a5e27734379e6bfbe8192d56
|
data/MIT-LICENSE
CHANGED
data/data/properties.txt
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
@keyframes
|
|
2
|
+
accent-color
|
|
2
3
|
align-content
|
|
3
4
|
align-items
|
|
4
5
|
align-self
|
|
@@ -125,6 +126,7 @@ break-before
|
|
|
125
126
|
break-inside
|
|
126
127
|
buffered-rendering
|
|
127
128
|
caption-side
|
|
129
|
+
caret-color
|
|
128
130
|
clear
|
|
129
131
|
clip
|
|
130
132
|
clip-path
|
|
@@ -155,6 +157,8 @@ counter-increment
|
|
|
155
157
|
counter-reset
|
|
156
158
|
crop
|
|
157
159
|
cursor
|
|
160
|
+
cx
|
|
161
|
+
cy
|
|
158
162
|
direction
|
|
159
163
|
display
|
|
160
164
|
dominant-baseline
|
|
@@ -198,7 +202,9 @@ font-stretch
|
|
|
198
202
|
font-style
|
|
199
203
|
font-variant
|
|
200
204
|
font-variant-ligatures
|
|
205
|
+
font-variant-numeric
|
|
201
206
|
font-weight
|
|
207
|
+
gap
|
|
202
208
|
glyph-orientation-horizontal
|
|
203
209
|
glyph-orientation-vertical
|
|
204
210
|
grid
|
|
@@ -363,6 +369,9 @@ overflow-style
|
|
|
363
369
|
overflow-wrap
|
|
364
370
|
overflow-x
|
|
365
371
|
overflow-y
|
|
372
|
+
overscroll-behavior
|
|
373
|
+
overscroll-behavior-x
|
|
374
|
+
overscroll-behavior-y
|
|
366
375
|
padding
|
|
367
376
|
padding-after
|
|
368
377
|
padding-before
|
|
@@ -387,11 +396,14 @@ perspective-origin
|
|
|
387
396
|
perspective-origin-x
|
|
388
397
|
perspective-origin-y
|
|
389
398
|
phonemes
|
|
399
|
+
place-content
|
|
400
|
+
place-items
|
|
390
401
|
pointer-events
|
|
391
402
|
position
|
|
392
403
|
print-color-adjust
|
|
393
404
|
punctuation-trim
|
|
394
405
|
quotes
|
|
406
|
+
r
|
|
395
407
|
region-break-after
|
|
396
408
|
region-break-before
|
|
397
409
|
region-break-inside
|
|
@@ -409,7 +421,20 @@ ruby-align
|
|
|
409
421
|
ruby-overhang
|
|
410
422
|
ruby-position
|
|
411
423
|
ruby-span
|
|
424
|
+
rx
|
|
425
|
+
ry
|
|
412
426
|
scroll-behavior
|
|
427
|
+
scroll-margin
|
|
428
|
+
scroll-margin-bottom
|
|
429
|
+
scroll-margin-left
|
|
430
|
+
scroll-margin-right
|
|
431
|
+
scroll-margin-top
|
|
432
|
+
scroll-padding
|
|
433
|
+
scroll-padding-bottom
|
|
434
|
+
scroll-padding-left
|
|
435
|
+
scroll-padding-right
|
|
436
|
+
scroll-padding-top
|
|
437
|
+
scrollbar-width
|
|
413
438
|
shape-image-threshold
|
|
414
439
|
shape-inside
|
|
415
440
|
shape-margin
|
|
@@ -477,6 +502,7 @@ text-stroke-width
|
|
|
477
502
|
text-transform
|
|
478
503
|
text-underline-color
|
|
479
504
|
text-underline-mode
|
|
505
|
+
text-underline-offset
|
|
480
506
|
text-underline-position
|
|
481
507
|
text-underline-style
|
|
482
508
|
text-underline-width
|
|
@@ -521,5 +547,7 @@ word-wrap
|
|
|
521
547
|
wrap-flow
|
|
522
548
|
wrap-through
|
|
523
549
|
writing-mode
|
|
550
|
+
x
|
|
551
|
+
y
|
|
524
552
|
z-index
|
|
525
553
|
zoom
|
|
@@ -58,6 +58,10 @@ align-self
|
|
|
58
58
|
justify-content
|
|
59
59
|
order
|
|
60
60
|
|
|
61
|
+
gap
|
|
62
|
+
row-gap
|
|
63
|
+
column-gap
|
|
64
|
+
|
|
61
65
|
width
|
|
62
66
|
min-width
|
|
63
67
|
max-width
|
|
@@ -222,6 +226,7 @@ text-shadow
|
|
|
222
226
|
text-transform
|
|
223
227
|
text-wrap
|
|
224
228
|
word-wrap
|
|
229
|
+
overflow-wrap
|
|
225
230
|
word-break
|
|
226
231
|
|
|
227
232
|
text-emphasis
|
data/data/pseudo-elements.txt
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
-moz-viewport
|
|
30
30
|
-moz-viewport-scroll
|
|
31
31
|
-moz-xul-anonymous-block
|
|
32
|
+
-ms-backdrop
|
|
32
33
|
-ms-browse
|
|
33
34
|
-ms-check
|
|
34
35
|
-ms-clear
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
-webkit-datetime-edit-month-field
|
|
55
56
|
-webkit-datetime-edit-text
|
|
56
57
|
-webkit-datetime-edit-year-field
|
|
58
|
+
-webkit-details-marker
|
|
57
59
|
-webkit-file-upload-button
|
|
58
60
|
-webkit-full-page-media
|
|
59
61
|
-webkit-inner-spin-button
|
data/lib/scss_lint/cli.rb
CHANGED
|
@@ -31,8 +31,8 @@ module SCSSLint
|
|
|
31
31
|
def run(args)
|
|
32
32
|
options = SCSSLint::Options.new.parse(args)
|
|
33
33
|
act_on_options(options)
|
|
34
|
-
rescue StandardError =>
|
|
35
|
-
handle_runtime_exception(
|
|
34
|
+
rescue StandardError => e
|
|
35
|
+
handle_runtime_exception(e, options)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
private
|
|
@@ -205,9 +205,9 @@ module SCSSLint
|
|
|
205
205
|
Array(options[:required_paths]).each do |path|
|
|
206
206
|
require path
|
|
207
207
|
end
|
|
208
|
-
rescue LoadError =>
|
|
208
|
+
rescue LoadError => e
|
|
209
209
|
raise SCSSLint::Exceptions::RequiredLibraryMissingError,
|
|
210
|
-
"Required library not found: #{
|
|
210
|
+
"Required library not found: #{e.message}"
|
|
211
211
|
end
|
|
212
212
|
|
|
213
213
|
def load_reporters(options)
|
data/lib/scss_lint/config.rb
CHANGED
|
@@ -64,9 +64,9 @@ module SCSSLint
|
|
|
64
64
|
else
|
|
65
65
|
{}
|
|
66
66
|
end
|
|
67
|
-
rescue StandardError =>
|
|
67
|
+
rescue StandardError => e
|
|
68
68
|
raise SCSSLint::Exceptions::InvalidConfiguration,
|
|
69
|
-
"Invalid configuration: #{
|
|
69
|
+
"Invalid configuration: #{e.message}"
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
options = convert_single_options_to_arrays(options)
|
|
@@ -94,8 +94,6 @@ module SCSSLint
|
|
|
94
94
|
# Merge options from wildcard linters into individual linter configs
|
|
95
95
|
def merge_wildcard_linter_options(options)
|
|
96
96
|
options = options.dup
|
|
97
|
-
|
|
98
|
-
# rubocop:disable Performance/HashEachMethods (FALSE POSITIVE)
|
|
99
97
|
# Cannot use `each_key` because the cycle adds new keys during iteration
|
|
100
98
|
options.fetch('linters', {}).keys.each do |class_name|
|
|
101
99
|
next unless class_name.include?('*')
|
|
@@ -103,7 +101,6 @@ module SCSSLint
|
|
|
103
101
|
wildcard_options = options['linters'].delete(class_name)
|
|
104
102
|
apply_options_to_matching_linters(class_name, options, wildcard_options)
|
|
105
103
|
end
|
|
106
|
-
# rubocop:enable Performance/HashEachMethods
|
|
107
104
|
|
|
108
105
|
options
|
|
109
106
|
end
|
data/lib/scss_lint/constants.rb
CHANGED
|
@@ -5,6 +5,6 @@ module SCSSLint
|
|
|
5
5
|
SCSS_LINT_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..')).freeze
|
|
6
6
|
SCSS_LINT_DATA = File.join(SCSS_LINT_HOME, 'data').freeze
|
|
7
7
|
|
|
8
|
-
REPO_URL = 'https://github.com/
|
|
8
|
+
REPO_URL = 'https://github.com/sds/scss-lint'.freeze
|
|
9
9
|
BUG_REPORT_URL = "#{REPO_URL}/issues".freeze
|
|
10
10
|
end
|
data/lib/scss_lint/engine.rb
CHANGED
|
@@ -34,12 +34,12 @@ module SCSSLint
|
|
|
34
34
|
.lines
|
|
35
35
|
@tree = @engine.to_tree
|
|
36
36
|
find_any_control_commands
|
|
37
|
-
rescue Encoding::UndefinedConversionError, Sass::SyntaxError, ArgumentError =>
|
|
38
|
-
if
|
|
39
|
-
|
|
37
|
+
rescue Encoding::UndefinedConversionError, Sass::SyntaxError, ArgumentError => e
|
|
38
|
+
if e.is_a?(Encoding::UndefinedConversionError) ||
|
|
39
|
+
e.message.match(/invalid.*(byte sequence|character)/i)
|
|
40
40
|
raise FileEncodingError,
|
|
41
|
-
"Unable to parse SCSS file: #{
|
|
42
|
-
|
|
41
|
+
"Unable to parse SCSS file: #{e}",
|
|
42
|
+
e.backtrace
|
|
43
43
|
else
|
|
44
44
|
raise
|
|
45
45
|
end
|
|
@@ -6,7 +6,7 @@ module SCSSLint
|
|
|
6
6
|
def visit_sequence(sequence)
|
|
7
7
|
line_offset = 0
|
|
8
8
|
sequence.members.each do |member|
|
|
9
|
-
line_offset += 1 if member =~ /\n/
|
|
9
|
+
line_offset += 1 if member.to_s =~ /\n/
|
|
10
10
|
next unless chained_class?(member)
|
|
11
11
|
add_lint(member.line + line_offset,
|
|
12
12
|
'Prefer using a distinct class over chained classes ' \
|
|
@@ -18,13 +18,10 @@ module SCSSLint
|
|
|
18
18
|
|
|
19
19
|
def visit_script_string(node)
|
|
20
20
|
return if literal_string?(node)
|
|
21
|
-
|
|
22
|
-
# rubocop:disable Performance/HashEachMethods (FALSE POSITIVE v0.50.0)
|
|
23
21
|
remove_quoted_strings(node.value)
|
|
24
22
|
.scan(/(^|\s)(#[a-f0-9]+|[a-z]+)(?=\s|$)/i)
|
|
25
23
|
.select { |_, word| color?(word) }
|
|
26
24
|
.each { |_, color| record_lint(node, color) }
|
|
27
|
-
# rubocop:enable Performance/HashEachMethods
|
|
28
25
|
end
|
|
29
26
|
|
|
30
27
|
def visit_script_funcall(node)
|
|
@@ -7,7 +7,7 @@ module SCSSLint
|
|
|
7
7
|
# No lint if the first line of the comment is not a command (because then
|
|
8
8
|
# either this comment has no commands, or the first line serves as a the
|
|
9
9
|
# reason for a command on a later line).
|
|
10
|
-
if comment_lines(node).first.match(COMMAND_REGEX)
|
|
10
|
+
if comment_lines(node).first.match?(COMMAND_REGEX)
|
|
11
11
|
visit_command_comment(node)
|
|
12
12
|
else
|
|
13
13
|
@previous_comment = node
|
|
@@ -21,7 +21,7 @@ module SCSSLint
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# Not a "disable linter reason" if the last line of the previous comment is a command.
|
|
24
|
-
if comment_lines(@previous_comment).last.match(COMMAND_REGEX)
|
|
24
|
+
if comment_lines(@previous_comment).last.match?(COMMAND_REGEX)
|
|
25
25
|
report_lint(node)
|
|
26
26
|
return
|
|
27
27
|
end
|
|
@@ -48,7 +48,7 @@ module SCSSLint
|
|
|
48
48
|
(?<action>disable)\s+
|
|
49
49
|
(?<linters>.*?)
|
|
50
50
|
\s*(?:\*/|\n) # Comment end marker or end of line
|
|
51
|
-
}x
|
|
51
|
+
}x.freeze
|
|
52
52
|
|
|
53
53
|
def comment_lines(node)
|
|
54
54
|
node.value.join.split("\n")
|
|
@@ -4,7 +4,7 @@ module SCSSLint
|
|
|
4
4
|
class Linter::HexLength < Linter
|
|
5
5
|
include LinterRegistry
|
|
6
6
|
|
|
7
|
-
HEX_REGEX = /(#(\h{3}|\h{6}))(?!\h)
|
|
7
|
+
HEX_REGEX = /(#(\h{3}|\h{6}))(?!\h)/.freeze
|
|
8
8
|
|
|
9
9
|
def visit_script_color(node)
|
|
10
10
|
return unless hex = source_from_range(node.source_range)[HEX_REGEX, 1]
|
|
@@ -3,7 +3,7 @@ module SCSSLint
|
|
|
3
3
|
class Linter::HexNotation < Linter
|
|
4
4
|
include LinterRegistry
|
|
5
5
|
|
|
6
|
-
HEX_REGEX = /(#(\h{3}|\h{6}))(?!\h)
|
|
6
|
+
HEX_REGEX = /(#(\h{3}|\h{6}))(?!\h)/.freeze
|
|
7
7
|
|
|
8
8
|
def visit_script_color(node)
|
|
9
9
|
return unless hex = source_from_range(node.source_range)[HEX_REGEX, 1]
|
|
@@ -13,10 +13,10 @@ module SCSSLint
|
|
|
13
13
|
|
|
14
14
|
private
|
|
15
15
|
|
|
16
|
-
HEX_REGEX = /(#(\h{3}|\h{6}|\h{8}))(?!\h)
|
|
16
|
+
HEX_REGEX = /(#(\h{3}|\h{6}|\h{8}))(?!\h)/.freeze
|
|
17
17
|
|
|
18
18
|
def check_hex(hex, node)
|
|
19
|
-
return if HEX_REGEX.match(hex)
|
|
19
|
+
return if HEX_REGEX.match?(hex)
|
|
20
20
|
add_lint(node, "Colors must have either three or six digits: `#{hex}`")
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -47,7 +47,7 @@ module SCSSLint
|
|
|
47
47
|
# combinator, as these "combine" simple sequences such that they do not
|
|
48
48
|
# increase depth.
|
|
49
49
|
depth = simple_sequences.size -
|
|
50
|
-
separators.count { |item|
|
|
50
|
+
separators.count { |item| %w[~ +].include?(item) }
|
|
51
51
|
|
|
52
52
|
depth +=
|
|
53
53
|
if parent_selectors > 0
|
|
@@ -13,7 +13,7 @@ module SCSSLint
|
|
|
13
13
|
# (only selectors?), the source ranges are offset by two (probably not
|
|
14
14
|
# accounting for the `#{`. Slide everything to the left by 2, and maybe
|
|
15
15
|
# things will look sane this time.
|
|
16
|
-
unless operation_sources.operator_source
|
|
16
|
+
unless operation_sources.operator_source.match?(Sass::Script::Lexer::REGULAR_EXPRESSIONS[:op])
|
|
17
17
|
operation_sources.adjust_for_interpolation
|
|
18
18
|
operation_sources.adjust_sources
|
|
19
19
|
end
|
|
@@ -29,7 +29,7 @@ module SCSSLint
|
|
|
29
29
|
|
|
30
30
|
private
|
|
31
31
|
|
|
32
|
-
TRAILING_WHITESPACE = /\s
|
|
32
|
+
TRAILING_WHITESPACE = /\s*$/.freeze
|
|
33
33
|
|
|
34
34
|
def check(node, source) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
35
35
|
@spaces = config['spaces']
|
|
@@ -90,7 +90,7 @@ module SCSSLint
|
|
|
90
90
|
# those parens may be part of a parent function call. We don't care about
|
|
91
91
|
# such parens. This depends on whether the preceding character is part of
|
|
92
92
|
# a function name.
|
|
93
|
-
return original_source if character_at(range.start_pos, left_offset - 1)
|
|
93
|
+
return original_source if character_at(range.start_pos, left_offset - 1).match?(/[A-Za-z0-9_]/)
|
|
94
94
|
|
|
95
95
|
range.start_pos.offset += left_offset
|
|
96
96
|
range.end_pos.offset += right_offset
|
|
@@ -45,7 +45,7 @@ module SCSSLint
|
|
|
45
45
|
\s*\)?\s*;?\s* # Sometimes the Sass parser includes a trailing ) or ;
|
|
46
46
|
(//.*)? # Exclude any trailing comments that might have snuck in
|
|
47
47
|
\z
|
|
48
|
-
}x
|
|
48
|
+
}x.freeze
|
|
49
49
|
|
|
50
50
|
def extract_string_without_quotes(source)
|
|
51
51
|
return unless match = STRING_WITHOUT_QUOTES_REGEX.match(source)
|
|
@@ -66,7 +66,7 @@ module SCSSLint
|
|
|
66
66
|
if string =~ /(?<! \\) \\'/x && string !~ /"/
|
|
67
67
|
add_lint(node, 'Use double-quoted strings when writing single ' \
|
|
68
68
|
'quotes to avoid having to escape the single quotes')
|
|
69
|
-
elsif string
|
|
69
|
+
elsif string.match?(/(?<! \\) \\"/x)
|
|
70
70
|
add_lint(node, "Don't escape double quotes in single-quoted strings")
|
|
71
71
|
end
|
|
72
72
|
elsif string !~ /"/
|
|
@@ -45,7 +45,7 @@ module SCSSLint
|
|
|
45
45
|
|
|
46
46
|
def visit_import(node)
|
|
47
47
|
# Ignore all but the last import for comma-separated @imports
|
|
48
|
-
return if source_from_range(node.source_range)
|
|
48
|
+
return if source_from_range(node.source_range).match?(/,\s*$/)
|
|
49
49
|
check_semicolon(node)
|
|
50
50
|
end
|
|
51
51
|
|
|
@@ -22,7 +22,7 @@ module SCSSLint
|
|
|
22
22
|
|
|
23
23
|
private
|
|
24
24
|
|
|
25
|
-
FRACTIONAL_DIGIT_REGEX = /^-?(\d*\.\d+)
|
|
25
|
+
FRACTIONAL_DIGIT_REGEX = /^-?(\d*\.\d+)/.freeze
|
|
26
26
|
|
|
27
27
|
def check_for_trailing_zeros(node, original_number)
|
|
28
28
|
return unless match = /^(\d*\.(?:[0-9]*[1-9]|[1-9])*)0+$/.match(original_number)
|
|
@@ -8,7 +8,7 @@ module SCSSLint
|
|
|
8
8
|
|
|
9
9
|
def visit_script_string(node)
|
|
10
10
|
return unless node.type == :identifier
|
|
11
|
-
return if node.value
|
|
11
|
+
return if node.value.match?(/^'|"/)
|
|
12
12
|
return if url_literal?(node)
|
|
13
13
|
|
|
14
14
|
node.value.scan(REAL_NUMBER_REGEX) do |number, integer, mantissa, units|
|
|
@@ -35,7 +35,7 @@ module SCSSLint
|
|
|
35
35
|
(?<mantissa>\d+)
|
|
36
36
|
(?<units>\w*)
|
|
37
37
|
)\b
|
|
38
|
-
/ix
|
|
38
|
+
/ix.freeze
|
|
39
39
|
|
|
40
40
|
MESSAGE_FORMAT = '`%s` should be written without the mantissa as `%s%s`'.freeze
|
|
41
41
|
|
|
@@ -49,8 +49,8 @@ module SCSSLint
|
|
|
49
49
|
if uri.scheme || uri.host
|
|
50
50
|
add_lint(node, "URL `#{url}` should not contain protocol or domain")
|
|
51
51
|
end
|
|
52
|
-
rescue URI::Error =>
|
|
53
|
-
add_lint(node, "Invalid URL `#{url}`: #{
|
|
52
|
+
rescue URI::Error => e
|
|
53
|
+
add_lint(node, "Invalid URL `#{url}`: #{e}")
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
end
|
|
@@ -20,8 +20,8 @@ module SCSSLint
|
|
|
20
20
|
private
|
|
21
21
|
|
|
22
22
|
def check(node, string)
|
|
23
|
-
return unless string
|
|
24
|
-
return if string
|
|
23
|
+
return unless string.match?(/^\s*url\(\s*[^"']/)
|
|
24
|
+
return if string.match?(/^\s*url\(\s*data:/) # Ignore data URIs
|
|
25
25
|
|
|
26
26
|
add_lint(node, 'URLs should be enclosed in quotes')
|
|
27
27
|
end
|
|
@@ -27,7 +27,7 @@ module SCSSLint
|
|
|
27
27
|
private
|
|
28
28
|
|
|
29
29
|
def check_identifier(node, identifier)
|
|
30
|
-
return unless identifier
|
|
30
|
+
return unless identifier.match?(/^[_-]/)
|
|
31
31
|
|
|
32
32
|
# Strip vendor prefix to check against identifiers.
|
|
33
33
|
# (Also strip closing parentheticals from values like linear-gradient.)
|
|
@@ -35,7 +35,7 @@ module SCSSLint
|
|
|
35
35
|
(?<!\.|\#) # Ignore zeroes following `#` (colors) or `.` (decimals)
|
|
36
36
|
(0[a-z]+) # Zero followed by letters indicating some sort of unit
|
|
37
37
|
\b
|
|
38
|
-
/ix
|
|
38
|
+
/ix.freeze
|
|
39
39
|
|
|
40
40
|
MESSAGE_FORMAT = '`%s` should be written without units as `0`'.freeze
|
|
41
41
|
|
data/lib/scss_lint/linter.rb
CHANGED
|
@@ -75,7 +75,7 @@ module SCSSLint
|
|
|
75
75
|
line_source.length - range.start_pos.offset + 1
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
-
# Workaround for https://github.com/
|
|
78
|
+
# Workaround for https://github.com/sds/scss-lint/issues/887 to acount for
|
|
79
79
|
# https://github.com/sass/sass/issues/2284.
|
|
80
80
|
length = 1 if length < 1
|
|
81
81
|
|
data/lib/scss_lint/options.rb
CHANGED
|
@@ -27,10 +27,10 @@ module SCSSLint
|
|
|
27
27
|
@options[:files] = args
|
|
28
28
|
|
|
29
29
|
@options
|
|
30
|
-
rescue OptionParser::InvalidOption =>
|
|
30
|
+
rescue OptionParser::InvalidOption => e
|
|
31
31
|
raise SCSSLint::Exceptions::InvalidCLIOption,
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
e.message,
|
|
33
|
+
e.backtrace
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
private
|
data/lib/scss_lint/rake_task.rb
CHANGED
data/lib/scss_lint/runner.rb
CHANGED
|
@@ -33,18 +33,18 @@ module SCSSLint
|
|
|
33
33
|
@linters.each do |linter|
|
|
34
34
|
begin
|
|
35
35
|
run_linter(linter, engine, file[:path])
|
|
36
|
-
rescue StandardError =>
|
|
36
|
+
rescue StandardError => e
|
|
37
37
|
raise SCSSLint::Exceptions::LinterError,
|
|
38
38
|
"#{linter.class} raised unexpected error linting file #{file[:path]}: " \
|
|
39
|
-
"'#{
|
|
40
|
-
|
|
39
|
+
"'#{e.message}'",
|
|
40
|
+
e.backtrace
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
|
-
rescue Sass::SyntaxError =>
|
|
44
|
-
@lints << Lint.new(Linter::Syntax.new,
|
|
45
|
-
"Syntax Error: #{
|
|
46
|
-
rescue FileEncodingError =>
|
|
47
|
-
@lints << Lint.new(Linter::Encoding.new, file[:path], Location.new,
|
|
43
|
+
rescue Sass::SyntaxError => e
|
|
44
|
+
@lints << Lint.new(Linter::Syntax.new, e.sass_filename, Location.new(e.sass_line),
|
|
45
|
+
"Syntax Error: #{e}", :error)
|
|
46
|
+
rescue FileEncodingError => e
|
|
47
|
+
@lints << Lint.new(Linter::Encoding.new, file[:path], Location.new, e.to_s, :error)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# For stubbing in tests.
|
data/lib/scss_lint/utils.rb
CHANGED
data/lib/scss_lint/version.rb
CHANGED
|
@@ -217,7 +217,7 @@ describe SCSSLint::Linter::DuplicateProperty do
|
|
|
217
217
|
end
|
|
218
218
|
|
|
219
219
|
context 'when specific consecutive duplicate properties are allowed' do
|
|
220
|
-
let(:linter_config) { { 'ignore_consecutive' => [
|
|
220
|
+
let(:linter_config) { { 'ignore_consecutive' => %w[background-color transition] } }
|
|
221
221
|
|
|
222
222
|
context 'when rule set contains consecutive duplicates in whitelist' do
|
|
223
223
|
let(:scss) { <<-SCSS }
|
|
@@ -348,7 +348,7 @@ describe SCSSLint::Linter::LengthVariable do
|
|
|
348
348
|
end
|
|
349
349
|
|
|
350
350
|
context 'when using a length with an allowed property' do
|
|
351
|
-
let(:linter_config) { { 'allowed_properties' => [
|
|
351
|
+
let(:linter_config) { { 'allowed_properties' => %w[text-shadow box-shadow] } }
|
|
352
352
|
let(:scss) { <<-SCSS }
|
|
353
353
|
p {
|
|
354
354
|
text-shadow: 10px 10px 5px blue;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe SCSSLint::Plugins::LinterDir do
|
|
4
|
-
let(:plugin_directory) { File.expand_path('
|
|
4
|
+
let(:plugin_directory) { File.expand_path('../fixtures/plugins', __dir__) }
|
|
5
5
|
let(:subject) { described_class.new(plugin_directory) }
|
|
6
6
|
|
|
7
7
|
describe '#load' do
|
metadata
CHANGED
|
@@ -1,41 +1,23 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: scss_lint
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.60.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
- Brigade Engineering
|
|
8
7
|
- Shane da Silva
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2023-01-27 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
|
-
- !ruby/object:Gem::Dependency
|
|
15
|
-
name: rake
|
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
requirements:
|
|
18
|
-
- - ">="
|
|
19
|
-
- !ruby/object:Gem::Version
|
|
20
|
-
version: '0.9'
|
|
21
|
-
- - "<"
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version: '13'
|
|
24
|
-
type: :runtime
|
|
25
|
-
prerelease: false
|
|
26
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
27
|
-
requirements:
|
|
28
|
-
- - ">="
|
|
29
|
-
- !ruby/object:Gem::Version
|
|
30
|
-
version: '0.9'
|
|
31
|
-
- - "<"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '13'
|
|
34
13
|
- !ruby/object:Gem::Dependency
|
|
35
14
|
name: sass
|
|
36
15
|
requirement: !ruby/object:Gem::Requirement
|
|
37
16
|
requirements:
|
|
38
17
|
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '3.5'
|
|
20
|
+
- - ">="
|
|
39
21
|
- !ruby/object:Gem::Version
|
|
40
22
|
version: 3.5.5
|
|
41
23
|
type: :runtime
|
|
@@ -43,11 +25,13 @@ dependencies:
|
|
|
43
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
44
26
|
requirements:
|
|
45
27
|
- - "~>"
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '3.5'
|
|
30
|
+
- - ">="
|
|
46
31
|
- !ruby/object:Gem::Version
|
|
47
32
|
version: 3.5.5
|
|
48
33
|
description: Configurable tool for writing clean and consistent SCSS
|
|
49
34
|
email:
|
|
50
|
-
- eng@brigade.com
|
|
51
35
|
- shane@dasilva.io
|
|
52
36
|
executables:
|
|
53
37
|
- scss-lint
|
|
@@ -254,7 +238,7 @@ files:
|
|
|
254
238
|
- spec/spec_helper.rb
|
|
255
239
|
- spec/support/isolated_environment.rb
|
|
256
240
|
- spec/support/matchers/report_lint.rb
|
|
257
|
-
homepage: https://github.com/
|
|
241
|
+
homepage: https://github.com/sds/scss-lint
|
|
258
242
|
licenses:
|
|
259
243
|
- MIT
|
|
260
244
|
metadata: {}
|
|
@@ -266,108 +250,107 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
266
250
|
requirements:
|
|
267
251
|
- - ">="
|
|
268
252
|
- !ruby/object:Gem::Version
|
|
269
|
-
version: '2.
|
|
253
|
+
version: '2.4'
|
|
270
254
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
255
|
requirements:
|
|
272
256
|
- - ">="
|
|
273
257
|
- !ruby/object:Gem::Version
|
|
274
258
|
version: '0'
|
|
275
259
|
requirements: []
|
|
276
|
-
|
|
277
|
-
rubygems_version: 2.5.2
|
|
260
|
+
rubygems_version: 3.1.6
|
|
278
261
|
signing_key:
|
|
279
262
|
specification_version: 4
|
|
280
263
|
summary: SCSS lint tool
|
|
281
264
|
test_files:
|
|
282
|
-
- spec/
|
|
265
|
+
- spec/spec_helper.rb
|
|
266
|
+
- spec/scss_lint/runner_spec.rb
|
|
283
267
|
- spec/scss_lint/config_spec.rb
|
|
284
|
-
- spec/scss_lint/
|
|
285
|
-
- spec/scss_lint/
|
|
286
|
-
- spec/scss_lint/
|
|
287
|
-
- spec/scss_lint/linter/
|
|
288
|
-
- spec/scss_lint/linter/bem_depth_spec.rb
|
|
289
|
-
- spec/scss_lint/linter/border_zero_spec.rb
|
|
290
|
-
- spec/scss_lint/linter/chained_classes_spec.rb
|
|
291
|
-
- spec/scss_lint/linter/color_keyword_spec.rb
|
|
292
|
-
- spec/scss_lint/linter/color_variable_spec.rb
|
|
293
|
-
- spec/scss_lint/linter/comment_spec.rb
|
|
294
|
-
- spec/scss_lint/linter/compass/property_with_mixin_spec.rb
|
|
295
|
-
- spec/scss_lint/linter/debug_statement_spec.rb
|
|
296
|
-
- spec/scss_lint/linter/declaration_order_spec.rb
|
|
297
|
-
- spec/scss_lint/linter/disable_linter_reason_spec.rb
|
|
298
|
-
- spec/scss_lint/linter/duplicate_property_spec.rb
|
|
299
|
-
- spec/scss_lint/linter/else_placement_spec.rb
|
|
300
|
-
- spec/scss_lint/linter/empty_line_between_blocks_spec.rb
|
|
301
|
-
- spec/scss_lint/linter/empty_rule_spec.rb
|
|
302
|
-
- spec/scss_lint/linter/extend_directive_spec.rb
|
|
303
|
-
- spec/scss_lint/linter/final_newline_spec.rb
|
|
304
|
-
- spec/scss_lint/linter/hex_length_spec.rb
|
|
305
|
-
- spec/scss_lint/linter/hex_notation_spec.rb
|
|
306
|
-
- spec/scss_lint/linter/hex_validation_spec.rb
|
|
268
|
+
- spec/scss_lint/rake_task_spec.rb
|
|
269
|
+
- spec/scss_lint/cli_spec.rb
|
|
270
|
+
- spec/scss_lint/logger_spec.rb
|
|
271
|
+
- spec/scss_lint/linter/trailing_whitespace_spec.rb
|
|
307
272
|
- spec/scss_lint/linter/id_selector_spec.rb
|
|
273
|
+
- spec/scss_lint/linter/single_line_per_selector_spec.rb
|
|
274
|
+
- spec/scss_lint/linter/declaration_order_spec.rb
|
|
308
275
|
- spec/scss_lint/linter/import_path_spec.rb
|
|
309
|
-
- spec/scss_lint/linter/
|
|
310
|
-
- spec/scss_lint/linter/
|
|
276
|
+
- spec/scss_lint/linter/url_quotes_spec.rb
|
|
277
|
+
- spec/scss_lint/linter/chained_classes_spec.rb
|
|
278
|
+
- spec/scss_lint/linter/space_around_operator_spec.rb
|
|
311
279
|
- spec/scss_lint/linter/leading_zero_spec.rb
|
|
312
|
-
- spec/scss_lint/linter/
|
|
313
|
-
- spec/scss_lint/linter/
|
|
314
|
-
- spec/scss_lint/linter/
|
|
315
|
-
- spec/scss_lint/linter/
|
|
316
|
-
- spec/scss_lint/linter/placeholder_in_extend_spec.rb
|
|
317
|
-
- spec/scss_lint/linter/private_naming_convention_spec.rb
|
|
318
|
-
- spec/scss_lint/linter/property_count_spec.rb
|
|
319
|
-
- spec/scss_lint/linter/property_sort_order_spec.rb
|
|
320
|
-
- spec/scss_lint/linter/property_spelling_spec.rb
|
|
321
|
-
- spec/scss_lint/linter/property_units_spec.rb
|
|
280
|
+
- spec/scss_lint/linter/unnecessary_mantissa_spec.rb
|
|
281
|
+
- spec/scss_lint/linter/important_rule_spec.rb
|
|
282
|
+
- spec/scss_lint/linter/zero_unit_spec.rb
|
|
283
|
+
- spec/scss_lint/linter/space_after_property_name_spec.rb
|
|
322
284
|
- spec/scss_lint/linter/pseudo_element_spec.rb
|
|
285
|
+
- spec/scss_lint/linter/else_placement_spec.rb
|
|
286
|
+
- spec/scss_lint/linter/vendor_prefix_spec.rb
|
|
287
|
+
- spec/scss_lint/linter/space_after_comment_spec.rb
|
|
288
|
+
- spec/scss_lint/linter/trailing_semicolon_spec.rb
|
|
289
|
+
- spec/scss_lint/linter/length_variable_spec.rb
|
|
290
|
+
- spec/scss_lint/linter/space_after_comma_spec.rb
|
|
291
|
+
- spec/scss_lint/linter/single_line_per_property_spec.rb
|
|
292
|
+
- spec/scss_lint/linter/border_zero_spec.rb
|
|
293
|
+
- spec/scss_lint/linter/url_format_spec.rb
|
|
323
294
|
- spec/scss_lint/linter/qualifying_element_spec.rb
|
|
324
|
-
- spec/scss_lint/linter/
|
|
295
|
+
- spec/scss_lint/linter/empty_line_between_blocks_spec.rb
|
|
296
|
+
- spec/scss_lint/linter/hex_validation_spec.rb
|
|
297
|
+
- spec/scss_lint/linter/empty_rule_spec.rb
|
|
298
|
+
- spec/scss_lint/linter/variable_for_property_spec.rb
|
|
299
|
+
- spec/scss_lint/linter/duplicate_property_spec.rb
|
|
300
|
+
- spec/scss_lint/linter/property_spelling_spec.rb
|
|
325
301
|
- spec/scss_lint/linter/selector_format_spec.rb
|
|
326
|
-
- spec/scss_lint/linter/shorthand_spec.rb
|
|
327
|
-
- spec/scss_lint/linter/single_line_per_property_spec.rb
|
|
328
|
-
- spec/scss_lint/linter/single_line_per_selector_spec.rb
|
|
329
|
-
- spec/scss_lint/linter/space_after_comma_spec.rb
|
|
330
|
-
- spec/scss_lint/linter/space_after_comment_spec.rb
|
|
331
|
-
- spec/scss_lint/linter/space_after_property_colon_spec.rb
|
|
332
|
-
- spec/scss_lint/linter/space_after_property_name_spec.rb
|
|
333
|
-
- spec/scss_lint/linter/space_after_variable_colon_spec.rb
|
|
334
|
-
- spec/scss_lint/linter/space_after_variable_name_spec.rb
|
|
335
|
-
- spec/scss_lint/linter/space_around_operator_spec.rb
|
|
336
|
-
- spec/scss_lint/linter/space_before_brace_spec.rb
|
|
337
302
|
- spec/scss_lint/linter/space_between_parens_spec.rb
|
|
303
|
+
- spec/scss_lint/linter/space_after_variable_colon_spec.rb
|
|
304
|
+
- spec/scss_lint/linter/indentation_spec.rb
|
|
305
|
+
- spec/scss_lint/linter/placeholder_in_extend_spec.rb
|
|
306
|
+
- spec/scss_lint/linter/extend_directive_spec.rb
|
|
338
307
|
- spec/scss_lint/linter/string_quotes_spec.rb
|
|
339
|
-
- spec/scss_lint/linter/trailing_semicolon_spec.rb
|
|
340
|
-
- spec/scss_lint/linter/trailing_whitespace_spec.rb
|
|
341
308
|
- spec/scss_lint/linter/trailing_zero_spec.rb
|
|
309
|
+
- spec/scss_lint/linter/space_after_property_colon_spec.rb
|
|
310
|
+
- spec/scss_lint/linter/debug_statement_spec.rb
|
|
311
|
+
- spec/scss_lint/linter/property_count_spec.rb
|
|
312
|
+
- spec/scss_lint/linter/private_naming_convention_spec.rb
|
|
313
|
+
- spec/scss_lint/linter/color_variable_spec.rb
|
|
314
|
+
- spec/scss_lint/linter/property_sort_order_spec.rb
|
|
315
|
+
- spec/scss_lint/linter/space_before_brace_spec.rb
|
|
316
|
+
- spec/scss_lint/linter/mergeable_selector_spec.rb
|
|
317
|
+
- spec/scss_lint/linter/final_newline_spec.rb
|
|
318
|
+
- spec/scss_lint/linter/hex_notation_spec.rb
|
|
319
|
+
- spec/scss_lint/linter/compass/property_with_mixin_spec.rb
|
|
320
|
+
- spec/scss_lint/linter/space_after_variable_name_spec.rb
|
|
321
|
+
- spec/scss_lint/linter/hex_length_spec.rb
|
|
322
|
+
- spec/scss_lint/linter/shorthand_spec.rb
|
|
323
|
+
- spec/scss_lint/linter/selector_depth_spec.rb
|
|
324
|
+
- spec/scss_lint/linter/bem_depth_spec.rb
|
|
325
|
+
- spec/scss_lint/linter/nesting_depth_spec.rb
|
|
326
|
+
- spec/scss_lint/linter/name_format_spec.rb
|
|
327
|
+
- spec/scss_lint/linter/comment_spec.rb
|
|
342
328
|
- spec/scss_lint/linter/transition_all_spec.rb
|
|
343
|
-
- spec/scss_lint/linter/
|
|
329
|
+
- spec/scss_lint/linter/bang_format_spec.rb
|
|
330
|
+
- spec/scss_lint/linter/property_units_spec.rb
|
|
344
331
|
- spec/scss_lint/linter/unnecessary_parent_reference_spec.rb
|
|
345
|
-
- spec/scss_lint/linter/
|
|
346
|
-
- spec/scss_lint/linter/
|
|
347
|
-
- spec/scss_lint/
|
|
348
|
-
- spec/scss_lint/
|
|
349
|
-
- spec/scss_lint/
|
|
350
|
-
- spec/scss_lint/
|
|
351
|
-
- spec/scss_lint/
|
|
352
|
-
- spec/scss_lint/
|
|
353
|
-
- spec/scss_lint/
|
|
354
|
-
- spec/scss_lint/options_spec.rb
|
|
332
|
+
- spec/scss_lint/linter/disable_linter_reason_spec.rb
|
|
333
|
+
- spec/scss_lint/linter/color_keyword_spec.rb
|
|
334
|
+
- spec/scss_lint/reporter/stats_reporter_spec.rb
|
|
335
|
+
- spec/scss_lint/reporter/json_reporter_spec.rb
|
|
336
|
+
- spec/scss_lint/reporter/tap_reporter_spec.rb
|
|
337
|
+
- spec/scss_lint/reporter/files_reporter_spec.rb
|
|
338
|
+
- spec/scss_lint/reporter/config_reporter_spec.rb
|
|
339
|
+
- spec/scss_lint/reporter/default_reporter_spec.rb
|
|
340
|
+
- spec/scss_lint/reporter/clean_files_reporter_spec.rb
|
|
355
341
|
- spec/scss_lint/plugins/linter_dir_spec.rb
|
|
356
342
|
- spec/scss_lint/plugins/linter_gem_spec.rb
|
|
357
|
-
- spec/scss_lint/
|
|
343
|
+
- spec/scss_lint/options_spec.rb
|
|
344
|
+
- spec/scss_lint/file_finder_spec.rb
|
|
358
345
|
- spec/scss_lint/preprocess_spec.rb
|
|
359
|
-
- spec/scss_lint/
|
|
346
|
+
- spec/scss_lint/plugins_spec.rb
|
|
347
|
+
- spec/scss_lint/linter_registry_spec.rb
|
|
348
|
+
- spec/scss_lint/engine_spec.rb
|
|
349
|
+
- spec/scss_lint/location_spec.rb
|
|
360
350
|
- spec/scss_lint/report_lint_spec.rb
|
|
361
|
-
- spec/scss_lint/
|
|
362
|
-
- spec/scss_lint/
|
|
363
|
-
- spec/scss_lint/reporter/default_reporter_spec.rb
|
|
364
|
-
- spec/scss_lint/reporter/files_reporter_spec.rb
|
|
365
|
-
- spec/scss_lint/reporter/json_reporter_spec.rb
|
|
366
|
-
- spec/scss_lint/reporter/stats_reporter_spec.rb
|
|
367
|
-
- spec/scss_lint/reporter/tap_reporter_spec.rb
|
|
351
|
+
- spec/scss_lint/fixtures/plugins/linter_plugin.rb
|
|
352
|
+
- spec/scss_lint/linter_spec.rb
|
|
368
353
|
- spec/scss_lint/reporter_spec.rb
|
|
369
|
-
- spec/scss_lint/runner_spec.rb
|
|
370
354
|
- spec/scss_lint/selector_visitor_spec.rb
|
|
371
|
-
- spec/spec_helper.rb
|
|
372
355
|
- spec/support/isolated_environment.rb
|
|
373
356
|
- spec/support/matchers/report_lint.rb
|