scss_lint 0.49.0 → 0.50.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/default.yml +5 -0
- data/lib/scss_lint/cli.rb +12 -8
- data/lib/scss_lint/config.rb +5 -5
- data/lib/scss_lint/engine.rb +1 -2
- data/lib/scss_lint/file_finder.rb +4 -2
- data/lib/scss_lint/linter.rb +4 -1
- data/lib/scss_lint/linter/color_keyword.rb +13 -1
- data/lib/scss_lint/linter/placeholder_in_extend.rb +7 -5
- data/lib/scss_lint/linter/private_naming_convention.rb +2 -2
- data/lib/scss_lint/linter/shorthand.rb +18 -0
- data/lib/scss_lint/linter/space_after_comma.rb +2 -1
- data/lib/scss_lint/linter/space_after_comment.rb +69 -0
- data/lib/scss_lint/linter/space_before_brace.rb +1 -1
- data/lib/scss_lint/linter/space_between_parens.rb +1 -1
- data/lib/scss_lint/linter/string_quotes.rb +0 -9
- data/lib/scss_lint/linter/unnecessary_mantissa.rb +5 -0
- data/lib/scss_lint/rake_task.rb +8 -2
- data/lib/scss_lint/version.rb +1 -1
- data/spec/scss_lint/file_finder_spec.rb +2 -24
- data/spec/scss_lint/linter/color_keyword_spec.rb +10 -0
- data/spec/scss_lint/linter/placeholder_in_extend_spec.rb +10 -0
- data/spec/scss_lint/linter/private_naming_convention_spec.rb +16 -0
- data/spec/scss_lint/linter/shorthand_spec.rb +21 -0
- data/spec/scss_lint/linter/space_after_comma_spec.rb +49 -0
- data/spec/scss_lint/linter/space_after_comment_spec.rb +480 -0
- data/spec/scss_lint/linter/string_quotes_spec.rb +0 -12
- data/spec/scss_lint/linter/unnecessary_mantissa_spec.rb +10 -0
- data/spec/scss_lint/reporter/stats_reporter_spec.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c6dc8c5fb0f7ed2ced515528060a877c6c7fbaa
|
4
|
+
data.tar.gz: ac668a73f2506c96684d0ff3e5451256980ac6e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1e8735bf5dedb6d82cebed74dc9e100aa21f50978d54fda8f3d814def9f6377889d86bc2f9be1617dcf42e4ee0a56c999e8bc981e1d23388a00c08fb5980a54
|
7
|
+
data.tar.gz: 91b2605482f554c157b5c98f583bfaadede6e5c003d1c37bfe78d51e39abb570b38374e25dd811c5d3b48cd49580cfc610f1f0cfd027fe097551c30b50e564d3
|
data/config/default.yml
CHANGED
@@ -181,6 +181,11 @@ linters:
|
|
181
181
|
enabled: true
|
182
182
|
style: one_space # or 'no_space', or 'at_least_one_space'
|
183
183
|
|
184
|
+
SpaceAfterComment:
|
185
|
+
enabled: true
|
186
|
+
style: at_least_one_space # or 'no_space', or 'at_least_one_space'
|
187
|
+
allow_empty_comments: true
|
188
|
+
|
184
189
|
SpaceAfterPropertyColon:
|
185
190
|
enabled: true
|
186
191
|
style: one_space # or 'no_space', or 'at_least_one_space', or 'aligned'
|
data/lib/scss_lint/cli.rb
CHANGED
@@ -63,14 +63,7 @@ module SCSSLint
|
|
63
63
|
|
64
64
|
def scan_for_lints(options, config)
|
65
65
|
runner = Runner.new(config)
|
66
|
-
files =
|
67
|
-
if options[:stdin_file_path]
|
68
|
-
[{ file: STDIN, path: options[:stdin_file_path] }]
|
69
|
-
else
|
70
|
-
FileFinder.new(config).find(options[:files]).map do |file_path|
|
71
|
-
{ path: file_path }
|
72
|
-
end
|
73
|
-
end
|
66
|
+
files = files_to_lint(options, config)
|
74
67
|
runner.run(files)
|
75
68
|
report_lints(options, runner.lints, files)
|
76
69
|
|
@@ -83,6 +76,17 @@ module SCSSLint
|
|
83
76
|
end
|
84
77
|
end
|
85
78
|
|
79
|
+
def files_to_lint(options, config)
|
80
|
+
if options[:stdin_file_path]
|
81
|
+
[{ file: STDIN, path: options[:stdin_file_path] }]
|
82
|
+
else
|
83
|
+
patterns = Array(options[:files]).any? ? Array(options[:files]) : config.scss_files
|
84
|
+
FileFinder.new(config).find(patterns).map do |file_path|
|
85
|
+
{ path: file_path }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
86
90
|
def handle_runtime_exception(exception, options) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/LineLength, Metrics/MethodLength
|
87
91
|
case exception
|
88
92
|
when SCSSLint::Exceptions::InvalidCLIOption
|
data/lib/scss_lint/config.rb
CHANGED
@@ -270,9 +270,9 @@ module SCSSLint
|
|
270
270
|
end
|
271
271
|
|
272
272
|
def linter_options(linter)
|
273
|
-
|
274
|
-
|
275
|
-
|
273
|
+
options = @options['linters'].fetch(self.class.linter_name(linter), {})
|
274
|
+
options['severity'] ||= @options['severity']
|
275
|
+
options
|
276
276
|
end
|
277
277
|
|
278
278
|
def excluded_file?(file_path)
|
@@ -304,8 +304,8 @@ module SCSSLint
|
|
304
304
|
|
305
305
|
# @return Array
|
306
306
|
def scss_files
|
307
|
-
if path = @options['scss_files']
|
308
|
-
Dir[
|
307
|
+
if path = @options['scss_files'] && Array(path).any?
|
308
|
+
Array(path).map { |p| Dir[p] }.flatten.uniq
|
309
309
|
else
|
310
310
|
[]
|
311
311
|
end
|
data/lib/scss_lint/engine.rb
CHANGED
@@ -28,11 +28,10 @@ module SCSSLint
|
|
28
28
|
|
29
29
|
# Need to force encoding to avoid Windows-related bugs.
|
30
30
|
# Need to encode with universal newline to avoid other Windows-related bugs.
|
31
|
-
# Need `to_a` for Ruby 1.9.3.
|
32
31
|
encoding = 'UTF-8'
|
33
32
|
@lines = @contents.force_encoding(encoding)
|
34
33
|
.encode(encoding, universal_newline: true)
|
35
|
-
.lines
|
34
|
+
.lines
|
36
35
|
@tree = @engine.to_tree
|
37
36
|
find_any_control_commands
|
38
37
|
rescue Encoding::UndefinedConversionError, Sass::SyntaxError, ArgumentError => error
|
@@ -19,8 +19,10 @@ module SCSSLint
|
|
19
19
|
#
|
20
20
|
# @param patterns [Array<String>] a list of file paths and glob patterns
|
21
21
|
def find(patterns)
|
22
|
-
|
23
|
-
|
22
|
+
if patterns.empty?
|
23
|
+
raise SCSSLint::Exceptions::NoFilesError,
|
24
|
+
'No files, paths, or patterns were specified'
|
25
|
+
end
|
24
26
|
|
25
27
|
matched_files = extract_files_from(patterns)
|
26
28
|
if matched_files.empty?
|
data/lib/scss_lint/linter.rb
CHANGED
@@ -52,7 +52,8 @@ module SCSSLint
|
|
52
52
|
|
53
53
|
# Helper for creating lint from a parse tree node
|
54
54
|
#
|
55
|
-
# @param node_or_line_or_location [Sass::Script::Tree::Node, Fixnum,
|
55
|
+
# @param node_or_line_or_location [Sass::Script::Tree::Node, Fixnum,
|
56
|
+
# SCSSLint::Location, Sass::Source::Position]
|
56
57
|
# @param message [String]
|
57
58
|
def add_lint(node_or_line_or_location, message)
|
58
59
|
@lints << Lint.new(self,
|
@@ -165,6 +166,8 @@ module SCSSLint
|
|
165
166
|
def extract_location(node_or_line_or_location)
|
166
167
|
if node_or_line_or_location.is_a?(Location)
|
167
168
|
node_or_line_or_location
|
169
|
+
elsif node_or_line_or_location.is_a?(Sass::Source::Position)
|
170
|
+
Location.new(node_or_line_or_location.line, node_or_line_or_location.offset)
|
168
171
|
elsif node_or_line_or_location.respond_to?(:source_range) &&
|
169
172
|
node_or_line_or_location.source_range
|
170
173
|
location_from_range(node_or_line_or_location.source_range)
|
@@ -4,6 +4,12 @@ module SCSSLint
|
|
4
4
|
class Linter::ColorKeyword < Linter
|
5
5
|
include LinterRegistry
|
6
6
|
|
7
|
+
FUNCTIONS_ALLOWING_COLOR_KEYWORD_ARGS = %w[
|
8
|
+
map-get
|
9
|
+
map-has-key
|
10
|
+
map-remove
|
11
|
+
].to_set
|
12
|
+
|
7
13
|
def visit_script_color(node)
|
8
14
|
word = source_from_range(node.source_range)[/([a-z]+)/i, 1]
|
9
15
|
add_color_lint(node, word) if color_keyword?(word)
|
@@ -20,7 +26,7 @@ module SCSSLint
|
|
20
26
|
private
|
21
27
|
|
22
28
|
def add_color_lint(node, original)
|
23
|
-
return if in_map?(node)
|
29
|
+
return if in_map?(node) || in_allowed_function_call?(node)
|
24
30
|
|
25
31
|
hex_form = Sass::Script::Value::Color.new(color_keyword_to_code(original)).tap do |color|
|
26
32
|
color.options = {} # `inspect` requires options to be set
|
@@ -34,5 +40,11 @@ module SCSSLint
|
|
34
40
|
def in_map?(node)
|
35
41
|
node_ancestor(node, 2).is_a?(Sass::Script::Tree::MapLiteral)
|
36
42
|
end
|
43
|
+
|
44
|
+
def in_allowed_function_call?(node)
|
45
|
+
if (funcall = node_ancestor(node, 2)).is_a?(Sass::Script::Tree::Funcall)
|
46
|
+
FUNCTIONS_ALLOWING_COLOR_KEYWORD_ARGS.include?(funcall.name)
|
47
|
+
end
|
48
|
+
end
|
37
49
|
end
|
38
50
|
end
|
@@ -12,11 +12,13 @@ module SCSSLint
|
|
12
12
|
# every word boundary (so %placeholder becomes ['%', 'placeholder']).
|
13
13
|
selector = node.selector.join
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
if selector.include?(',')
|
16
|
+
add_lint(node, 'Avoid comma sequences in `@extend` directives; ' \
|
17
|
+
'prefer single placeholder selectors (e.g. `%some-placeholder`)')
|
18
|
+
elsif !selector.start_with?('%')
|
19
|
+
add_lint(node, 'Prefer using placeholder selectors (e.g. ' \
|
20
|
+
'%some-placeholder) with @extend')
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -27,9 +27,9 @@ module SCSSLint
|
|
27
27
|
node.children.each_with_object([]) do |child_node|
|
28
28
|
if DEFINITIONS.key?(child_node.class)
|
29
29
|
register_node child_node
|
30
|
-
else
|
31
|
-
yield
|
32
30
|
end
|
31
|
+
|
32
|
+
yield
|
33
33
|
end
|
34
34
|
|
35
35
|
# After we have visited everything, we want to see if any private things
|
@@ -5,11 +5,23 @@ module SCSSLint
|
|
5
5
|
class Linter::Shorthand < Linter
|
6
6
|
include LinterRegistry
|
7
7
|
|
8
|
+
def visit_root(*)
|
9
|
+
@shorthands_forbidden = @config['allowed_shorthands'] == []
|
10
|
+
yield # Continue linting children
|
11
|
+
end
|
12
|
+
|
8
13
|
# @param node [Sass::Tree::Node]
|
9
14
|
def visit_prop(node)
|
10
15
|
property_name = node.name.join
|
11
16
|
return unless SHORTHANDABLE_PROPERTIES.include?(property_name)
|
12
17
|
|
18
|
+
if @shorthands_forbidden
|
19
|
+
add_lint(node, "The `#{property_name}` shorthand property is " \
|
20
|
+
'forbidden since the `allowed_shorthands` option ' \
|
21
|
+
'is set to an empty list.')
|
22
|
+
|
23
|
+
end
|
24
|
+
|
13
25
|
case node.value
|
14
26
|
when Sass::Script::Tree::Literal
|
15
27
|
check_script_literal(property_name, node.value)
|
@@ -68,6 +80,8 @@ module SCSSLint
|
|
68
80
|
# @param node [Sass::Script::Value::String]
|
69
81
|
# @param values [Array<String>]
|
70
82
|
def check_shorthand(prop, node, values)
|
83
|
+
values = shorthand_values(values)
|
84
|
+
|
71
85
|
add_lint(node, "Shorthands of length `#{values.count}` are not allowed. " \
|
72
86
|
"Value was `#{values.join(' ')}`") unless allowed?(values.count)
|
73
87
|
|
@@ -138,5 +152,9 @@ module SCSSLint
|
|
138
152
|
return false unless config['allowed_shorthands']
|
139
153
|
config['allowed_shorthands'].map(&:to_i).include?(size)
|
140
154
|
end
|
155
|
+
|
156
|
+
def shorthand_values(values)
|
157
|
+
values.take(4).take_while { |value| !value.to_s.start_with?('!') }
|
158
|
+
end
|
141
159
|
end
|
142
160
|
end
|
@@ -89,7 +89,8 @@ module SCSSLint
|
|
89
89
|
next if char == "\n" || # Ignore trailing spaces
|
90
90
|
valid_spaces_after_comma?(spaces)
|
91
91
|
|
92
|
-
|
92
|
+
style_message = config['style'].tr('_', ' ')
|
93
|
+
add_lint comma_position, "Commas in #{arg_type} should be followed by #{style_message}"
|
93
94
|
end
|
94
95
|
end
|
95
96
|
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module SCSSLint
|
2
|
+
# Checks for a space after comment literals
|
3
|
+
class Linter::SpaceAfterComment < Linter
|
4
|
+
include LinterRegistry
|
5
|
+
|
6
|
+
def visit_comment(node)
|
7
|
+
source = source_from_range(node.source_range).strip
|
8
|
+
check_method = "check_#{node.type}_comment"
|
9
|
+
send(check_method, node, source)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def check_silent_comment(node, source)
|
15
|
+
source.split("\n").each_with_index do |line, index|
|
16
|
+
next if config['allow_empty_comments'] && line.strip.length <= 2
|
17
|
+
whitespace = whitespace_after_comment(line, 2)
|
18
|
+
check_for_space(node.line + index, whitespace)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def check_normal_comment(node, source)
|
23
|
+
whitespace = whitespace_after_comment(source, 2)
|
24
|
+
check_for_space(node, whitespace)
|
25
|
+
end
|
26
|
+
|
27
|
+
def check_loud_comment(node, source)
|
28
|
+
whitespace = whitespace_after_comment(source, 3)
|
29
|
+
check_for_space(node, whitespace)
|
30
|
+
end
|
31
|
+
|
32
|
+
def check_for_no_spaces(node_or_line, whitespace)
|
33
|
+
return if whitespace == 0
|
34
|
+
add_lint(node_or_line, 'Comment literal should not be followed by any spaces')
|
35
|
+
end
|
36
|
+
|
37
|
+
def check_for_one_space(node_or_line, whitespace)
|
38
|
+
return if whitespace == 1
|
39
|
+
add_lint(node_or_line, 'Comment literal should be followed by one space')
|
40
|
+
end
|
41
|
+
|
42
|
+
def check_for_at_least_one_space(node_or_line, whitespace)
|
43
|
+
return if whitespace >= 1
|
44
|
+
add_lint(node_or_line, 'Comment literal should be followed by at least one space')
|
45
|
+
end
|
46
|
+
|
47
|
+
def check_for_space(node_or_line, spaces)
|
48
|
+
case config['style']
|
49
|
+
when 'one_space'
|
50
|
+
check_for_one_space(node_or_line, spaces)
|
51
|
+
when 'no_space'
|
52
|
+
check_for_no_spaces(node_or_line, spaces)
|
53
|
+
when 'at_least_one_space'
|
54
|
+
check_for_at_least_one_space(node_or_line, spaces)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def whitespace_after_comment(source, offset)
|
59
|
+
whitespace = 0
|
60
|
+
|
61
|
+
while [' ', "\t"].include? source[offset]
|
62
|
+
whitespace += 1
|
63
|
+
offset += 1
|
64
|
+
end
|
65
|
+
|
66
|
+
whitespace
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -34,7 +34,7 @@ module SCSSLint
|
|
34
34
|
'`{` should be preceded by at least one space')
|
35
35
|
else
|
36
36
|
return unless chars_before_incorrect(string)
|
37
|
-
style_message =
|
37
|
+
style_message = config['style'] == 'new_line' ? 'a new line' : 'one space'
|
38
38
|
add_lint(line, 'Opening curly brace `{` should be ' \
|
39
39
|
"preceded by #{style_message}")
|
40
40
|
end
|
@@ -102,7 +102,7 @@ module SCSSLint
|
|
102
102
|
# An unrelated right paren will sneak into the source of a node if there is no
|
103
103
|
# whitespace between the node and the right paren.
|
104
104
|
def trim_right_paren(source)
|
105
|
-
|
105
|
+
source.count(')') == source.count('(') + 1 ? source[0..-2] : source
|
106
106
|
end
|
107
107
|
|
108
108
|
def expected_spaces
|
@@ -3,8 +3,6 @@ module SCSSLint
|
|
3
3
|
class Linter::StringQuotes < Linter
|
4
4
|
include LinterRegistry
|
5
5
|
|
6
|
-
CHARSET_DIRECTIVE_LENGTH = '@charset'.length
|
7
|
-
|
8
6
|
def visit_script_stringinterpolation(node)
|
9
7
|
# We can't statically determine what the resultant string looks like when
|
10
8
|
# string interpolation is used, e.g. "one #{$var} three" could be a very
|
@@ -26,13 +24,6 @@ module SCSSLint
|
|
26
24
|
check_quotes(node, source_from_range(node.source_range))
|
27
25
|
end
|
28
26
|
|
29
|
-
def visit_charset(node)
|
30
|
-
# `@charset` source range includes entire declaration, so exclude that prefix
|
31
|
-
source = source_from_range(node.source_range)[CHARSET_DIRECTIVE_LENGTH..-1]
|
32
|
-
|
33
|
-
check_quotes(node, source)
|
34
|
-
end
|
35
|
-
|
36
27
|
private
|
37
28
|
|
38
29
|
def check_quotes(node, source)
|
@@ -9,6 +9,7 @@ module SCSSLint
|
|
9
9
|
def visit_script_string(node)
|
10
10
|
return unless node.type == :identifier
|
11
11
|
return if node.value =~ /^'|"/
|
12
|
+
return if url_literal?(node)
|
12
13
|
|
13
14
|
node.value.scan(REAL_NUMBER_REGEX) do |number, integer, mantissa, units|
|
14
15
|
if unnecessary_mantissa?(mantissa)
|
@@ -41,5 +42,9 @@ module SCSSLint
|
|
41
42
|
def unnecessary_mantissa?(mantissa)
|
42
43
|
mantissa !~ /[^0]/
|
43
44
|
end
|
45
|
+
|
46
|
+
def url_literal?(node)
|
47
|
+
node.value.start_with?('url(')
|
48
|
+
end
|
44
49
|
end
|
45
50
|
end
|
data/lib/scss_lint/rake_task.rb
CHANGED
@@ -50,7 +50,7 @@ module SCSSLint
|
|
50
50
|
# Create the task so it is accessible via +Rake::Task['scss_lint']+.
|
51
51
|
def initialize(name = :scss_lint)
|
52
52
|
@name = name
|
53
|
-
@files = [
|
53
|
+
@files = []
|
54
54
|
@quiet = false
|
55
55
|
|
56
56
|
yield self if block_given?
|
@@ -102,7 +102,13 @@ module SCSSLint
|
|
102
102
|
# command line or in a custom task definition.
|
103
103
|
explicit_files = Array(task_args[:files]) + Array(task_args.extras)
|
104
104
|
|
105
|
-
explicit_files.any?
|
105
|
+
if explicit_files.any?
|
106
|
+
explicit_files
|
107
|
+
elsif files.any?
|
108
|
+
files
|
109
|
+
else
|
110
|
+
[] # Will fall back to scss_files option if defined
|
111
|
+
end
|
106
112
|
end
|
107
113
|
|
108
114
|
# Friendly description that shows the full command that will be executed.
|
data/lib/scss_lint/version.rb
CHANGED
@@ -14,30 +14,8 @@ describe SCSSLint::FileFinder do
|
|
14
14
|
context 'when no patterns are given' do
|
15
15
|
let(:patterns) { [] }
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
expect { subject }.to raise_error SCSSLint::Exceptions::NoFilesError
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'and there are SCSS files under the current directory' do
|
24
|
-
before do
|
25
|
-
FileUtils.touch('blah.scss')
|
26
|
-
FileUtils.mkdir_p('more')
|
27
|
-
FileUtils.touch(File.join('more', 'more.scss'))
|
28
|
-
end
|
29
|
-
|
30
|
-
it { should == ['blah.scss', File.join('more', 'more.scss')] }
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'and a default set of files is specified in the config' do
|
34
|
-
let(:files) { ['file1.scss', 'file2.scss'] }
|
35
|
-
|
36
|
-
before do
|
37
|
-
config.stub(:scss_files).and_return(files)
|
38
|
-
end
|
39
|
-
|
40
|
-
it { should == files }
|
17
|
+
it 'raises an error' do
|
18
|
+
expect { subject }.to raise_error SCSSLint::Exceptions::NoFilesError
|
41
19
|
end
|
42
20
|
end
|
43
21
|
|
@@ -99,4 +99,14 @@ describe SCSSLint::Linter::ColorKeyword do
|
|
99
99
|
|
100
100
|
it { should_not report_lint }
|
101
101
|
end
|
102
|
+
|
103
|
+
context 'when color keyword is used in a map function call' do
|
104
|
+
let(:scss) { <<-SCSS }
|
105
|
+
p {
|
106
|
+
color: map-get($my-colors, green);
|
107
|
+
}
|
108
|
+
SCSS
|
109
|
+
|
110
|
+
it { should_not report_lint }
|
111
|
+
end
|
102
112
|
end
|
@@ -31,6 +31,16 @@ describe SCSSLint::Linter::PlaceholderInExtend do
|
|
31
31
|
it { should report_lint line: 2 }
|
32
32
|
end
|
33
33
|
|
34
|
+
context 'when extending with a comma sequence starting with a placeholder' do
|
35
|
+
let(:scss) { <<-SCSS }
|
36
|
+
p {
|
37
|
+
@extend %placeholder, .item;
|
38
|
+
}
|
39
|
+
SCSS
|
40
|
+
|
41
|
+
it { should report_lint line: 2 }
|
42
|
+
end
|
43
|
+
|
34
44
|
context 'when extending with a placeholder' do
|
35
45
|
let(:scss) { <<-SCSS }
|
36
46
|
p {
|
@@ -465,6 +465,22 @@ describe SCSSLint::Linter::PrivateNamingConvention do
|
|
465
465
|
|
466
466
|
it { should_not report_lint }
|
467
467
|
end
|
468
|
+
|
469
|
+
context 'is defined and used within another private function' do
|
470
|
+
let(:scss) { <<-SCSS }
|
471
|
+
@function _foo() {
|
472
|
+
@return red;
|
473
|
+
}
|
474
|
+
|
475
|
+
@function _bar() {
|
476
|
+
@return _foo();
|
477
|
+
}
|
478
|
+
|
479
|
+
$use: _bar();
|
480
|
+
SCSS
|
481
|
+
|
482
|
+
it { should_not report_lint }
|
483
|
+
end
|
468
484
|
end
|
469
485
|
|
470
486
|
context 'when a public function' do
|
@@ -193,6 +193,16 @@ describe SCSSLint::Linter::Shorthand do
|
|
193
193
|
SCSS
|
194
194
|
|
195
195
|
it { should_not report_lint }
|
196
|
+
|
197
|
+
context 'and ends with !important' do
|
198
|
+
let(:scss) { <<-SCSS }
|
199
|
+
p {
|
200
|
+
margin: 4px 4px 4px !important;
|
201
|
+
}
|
202
|
+
SCSS
|
203
|
+
|
204
|
+
it { should_not report_lint }
|
205
|
+
end
|
196
206
|
end
|
197
207
|
|
198
208
|
context 'is fine but length is not allowed' do
|
@@ -205,5 +215,16 @@ describe SCSSLint::Linter::Shorthand do
|
|
205
215
|
|
206
216
|
it { should report_lint }
|
207
217
|
end
|
218
|
+
|
219
|
+
context 'when allowed_shorthands is a empty list' do
|
220
|
+
let(:allowed) { [] }
|
221
|
+
let(:scss) { <<-SCSS }
|
222
|
+
p {
|
223
|
+
margin: 0;
|
224
|
+
}
|
225
|
+
SCSS
|
226
|
+
|
227
|
+
it { should report_lint line: 2, message: /forbidden/ }
|
228
|
+
end
|
208
229
|
end
|
209
230
|
end
|
@@ -346,6 +346,30 @@ describe SCSSLint::Linter::SpaceAfterComma do
|
|
346
346
|
|
347
347
|
it { should report_lint line: 4 }
|
348
348
|
end
|
349
|
+
|
350
|
+
context 'column number' do
|
351
|
+
let(:scss) { <<-SCSS }
|
352
|
+
p {
|
353
|
+
property: $a,$b;
|
354
|
+
}
|
355
|
+
SCSS
|
356
|
+
|
357
|
+
it 'is the correct column' do
|
358
|
+
subject.lints.first.location.column.should == 15
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
context 'linter message' do
|
363
|
+
let(:scss) { <<-SCSS }
|
364
|
+
p {
|
365
|
+
property: $a,$b;
|
366
|
+
}
|
367
|
+
SCSS
|
368
|
+
|
369
|
+
it 'specifies the style' do
|
370
|
+
subject.lints.first.description.should == 'Commas in lists should be followed by one space'
|
371
|
+
end
|
372
|
+
end
|
349
373
|
end
|
350
374
|
|
351
375
|
context 'when more than one space is preferred' do
|
@@ -745,6 +769,19 @@ describe SCSSLint::Linter::SpaceAfterComma do
|
|
745
769
|
it { should_not report_lint }
|
746
770
|
end
|
747
771
|
end
|
772
|
+
|
773
|
+
context 'linter message' do
|
774
|
+
let(:scss) { <<-SCSS }
|
775
|
+
p {
|
776
|
+
property: $a,$b;
|
777
|
+
}
|
778
|
+
SCSS
|
779
|
+
|
780
|
+
it 'specifies the style' do
|
781
|
+
subject.lints.first.description.should ==
|
782
|
+
'Commas in lists should be followed by at least one space'
|
783
|
+
end
|
784
|
+
end
|
748
785
|
end
|
749
786
|
|
750
787
|
context 'when no space is preferred' do
|
@@ -1078,5 +1115,17 @@ describe SCSSLint::Linter::SpaceAfterComma do
|
|
1078
1115
|
it { should_not report_lint }
|
1079
1116
|
end
|
1080
1117
|
end
|
1118
|
+
|
1119
|
+
context 'linter message' do
|
1120
|
+
let(:scss) { <<-SCSS }
|
1121
|
+
p {
|
1122
|
+
property: $a, $b;
|
1123
|
+
}
|
1124
|
+
SCSS
|
1125
|
+
|
1126
|
+
it 'specifies the style' do
|
1127
|
+
subject.lints.first.description.should == 'Commas in lists should be followed by no space'
|
1128
|
+
end
|
1129
|
+
end
|
1081
1130
|
end
|
1082
1131
|
end
|
@@ -0,0 +1,480 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SCSSLint::Linter::SpaceAfterComment do
|
4
|
+
context 'when no comments exist' do
|
5
|
+
let(:scss) { <<-SCSS }
|
6
|
+
p {
|
7
|
+
margin: 0;
|
8
|
+
}
|
9
|
+
SCSS
|
10
|
+
|
11
|
+
it { should_not report_lint }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'when one space is preferred' do
|
15
|
+
let(:linter_config) { { 'style' => 'one_space' } }
|
16
|
+
|
17
|
+
context 'when silent comment and no space' do
|
18
|
+
let(:scss) { <<-SCSS }
|
19
|
+
//no space
|
20
|
+
SCSS
|
21
|
+
|
22
|
+
it { should report_lint line: 1 }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when silent comment and one space' do
|
26
|
+
let(:scss) { <<-SCSS }
|
27
|
+
// one space
|
28
|
+
SCSS
|
29
|
+
|
30
|
+
it { should_not report_lint line: 1 }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when silent comment and multiple spaces' do
|
34
|
+
let(:scss) { <<-SCSS }
|
35
|
+
// multiple spaces
|
36
|
+
SCSS
|
37
|
+
|
38
|
+
it { should report_lint line: 1 }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when inline silent comment and no space' do
|
42
|
+
let(:scss) { <<-SCSS }
|
43
|
+
p {
|
44
|
+
margin:0; //no space
|
45
|
+
}
|
46
|
+
SCSS
|
47
|
+
|
48
|
+
it { should report_lint line: 2 }
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when inline silent comment and one space' do
|
52
|
+
let(:scss) { <<-SCSS }
|
53
|
+
p {
|
54
|
+
margin:0; // one space
|
55
|
+
}
|
56
|
+
SCSS
|
57
|
+
|
58
|
+
it { should_not report_lint line: 2 }
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'when inline silent comment and multiple spaces' do
|
62
|
+
let(:scss) { <<-SCSS }
|
63
|
+
p {
|
64
|
+
margin:0; // multiple spaces
|
65
|
+
}
|
66
|
+
SCSS
|
67
|
+
|
68
|
+
it { should report_lint line: 2 }
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when multiple silent comments' do
|
72
|
+
let(:scss) { <<-SCSS }
|
73
|
+
//no space
|
74
|
+
// space
|
75
|
+
//no space
|
76
|
+
// multiple spaces
|
77
|
+
SCSS
|
78
|
+
|
79
|
+
it { should report_lint line: 1 }
|
80
|
+
it { should_not report_lint line: 2 }
|
81
|
+
it { should report_lint line: 3 }
|
82
|
+
it { should report_lint line: 4 }
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when multiple silent comments and allow_empty_comments' do
|
86
|
+
let(:linter_config) { { 'style' => 'one_space', 'allow_empty_comments' => true } }
|
87
|
+
let(:scss) { <<-SCSS }
|
88
|
+
//
|
89
|
+
//no space
|
90
|
+
// space
|
91
|
+
//no space
|
92
|
+
// multiple spaces
|
93
|
+
SCSS
|
94
|
+
|
95
|
+
it { should_not report_lint line: 1 }
|
96
|
+
it { should report_lint line: 2 }
|
97
|
+
it { should_not report_lint line: 3 }
|
98
|
+
it { should report_lint line: 4 }
|
99
|
+
it { should report_lint line: 5 }
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'when normal comment and no space' do
|
103
|
+
let(:scss) { <<-SCSS }
|
104
|
+
/*no space */
|
105
|
+
SCSS
|
106
|
+
|
107
|
+
it { should report_lint line: 1 }
|
108
|
+
end
|
109
|
+
|
110
|
+
context 'when normal comment and one space' do
|
111
|
+
let(:scss) { <<-SCSS }
|
112
|
+
/* one space */
|
113
|
+
SCSS
|
114
|
+
|
115
|
+
it { should_not report_lint line: 1 }
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'when normal comment and multiple spaces' do
|
119
|
+
let(:scss) { <<-SCSS }
|
120
|
+
/* multiple spaces */
|
121
|
+
SCSS
|
122
|
+
|
123
|
+
it { should report_lint line: 1 }
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'when inline normal comment and no space' do
|
127
|
+
let(:scss) { <<-SCSS }
|
128
|
+
p {
|
129
|
+
margin:0; /*no space */
|
130
|
+
}
|
131
|
+
SCSS
|
132
|
+
|
133
|
+
it { should report_lint line: 2 }
|
134
|
+
end
|
135
|
+
|
136
|
+
context 'when inline normal comment and one space' do
|
137
|
+
let(:scss) { <<-SCSS }
|
138
|
+
p {
|
139
|
+
margin:0; /* one space */
|
140
|
+
}
|
141
|
+
SCSS
|
142
|
+
|
143
|
+
it { should_not report_lint line: 2 }
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'when inline normal comment and multiple space' do
|
147
|
+
let(:scss) { <<-SCSS }
|
148
|
+
p {
|
149
|
+
margin:0; /* multiple spaces */
|
150
|
+
}
|
151
|
+
SCSS
|
152
|
+
|
153
|
+
it { should report_lint line: 2 }
|
154
|
+
end
|
155
|
+
|
156
|
+
context 'when loud comment and no space' do
|
157
|
+
let(:scss) { <<-SCSS }
|
158
|
+
/*!no space */
|
159
|
+
SCSS
|
160
|
+
|
161
|
+
it { should report_lint line: 1 }
|
162
|
+
end
|
163
|
+
|
164
|
+
context 'when loud comment and one space' do
|
165
|
+
let(:scss) { <<-SCSS }
|
166
|
+
/*! one space */
|
167
|
+
SCSS
|
168
|
+
|
169
|
+
it { should_not report_lint line: 1 }
|
170
|
+
end
|
171
|
+
|
172
|
+
context 'when loud comment and multiple spaces' do
|
173
|
+
let(:scss) { <<-SCSS }
|
174
|
+
/*! multiple spaces */
|
175
|
+
SCSS
|
176
|
+
|
177
|
+
it { should report_lint line: 1 }
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context 'when no spaces are allowed' do
|
182
|
+
let(:linter_config) { { 'style' => 'no_space' } }
|
183
|
+
|
184
|
+
context 'when silent comment and no space' do
|
185
|
+
let(:scss) { <<-SCSS }
|
186
|
+
//no space
|
187
|
+
SCSS
|
188
|
+
|
189
|
+
it { should_not report_lint line: 1 }
|
190
|
+
end
|
191
|
+
|
192
|
+
context 'when silent comment and one space' do
|
193
|
+
let(:scss) { <<-SCSS }
|
194
|
+
// one space
|
195
|
+
SCSS
|
196
|
+
|
197
|
+
it { should report_lint line: 1 }
|
198
|
+
end
|
199
|
+
|
200
|
+
context 'when silent comment and multiple spaces' do
|
201
|
+
let(:scss) { <<-SCSS }
|
202
|
+
// multiple spaces
|
203
|
+
SCSS
|
204
|
+
|
205
|
+
it { should report_lint line: 1 }
|
206
|
+
end
|
207
|
+
|
208
|
+
context 'when inline silent comment and no space' do
|
209
|
+
let(:scss) { <<-SCSS }
|
210
|
+
p {
|
211
|
+
margin:0; //no space
|
212
|
+
}
|
213
|
+
SCSS
|
214
|
+
|
215
|
+
it { should_not report_lint line: 2 }
|
216
|
+
end
|
217
|
+
|
218
|
+
context 'when inline silent comment and one space' do
|
219
|
+
let(:scss) { <<-SCSS }
|
220
|
+
p {
|
221
|
+
margin:0; // one space
|
222
|
+
}
|
223
|
+
SCSS
|
224
|
+
|
225
|
+
it { should report_lint line: 2 }
|
226
|
+
end
|
227
|
+
|
228
|
+
context 'when inline silent comment and multiple spaces' do
|
229
|
+
let(:scss) { <<-SCSS }
|
230
|
+
p {
|
231
|
+
margin:0; // multiple spaces
|
232
|
+
}
|
233
|
+
SCSS
|
234
|
+
|
235
|
+
it { should report_lint line: 2 }
|
236
|
+
end
|
237
|
+
|
238
|
+
context 'when multiple silent comments' do
|
239
|
+
let(:scss) { <<-SCSS }
|
240
|
+
//no space
|
241
|
+
// space
|
242
|
+
//no space
|
243
|
+
// multiple spaces
|
244
|
+
SCSS
|
245
|
+
|
246
|
+
it { should_not report_lint line: 1 }
|
247
|
+
it { should report_lint line: 2 }
|
248
|
+
it { should_not report_lint line: 3 }
|
249
|
+
it { should report_lint line: 4 }
|
250
|
+
end
|
251
|
+
|
252
|
+
context 'when normal comment and no space' do
|
253
|
+
let(:scss) { <<-SCSS }
|
254
|
+
/*no space */
|
255
|
+
SCSS
|
256
|
+
|
257
|
+
it { should_not report_lint line: 1 }
|
258
|
+
end
|
259
|
+
|
260
|
+
context 'when normal comment and one space' do
|
261
|
+
let(:scss) { <<-SCSS }
|
262
|
+
/* one space */
|
263
|
+
SCSS
|
264
|
+
|
265
|
+
it { should report_lint line: 1 }
|
266
|
+
end
|
267
|
+
|
268
|
+
context 'when normal comment and multiple spaces' do
|
269
|
+
let(:scss) { <<-SCSS }
|
270
|
+
/* multiple spaces */
|
271
|
+
SCSS
|
272
|
+
|
273
|
+
it { should report_lint line: 1 }
|
274
|
+
end
|
275
|
+
|
276
|
+
context 'when inline normal comment and no space' do
|
277
|
+
let(:scss) { <<-SCSS }
|
278
|
+
p {
|
279
|
+
margin:0; /*no space */
|
280
|
+
}
|
281
|
+
SCSS
|
282
|
+
|
283
|
+
it { should_not report_lint line: 2 }
|
284
|
+
end
|
285
|
+
|
286
|
+
context 'when inline normal comment and one space' do
|
287
|
+
let(:scss) { <<-SCSS }
|
288
|
+
p {
|
289
|
+
margin:0; /* one space */
|
290
|
+
}
|
291
|
+
SCSS
|
292
|
+
|
293
|
+
it { should report_lint line: 2 }
|
294
|
+
end
|
295
|
+
|
296
|
+
context 'when inline normal comment and multiple space' do
|
297
|
+
let(:scss) { <<-SCSS }
|
298
|
+
p {
|
299
|
+
margin:0; /* multiple spaces */
|
300
|
+
}
|
301
|
+
SCSS
|
302
|
+
|
303
|
+
it { should report_lint line: 2 }
|
304
|
+
end
|
305
|
+
|
306
|
+
context 'when loud comment and no space' do
|
307
|
+
let(:scss) { <<-SCSS }
|
308
|
+
/*!no space */
|
309
|
+
SCSS
|
310
|
+
|
311
|
+
it { should_not report_lint line: 1 }
|
312
|
+
end
|
313
|
+
|
314
|
+
context 'when loud comment and one space' do
|
315
|
+
let(:scss) { <<-SCSS }
|
316
|
+
/*! one space */
|
317
|
+
SCSS
|
318
|
+
|
319
|
+
it { should report_lint line: 1 }
|
320
|
+
end
|
321
|
+
|
322
|
+
context 'when loud comment and multiple spaces' do
|
323
|
+
let(:scss) { <<-SCSS }
|
324
|
+
/*! multiple spaces */
|
325
|
+
SCSS
|
326
|
+
|
327
|
+
it { should report_lint line: 1 }
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
context 'when at least one space is preferred' do
|
332
|
+
let(:linter_config) { { 'style' => 'at_least_one_space' } }
|
333
|
+
|
334
|
+
context 'when silent comment and no space' do
|
335
|
+
let(:scss) { <<-SCSS }
|
336
|
+
//no space
|
337
|
+
SCSS
|
338
|
+
|
339
|
+
it { should report_lint line: 1 }
|
340
|
+
end
|
341
|
+
|
342
|
+
context 'when silent comment and one space' do
|
343
|
+
let(:scss) { <<-SCSS }
|
344
|
+
// one space
|
345
|
+
SCSS
|
346
|
+
|
347
|
+
it { should_not report_lint line: 1 }
|
348
|
+
end
|
349
|
+
|
350
|
+
context 'when silent comment and multiple spaces' do
|
351
|
+
let(:scss) { <<-SCSS }
|
352
|
+
// multiple spaces
|
353
|
+
SCSS
|
354
|
+
|
355
|
+
it { should_not report_lint line: 1 }
|
356
|
+
end
|
357
|
+
|
358
|
+
context 'when inline silent comment and no space' do
|
359
|
+
let(:scss) { <<-SCSS }
|
360
|
+
p {
|
361
|
+
margin:0; //no space
|
362
|
+
}
|
363
|
+
SCSS
|
364
|
+
|
365
|
+
it { should report_lint line: 2 }
|
366
|
+
end
|
367
|
+
|
368
|
+
context 'when inline silent comment and one space' do
|
369
|
+
let(:scss) { <<-SCSS }
|
370
|
+
p {
|
371
|
+
margin:0; // one space
|
372
|
+
}
|
373
|
+
SCSS
|
374
|
+
|
375
|
+
it { should_not report_lint line: 2 }
|
376
|
+
end
|
377
|
+
|
378
|
+
context 'when inline silent comment and multiple spaces' do
|
379
|
+
let(:scss) { <<-SCSS }
|
380
|
+
p {
|
381
|
+
margin:0; // multiple spaces
|
382
|
+
}
|
383
|
+
SCSS
|
384
|
+
|
385
|
+
it { should_not report_lint line: 2 }
|
386
|
+
end
|
387
|
+
|
388
|
+
context 'when multiple silent comments' do
|
389
|
+
let(:scss) { <<-SCSS }
|
390
|
+
//no space
|
391
|
+
// space
|
392
|
+
//no space
|
393
|
+
// multiple spaces
|
394
|
+
SCSS
|
395
|
+
|
396
|
+
it { should report_lint line: 1 }
|
397
|
+
it { should_not report_lint line: 2 }
|
398
|
+
it { should report_lint line: 3 }
|
399
|
+
it { should_not report_lint line: 4 }
|
400
|
+
end
|
401
|
+
|
402
|
+
context 'when normal comment and no space' do
|
403
|
+
let(:scss) { <<-SCSS }
|
404
|
+
/*no space */
|
405
|
+
SCSS
|
406
|
+
|
407
|
+
it { should report_lint line: 1 }
|
408
|
+
end
|
409
|
+
|
410
|
+
context 'when normal comment and one space' do
|
411
|
+
let(:scss) { <<-SCSS }
|
412
|
+
/* one space */
|
413
|
+
SCSS
|
414
|
+
|
415
|
+
it { should_not report_lint line: 1 }
|
416
|
+
end
|
417
|
+
|
418
|
+
context 'when normal comment and multiple spaces' do
|
419
|
+
let(:scss) { <<-SCSS }
|
420
|
+
/* multiple spaces */
|
421
|
+
SCSS
|
422
|
+
|
423
|
+
it { should_not report_lint line: 1 }
|
424
|
+
end
|
425
|
+
|
426
|
+
context 'when inline normal comment and no space' do
|
427
|
+
let(:scss) { <<-SCSS }
|
428
|
+
p {
|
429
|
+
margin:0; /*no space */
|
430
|
+
}
|
431
|
+
SCSS
|
432
|
+
|
433
|
+
it { should report_lint line: 2 }
|
434
|
+
end
|
435
|
+
|
436
|
+
context 'when inline normal comment and one space' do
|
437
|
+
let(:scss) { <<-SCSS }
|
438
|
+
p {
|
439
|
+
margin:0; /* one space */
|
440
|
+
}
|
441
|
+
SCSS
|
442
|
+
|
443
|
+
it { should_not report_lint line: 2 }
|
444
|
+
end
|
445
|
+
|
446
|
+
context 'when inline normal comment and multiple space' do
|
447
|
+
let(:scss) { <<-SCSS }
|
448
|
+
p {
|
449
|
+
margin:0; /* multiple spaces */
|
450
|
+
}
|
451
|
+
SCSS
|
452
|
+
|
453
|
+
it { should_not report_lint line: 2 }
|
454
|
+
end
|
455
|
+
|
456
|
+
context 'when loud comment and no space' do
|
457
|
+
let(:scss) { <<-SCSS }
|
458
|
+
/*!no space */
|
459
|
+
SCSS
|
460
|
+
|
461
|
+
it { should report_lint line: 1 }
|
462
|
+
end
|
463
|
+
|
464
|
+
context 'when loud comment and one space' do
|
465
|
+
let(:scss) { <<-SCSS }
|
466
|
+
/*! one space */
|
467
|
+
SCSS
|
468
|
+
|
469
|
+
it { should_not report_lint line: 1 }
|
470
|
+
end
|
471
|
+
|
472
|
+
context 'when loud comment and multiple spaces' do
|
473
|
+
let(:scss) { <<-SCSS }
|
474
|
+
/*! multiple spaces */
|
475
|
+
SCSS
|
476
|
+
|
477
|
+
it { should_not report_lint line: 1 }
|
478
|
+
end
|
479
|
+
end
|
480
|
+
end
|
@@ -63,12 +63,6 @@ describe SCSSLint::Linter::StringQuotes do
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
context 'when @charset uses single quotes' do
|
67
|
-
let(:scss) { "@charset 'UTF-8';" }
|
68
|
-
|
69
|
-
it { should_not report_lint }
|
70
|
-
end
|
71
|
-
|
72
66
|
context 'when string is written with double quotes' do
|
73
67
|
let(:scss) { <<-SCSS }
|
74
68
|
p {
|
@@ -131,12 +125,6 @@ describe SCSSLint::Linter::StringQuotes do
|
|
131
125
|
end
|
132
126
|
end
|
133
127
|
|
134
|
-
context 'when @charset uses double quotes' do
|
135
|
-
let(:scss) { '@charset "UTF-8";' }
|
136
|
-
|
137
|
-
it { should report_lint }
|
138
|
-
end
|
139
|
-
|
140
128
|
context 'when property has a literal identifier' do
|
141
129
|
let(:scss) { <<-SCSS }
|
142
130
|
p {
|
@@ -84,4 +84,14 @@ describe SCSSLint::Linter::UnnecessaryMantissa do
|
|
84
84
|
|
85
85
|
it { should_not report_lint }
|
86
86
|
end
|
87
|
+
|
88
|
+
context 'when a decimal value appears in a URL' do
|
89
|
+
let(:scss) { <<-SCSS }
|
90
|
+
p {
|
91
|
+
background: url(https://www.example.com/v1.0/image.jpg);
|
92
|
+
}
|
93
|
+
SCSS
|
94
|
+
|
95
|
+
it { should_not report_lint }
|
96
|
+
end
|
87
97
|
end
|
@@ -32,7 +32,7 @@ describe SCSSLint::Reporter::StatsReporter do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'prints the name of each linter with lints' do
|
35
|
-
subject.report_lints.
|
35
|
+
subject.report_lints.should include linter_1.name
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'prints the number of lints per linter' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scss_lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.50.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brigade Engineering
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- lib/scss_lint/linter/single_line_per_property.rb
|
119
119
|
- lib/scss_lint/linter/single_line_per_selector.rb
|
120
120
|
- lib/scss_lint/linter/space_after_comma.rb
|
121
|
+
- lib/scss_lint/linter/space_after_comment.rb
|
121
122
|
- lib/scss_lint/linter/space_after_property_colon.rb
|
122
123
|
- lib/scss_lint/linter/space_after_property_name.rb
|
123
124
|
- lib/scss_lint/linter/space_after_variable_colon.rb
|
@@ -207,6 +208,7 @@ files:
|
|
207
208
|
- spec/scss_lint/linter/single_line_per_property_spec.rb
|
208
209
|
- spec/scss_lint/linter/single_line_per_selector_spec.rb
|
209
210
|
- spec/scss_lint/linter/space_after_comma_spec.rb
|
211
|
+
- spec/scss_lint/linter/space_after_comment_spec.rb
|
210
212
|
- spec/scss_lint/linter/space_after_property_colon_spec.rb
|
211
213
|
- spec/scss_lint/linter/space_after_property_name_spec.rb
|
212
214
|
- spec/scss_lint/linter/space_after_variable_colon_spec.rb
|
@@ -262,7 +264,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
264
|
requirements:
|
263
265
|
- - ">="
|
264
266
|
- !ruby/object:Gem::Version
|
265
|
-
version:
|
267
|
+
version: '2'
|
266
268
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
269
|
requirements:
|
268
270
|
- - ">="
|
@@ -323,6 +325,7 @@ test_files:
|
|
323
325
|
- spec/scss_lint/linter/single_line_per_property_spec.rb
|
324
326
|
- spec/scss_lint/linter/single_line_per_selector_spec.rb
|
325
327
|
- spec/scss_lint/linter/space_after_comma_spec.rb
|
328
|
+
- spec/scss_lint/linter/space_after_comment_spec.rb
|
326
329
|
- spec/scss_lint/linter/space_after_property_colon_spec.rb
|
327
330
|
- spec/scss_lint/linter/space_after_property_name_spec.rb
|
328
331
|
- spec/scss_lint/linter/space_after_variable_colon_spec.rb
|