scss_lint 0.43.2 → 0.44.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/scss-lint +2 -1
- data/config/default.yml +3 -0
- data/data/properties.txt +35 -0
- data/data/property-sort-orders/smacss.txt +9 -0
- data/data/pseudo-elements.txt +5 -0
- data/lib/scss_lint.rb +1 -0
- data/lib/scss_lint/cli.rb +50 -30
- data/lib/scss_lint/config.rb +28 -3
- data/lib/scss_lint/constants.rb +6 -4
- data/lib/scss_lint/control_comment_processor.rb +8 -7
- data/lib/scss_lint/engine.rb +1 -1
- data/lib/scss_lint/file_finder.rb +1 -1
- data/lib/scss_lint/linter.rb +8 -7
- data/lib/scss_lint/linter/bang_format.rb +2 -2
- data/lib/scss_lint/linter/border_zero.rb +2 -2
- data/lib/scss_lint/linter/color_variable.rb +1 -1
- data/lib/scss_lint/linter/declaration_order.rb +10 -8
- data/lib/scss_lint/linter/duplicate_property.rb +2 -2
- data/lib/scss_lint/linter/empty_line_between_blocks.rb +3 -1
- data/lib/scss_lint/linter/final_newline.rb +3 -3
- data/lib/scss_lint/linter/indentation.rb +20 -20
- data/lib/scss_lint/linter/leading_zero.rb +2 -2
- data/lib/scss_lint/linter/mergeable_selector.rb +3 -4
- data/lib/scss_lint/linter/name_format.rb +2 -1
- data/lib/scss_lint/linter/nesting_depth.rb +1 -1
- data/lib/scss_lint/linter/property_sort_order.rb +11 -13
- data/lib/scss_lint/linter/selector_depth.rb +9 -8
- data/lib/scss_lint/linter/selector_format.rb +1 -1
- data/lib/scss_lint/linter/shorthand.rb +1 -1
- data/lib/scss_lint/linter/single_line_per_selector.rb +3 -1
- data/lib/scss_lint/linter/space_around_operator.rb +4 -2
- data/lib/scss_lint/linter/space_before_brace.rb +8 -8
- data/lib/scss_lint/linter/space_between_parens.rb +11 -11
- data/lib/scss_lint/linter/string_quotes.rb +9 -10
- data/lib/scss_lint/linter/trailing_zero.rb +1 -1
- data/lib/scss_lint/linter/transition_all.rb +1 -1
- data/lib/scss_lint/linter/unnecessary_mantissa.rb +3 -1
- data/lib/scss_lint/linter/unnecessary_parent_reference.rb +9 -2
- data/lib/scss_lint/linter/url_quotes.rb +4 -2
- data/lib/scss_lint/linter/variable_for_property.rb +1 -1
- data/lib/scss_lint/linter/vendor_prefix.rb +3 -3
- data/lib/scss_lint/linter/zero_unit.rb +3 -1
- data/lib/scss_lint/location.rb +1 -1
- data/lib/scss_lint/logger.rb +149 -0
- data/lib/scss_lint/options.rb +5 -1
- data/lib/scss_lint/rake_task.rb +10 -3
- data/lib/scss_lint/reporter.rb +4 -2
- data/lib/scss_lint/reporter/default_reporter.rb +3 -3
- data/lib/scss_lint/version.rb +3 -1
- data/spec/scss_lint/cli_spec.rb +66 -14
- data/spec/scss_lint/config_spec.rb +25 -5
- data/spec/scss_lint/linter/name_format_spec.rb +10 -0
- data/spec/scss_lint/linter/property_sort_order_spec.rb +28 -0
- data/spec/scss_lint/linter/unnecessary_parent_reference_spec.rb +10 -0
- data/spec/scss_lint/linter/variable_for_property_spec.rb +10 -0
- data/spec/scss_lint/logger_spec.rb +27 -0
- data/spec/scss_lint/options_spec.rb +18 -0
- data/spec/scss_lint/plugins/linter_dir_spec.rb +1 -1
- data/spec/scss_lint/reporter/clean_files_reporter_spec.rb +1 -1
- data/spec/scss_lint/reporter/config_reporter_spec.rb +1 -1
- data/spec/scss_lint/reporter/default_reporter_spec.rb +2 -1
- data/spec/scss_lint/reporter/files_reporter_spec.rb +1 -1
- data/spec/scss_lint/reporter/json_reporter_spec.rb +5 -5
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a86d234a01ef87070b4fd7889111970e80def37
|
4
|
+
data.tar.gz: 2a461b84b74cc8728e64dc9366a67be4df308c10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0badb74dbb5f26d727b38dd71319b8429c35f23602bb73c30a7d197100a4d16f61df75604a4b19992aa1237d1d226b5941e786efe7c459bbde18f4a71b36a76
|
7
|
+
data.tar.gz: 4059abd1bac9430f32af1f7b125fe22a5a3ae24b146e026283648a4bfb7623453df0eb111cc9659b6f6e1866e3248425574617cef14662f5e1e32732851dc962
|
data/bin/scss-lint
CHANGED
data/config/default.yml
CHANGED
data/data/properties.txt
CHANGED
@@ -17,6 +17,7 @@ animation-timing-function
|
|
17
17
|
app-region
|
18
18
|
appearance
|
19
19
|
aspect-ratio
|
20
|
+
backdrop-filter
|
20
21
|
backface-visibility
|
21
22
|
background
|
22
23
|
background-attachment
|
@@ -34,6 +35,7 @@ background-repeat-x
|
|
34
35
|
background-repeat-y
|
35
36
|
background-size
|
36
37
|
baseline-shift
|
38
|
+
block-size
|
37
39
|
bookmark-label
|
38
40
|
bookmark-level
|
39
41
|
bookmark-target
|
@@ -46,6 +48,14 @@ border-before
|
|
46
48
|
border-before-color
|
47
49
|
border-before-style
|
48
50
|
border-before-width
|
51
|
+
border-block-end
|
52
|
+
border-block-end-color
|
53
|
+
border-block-end-style
|
54
|
+
border-block-end-width
|
55
|
+
border-block-start
|
56
|
+
border-block-start-color
|
57
|
+
border-block-start-style
|
58
|
+
border-block-start-width
|
49
59
|
border-bottom
|
50
60
|
border-bottom-color
|
51
61
|
border-bottom-left-radius
|
@@ -66,6 +76,14 @@ border-image-repeat
|
|
66
76
|
border-image-slice
|
67
77
|
border-image-source
|
68
78
|
border-image-width
|
79
|
+
border-inline-end
|
80
|
+
border-inline-end-color
|
81
|
+
border-inline-end-style
|
82
|
+
border-inline-end-width
|
83
|
+
border-inline-start
|
84
|
+
border-inline-start-color
|
85
|
+
border-inline-start-style
|
86
|
+
border-inline-start-width
|
69
87
|
border-left
|
70
88
|
border-left-color
|
71
89
|
border-left-style
|
@@ -213,6 +231,7 @@ image-orientation
|
|
213
231
|
image-rendering
|
214
232
|
image-resolution
|
215
233
|
inline-box-align
|
234
|
+
inline-size
|
216
235
|
isolation
|
217
236
|
justify-content
|
218
237
|
justify-self
|
@@ -243,10 +262,14 @@ margin-after
|
|
243
262
|
margin-after-collapse
|
244
263
|
margin-before
|
245
264
|
margin-before-collapse
|
265
|
+
margin-block-end
|
266
|
+
margin-block-start
|
246
267
|
margin-bottom
|
247
268
|
margin-bottom-collapse
|
248
269
|
margin-collapse
|
249
270
|
margin-end
|
271
|
+
margin-inline-end
|
272
|
+
margin-inline-start
|
250
273
|
margin-left
|
251
274
|
margin-right
|
252
275
|
margin-start
|
@@ -287,12 +310,16 @@ mask-repeat-y
|
|
287
310
|
mask-size
|
288
311
|
mask-source-type
|
289
312
|
mask-type
|
313
|
+
max-block-size
|
290
314
|
max-height
|
315
|
+
max-inline-size
|
291
316
|
max-logical-height
|
292
317
|
max-logical-width
|
293
318
|
max-width
|
294
319
|
max-zoom
|
320
|
+
min-block-size
|
295
321
|
min-height
|
322
|
+
min-inline-size
|
296
323
|
min-logical-height
|
297
324
|
min-logical-width
|
298
325
|
min-width
|
@@ -306,6 +333,10 @@ nav-right
|
|
306
333
|
nav-up
|
307
334
|
object-fit
|
308
335
|
object-position
|
336
|
+
offset-block-end
|
337
|
+
offset-block-start
|
338
|
+
offset-inline-end
|
339
|
+
offset-inline-start
|
309
340
|
opacity
|
310
341
|
order
|
311
342
|
orientation
|
@@ -323,8 +354,12 @@ overflow-y
|
|
323
354
|
padding
|
324
355
|
padding-after
|
325
356
|
padding-before
|
357
|
+
padding-block-end
|
358
|
+
padding-block-start
|
326
359
|
padding-bottom
|
327
360
|
padding-end
|
361
|
+
padding-inline-end
|
362
|
+
padding-inline-start
|
328
363
|
padding-left
|
329
364
|
padding-right
|
330
365
|
padding-start
|
@@ -55,7 +55,15 @@ column-count
|
|
55
55
|
column-width
|
56
56
|
|
57
57
|
transform
|
58
|
+
transform-box
|
59
|
+
transform-origin
|
60
|
+
transform-style
|
61
|
+
|
58
62
|
transition
|
63
|
+
transition-delay
|
64
|
+
transition-duration
|
65
|
+
transition-property
|
66
|
+
transition-timing-function
|
59
67
|
|
60
68
|
# Border
|
61
69
|
|
@@ -97,6 +105,7 @@ outline-width
|
|
97
105
|
# Background
|
98
106
|
|
99
107
|
background
|
108
|
+
background-attachment
|
100
109
|
background-color
|
101
110
|
background-image
|
102
111
|
background-repeat
|
data/data/pseudo-elements.txt
CHANGED
@@ -54,6 +54,7 @@
|
|
54
54
|
-webkit-datetime-edit-text
|
55
55
|
-webkit-datetime-edit-year-field
|
56
56
|
-webkit-file-upload-button
|
57
|
+
-webkit-full-page-media
|
57
58
|
-webkit-inner-spin-button
|
58
59
|
-webkit-input-placeholder
|
59
60
|
-webkit-keygen-select
|
@@ -73,7 +74,9 @@
|
|
73
74
|
-webkit-scrollbar-track
|
74
75
|
-webkit-scrollbar-track-piece
|
75
76
|
-webkit-search-cancel-button
|
77
|
+
-webkit-search-decoration
|
76
78
|
-webkit-search-results-button
|
79
|
+
-webkit-search-results-decoration
|
77
80
|
-webkit-slider-runnable-track
|
78
81
|
-webkit-slider-thumb
|
79
82
|
-webkit-textfield-decoration-container
|
@@ -86,7 +89,9 @@
|
|
86
89
|
after
|
87
90
|
backdrop
|
88
91
|
before
|
92
|
+
content
|
89
93
|
first-letter
|
90
94
|
first-line
|
91
95
|
placeholder
|
92
96
|
selection
|
97
|
+
shadow
|
data/lib/scss_lint.rb
CHANGED
data/lib/scss_lint/cli.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'rainbow'
|
2
|
-
require 'rainbow/ext/string'
|
3
1
|
require 'scss_lint/options'
|
4
2
|
|
5
3
|
module SCSSLint
|
@@ -20,7 +18,14 @@ module SCSSLint
|
|
20
18
|
config: 78, # Configuration error
|
21
19
|
no_files: 80, # No files matched by specified glob patterns
|
22
20
|
plugin: 82, # Plugin loading error
|
23
|
-
}
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
# Create a CLI that outputs to the specified logger.
|
24
|
+
#
|
25
|
+
# @param logger [SCSSLint::Logger]
|
26
|
+
def initialize(logger)
|
27
|
+
@log = logger
|
28
|
+
end
|
24
29
|
|
25
30
|
def run(args)
|
26
31
|
options = SCSSLint::Options.new.parse(args)
|
@@ -31,7 +36,10 @@ module SCSSLint
|
|
31
36
|
|
32
37
|
private
|
33
38
|
|
39
|
+
attr_reader :log
|
40
|
+
|
34
41
|
def act_on_options(options)
|
42
|
+
log.color_enabled = options.fetch(:color, log.tty?)
|
35
43
|
load_required_paths(options)
|
36
44
|
load_reporters(options)
|
37
45
|
|
@@ -77,40 +85,47 @@ module SCSSLint
|
|
77
85
|
def handle_runtime_exception(exception, options) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/LineLength, Metrics/MethodLength
|
78
86
|
case exception
|
79
87
|
when SCSSLint::Exceptions::InvalidCLIOption
|
80
|
-
|
81
|
-
|
88
|
+
log.error exception.message
|
89
|
+
log.info 'Run `scss-lint --help` for usage documentation'
|
82
90
|
halt :usage
|
83
91
|
when SCSSLint::Exceptions::InvalidConfiguration
|
84
|
-
|
92
|
+
log.error exception.message
|
85
93
|
halt :config
|
86
94
|
when SCSSLint::Exceptions::RequiredLibraryMissingError
|
87
|
-
|
95
|
+
log.error exception.message
|
88
96
|
halt :unavailable
|
89
97
|
when SCSSLint::Exceptions::NoFilesError
|
90
|
-
|
98
|
+
log.error exception.message
|
91
99
|
halt :no_files
|
92
100
|
when SCSSLint::Exceptions::PluginGemLoadError
|
93
|
-
|
101
|
+
log.error exception.message
|
94
102
|
halt :plugin
|
95
103
|
when Errno::ENOENT
|
96
|
-
|
104
|
+
log.error exception.message
|
97
105
|
halt :no_input
|
98
106
|
when NoSuchLinter
|
99
|
-
|
107
|
+
log.error exception.message
|
100
108
|
halt :usage
|
101
109
|
else
|
102
110
|
config_file = relevant_configuration_file(options) if options
|
103
111
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
112
|
+
log.bold_error exception.message
|
113
|
+
log.error exception.backtrace.join("\n")
|
114
|
+
log.warning 'Report this bug at ', false
|
115
|
+
log.info BUG_REPORT_URL
|
116
|
+
log.newline
|
117
|
+
log.success 'To help fix this issue, please include:'
|
118
|
+
log.log '- The above stack trace'
|
119
|
+
log.log '- SCSS-Lint version: ', false
|
120
|
+
log.info SCSSLint::VERSION
|
121
|
+
log.log '- Sass version: ', false
|
122
|
+
log.info Gem.loaded_specs['sass'].version.to_s
|
123
|
+
log.log '- Ruby version: ', false
|
124
|
+
log.info RUBY_VERSION
|
125
|
+
if config_file
|
126
|
+
log.log '- Contents of ', false
|
127
|
+
log.info File.expand_path(config_file)
|
128
|
+
end
|
114
129
|
halt :software
|
115
130
|
end
|
116
131
|
end
|
@@ -167,9 +182,14 @@ module SCSSLint
|
|
167
182
|
def report_lints(options, lints, files)
|
168
183
|
sorted_lints = lints.sort_by { |l| [l.filename, l.location] }
|
169
184
|
options.fetch(:reporters).each do |reporter, output|
|
170
|
-
results = reporter.new(sorted_lints, files).report_lints
|
171
|
-
|
172
|
-
|
185
|
+
results = reporter.new(sorted_lints, files, log).report_lints
|
186
|
+
next unless results
|
187
|
+
|
188
|
+
if output == :stdout
|
189
|
+
log.log results
|
190
|
+
else
|
191
|
+
File.new(output, 'w+').print results
|
192
|
+
end
|
173
193
|
end
|
174
194
|
end
|
175
195
|
|
@@ -195,26 +215,26 @@ module SCSSLint
|
|
195
215
|
end
|
196
216
|
|
197
217
|
def print_formatters
|
198
|
-
|
218
|
+
log.log 'Installed formatters:'
|
199
219
|
|
200
220
|
reporter_names = SCSSLint::Reporter.descendants.map do |reporter|
|
201
221
|
reporter.name.split('::').last.split('Reporter').first
|
202
222
|
end
|
203
223
|
|
204
224
|
reporter_names.sort.each do |reporter_name|
|
205
|
-
|
225
|
+
log.log " - #{reporter_name}"
|
206
226
|
end
|
207
227
|
|
208
228
|
halt
|
209
229
|
end
|
210
230
|
|
211
231
|
def print_linters
|
212
|
-
|
232
|
+
log.log 'Installed linters:'
|
213
233
|
|
214
234
|
linter_names = LinterRegistry.linters.map(&:simple_name)
|
215
235
|
|
216
236
|
linter_names.sort.each do |linter_name|
|
217
|
-
|
237
|
+
log.log " - #{linter_name}"
|
218
238
|
end
|
219
239
|
|
220
240
|
halt
|
@@ -222,13 +242,13 @@ module SCSSLint
|
|
222
242
|
|
223
243
|
# @param options [Hash]
|
224
244
|
def print_help(options)
|
225
|
-
|
245
|
+
log.log options[:help]
|
226
246
|
halt :ok
|
227
247
|
end
|
228
248
|
|
229
249
|
# @param options [Hash]
|
230
250
|
def print_version
|
231
|
-
|
251
|
+
log.log "scss-lint #{SCSSLint::VERSION}"
|
232
252
|
halt :ok
|
233
253
|
end
|
234
254
|
|
data/lib/scss_lint/config.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'yaml'
|
2
4
|
|
3
5
|
module SCSSLint
|
4
6
|
# Loads and manages application configuration.
|
5
7
|
class Config
|
6
|
-
FILE_NAME = '.scss-lint.yml'
|
8
|
+
FILE_NAME = '.scss-lint.yml'.freeze
|
7
9
|
DEFAULT_FILE = File.join(SCSS_LINT_HOME, 'config', 'default.yml')
|
8
10
|
|
9
11
|
attr_reader :options, :warnings
|
@@ -71,6 +73,7 @@ module SCSSLint
|
|
71
73
|
options = merge_wildcard_linter_options(options)
|
72
74
|
options = ensure_exclude_paths_are_absolute(options, file)
|
73
75
|
options = ensure_linter_exclude_paths_are_absolute(options, file)
|
76
|
+
ensure_severities_are_valid(options)
|
74
77
|
options
|
75
78
|
end
|
76
79
|
|
@@ -149,6 +152,27 @@ module SCSSLint
|
|
149
152
|
options
|
150
153
|
end
|
151
154
|
|
155
|
+
def ensure_severities_are_valid(options)
|
156
|
+
unless severity_is_valid?(options)
|
157
|
+
raise SCSSLint::Exceptions::InvalidConfiguration,
|
158
|
+
'Global `severity` configuration option must be one of [' \
|
159
|
+
"#{SEVERITIES.join(' | ')}]"
|
160
|
+
end
|
161
|
+
|
162
|
+
options['linters'].each do |linter_name, linter_options|
|
163
|
+
next if severity_is_valid?(linter_options)
|
164
|
+
|
165
|
+
raise SCSSLint::Exceptions::InvalidConfiguration,
|
166
|
+
"#{linter_name} `severity` configuration option must be one " \
|
167
|
+
"of [#{SEVERITIES.join(' | ')}]"
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
SEVERITIES = %w[error warning].freeze
|
172
|
+
def severity_is_valid?(options)
|
173
|
+
SEVERITIES.include?(options.fetch('severity', 'warning'))
|
174
|
+
end
|
175
|
+
|
152
176
|
def path_relative_to_config(relative_include_path, base_config_path)
|
153
177
|
if relative_include_path.start_with?('/')
|
154
178
|
relative_include_path
|
@@ -195,7 +219,6 @@ module SCSSLint
|
|
195
219
|
def ==(other)
|
196
220
|
super || @options == other.options
|
197
221
|
end
|
198
|
-
alias_method :eql?, :==
|
199
222
|
|
200
223
|
# Extend this {Config} with another configuration.
|
201
224
|
#
|
@@ -246,7 +269,9 @@ module SCSSLint
|
|
246
269
|
end
|
247
270
|
|
248
271
|
def linter_options(linter)
|
249
|
-
@options['
|
272
|
+
{ 'severity' => @options['severity'] }.merge(
|
273
|
+
@options['linters'].fetch(self.class.linter_name(linter), {})
|
274
|
+
)
|
250
275
|
end
|
251
276
|
|
252
277
|
def excluded_file?(file_path)
|
data/lib/scss_lint/constants.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Global application constants.
|
2
4
|
module SCSSLint
|
3
|
-
SCSS_LINT_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..'))
|
4
|
-
SCSS_LINT_DATA = File.join(SCSS_LINT_HOME, 'data')
|
5
|
+
SCSS_LINT_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..')).freeze
|
6
|
+
SCSS_LINT_DATA = File.join(SCSS_LINT_HOME, 'data').freeze
|
5
7
|
|
6
|
-
REPO_URL = 'https://github.com/brigade/scss-lint'
|
7
|
-
BUG_REPORT_URL = "#{REPO_URL}/issues"
|
8
|
+
REPO_URL = 'https://github.com/brigade/scss-lint'.freeze
|
9
|
+
BUG_REPORT_URL = "#{REPO_URL}/issues".freeze
|
8
10
|
end
|
@@ -96,13 +96,14 @@ module SCSSLint
|
|
96
96
|
|
97
97
|
comment_node = command[:node]
|
98
98
|
start_line = command[:line]
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
99
|
+
end_line =
|
100
|
+
if comment_node.class.node_name == :rule
|
101
|
+
start_line
|
102
|
+
elsif node.class.node_name == :root
|
103
|
+
@linter.engine.lines.length
|
104
|
+
else
|
105
|
+
end_line(node)
|
106
|
+
end
|
106
107
|
|
107
108
|
@disabled_lines.merge(start_line..end_line)
|
108
109
|
end
|