scss_lint 0.43.2 → 0.44.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/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
|