scss-lint 0.20.3 → 0.21.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04e747cfbff69c1989efaa27f4d3cdcab6b5f263
4
- data.tar.gz: c497ad3b12ad4fb43318319dcef21529d81ff6c1
3
+ metadata.gz: 0a7439d0611e864629c12a2f1e95c417b0e0615a
4
+ data.tar.gz: 4ca3047aa3497339ee4dc9164764d229e38f9a27
5
5
  SHA512:
6
- metadata.gz: db32a29b0ecc9d502684c9d1a21c63bc58d3e832062cc26ce649e01d645aa7fe66b3c20f1c914c0171c738dd67c30796a6bbc81ba78de13c8217072ef591ff8e
7
- data.tar.gz: 6bb2c3e1129ae0de28b9a2add10b1846570d6b5ba259656a62942bf45b7bdc57bd35cf95397a21cb5aaccbd3986fa015a8de4b07f9a312b9eadf88e3172bf491
6
+ metadata.gz: 74cf4f6c5e8fcd106500db1a05ef37d311065cbd97ef4e120380d2d6c6c90ff252d9f6818a863708337b42cc24d352cd6ba5909a2216c987b7b1d07419f9aa79
7
+ data.tar.gz: 04e23316befdbaf54f37f6004df3b5e93a9eab83ce00a5f36de107ec5176485092c1f22e965fc3f2617e4a7c7f536d171a8099a5c5ea50353b80cd86030aee0c
@@ -23,6 +23,7 @@ linters:
23
23
 
24
24
  EmptyLineBetweenBlocks:
25
25
  enabled: true
26
+ ignore_single_line_blocks: true
26
27
 
27
28
  EmptyRule:
28
29
  enabled: true
@@ -88,6 +89,9 @@ linters:
88
89
  TrailingSemicolonAfterPropertyValue:
89
90
  enabled: true
90
91
 
92
+ UrlFormat:
93
+ enabled: true
94
+
91
95
  UrlQuotes:
92
96
  enabled: true
93
97
 
@@ -1,5 +1,7 @@
1
1
  require 'find'
2
2
  require 'optparse'
3
+ require 'rainbow'
4
+ require 'rainbow/ext/string'
3
5
 
4
6
  module SCSSLint
5
7
  # Responsible for parsing command-line options and executing the appropriate
@@ -104,7 +106,7 @@ module SCSSLint
104
106
  rescue => ex
105
107
  puts ex.message
106
108
  puts ex.backtrace
107
- puts 'Report this bug at '.yellow + BUG_REPORT_URL.cyan
109
+ puts 'Report this bug at '.color(:yellow) + BUG_REPORT_URL.color(:cyan)
108
110
  halt :software
109
111
  end
110
112
 
@@ -210,7 +210,7 @@ module SCSSLint
210
210
  def ==(other)
211
211
  super || @options == other.options
212
212
  end
213
- alias :eql? :==
213
+ alias_method :eql?, :==
214
214
 
215
215
  def enabled_linters
216
216
  LinterRegistry.extract_linters_from(@options['linters'].keys).select do |linter|
@@ -11,7 +11,7 @@ module SCSSLint
11
11
  attr_reader :contents, :filename, :lines, :tree
12
12
 
13
13
  def initialize(scss_or_filename)
14
- if File.exists?(scss_or_filename)
14
+ if File.exist?(scss_or_filename)
15
15
  @filename = scss_or_filename
16
16
  @engine = Sass::Engine.for_file(scss_or_filename, ENGINE_OPTIONS)
17
17
  @contents = File.open(scss_or_filename, 'r').read
@@ -26,7 +26,7 @@ module SCSSLint
26
26
  if error.is_a?(Encoding::UndefinedConversionError) ||
27
27
  error.message.include?('invalid byte sequence')
28
28
  raise FileEncodingError,
29
- "Unable to parse SCSS file: #{error.to_s}",
29
+ "Unable to parse SCSS file: #{error}",
30
30
  error.backtrace
31
31
  else
32
32
  raise
@@ -18,22 +18,16 @@ module SCSSLint
18
18
  visit(engine.tree)
19
19
  end
20
20
 
21
- # Define if you want a default message for your linter
22
- # @return [String, nil]
23
- def description
24
- nil
25
- end
26
-
27
21
  # Helper for creating lint from a parse tree node
28
22
  #
29
23
  # @param node_or_line [Sass::Script::Tree::Node, Sass::Engine::Line]
30
- # @param message [String, nil]
31
- def add_lint(node_or_line, message = nil)
24
+ # @param message [String]
25
+ def add_lint(node_or_line, message)
32
26
  line = node_or_line.respond_to?(:line) ? node_or_line.line : node_or_line
33
27
 
34
28
  @lints << Lint.new(engine.filename,
35
29
  line,
36
- message || description)
30
+ message)
37
31
  end
38
32
 
39
33
  # @param source_position [Sass::Source::Position]
@@ -4,20 +4,21 @@ module SCSSLint
4
4
  include LinterRegistry
5
5
 
6
6
  def visit_prop(node)
7
- return unless BORDER_PROPERTIES.include? node.name.first.to_s
8
- add_lint(node) if node.value.to_sass.strip == 'none'
9
- end
7
+ return unless BORDER_PROPERTIES.include?(node.name.first.to_s)
10
8
 
11
- def description
12
- '`border: 0;` is preferred over `border: none;`'
9
+ if node.value.to_sass.strip == 'none'
10
+ add_lint(node, '`border: 0;` is preferred over `border: none;`')
11
+ end
13
12
  end
14
13
 
15
14
  private
16
15
 
17
- BORDER_PROPERTIES = %w[border
18
- border-top
19
- border-right
20
- border-bottom
21
- border-left]
16
+ BORDER_PROPERTIES = %w[
17
+ border
18
+ border-top
19
+ border-right
20
+ border-bottom
21
+ border-left
22
+ ]
22
23
  end
23
24
  end
@@ -33,7 +33,7 @@ module SCSSLint
33
33
  end
34
34
 
35
35
  def color_keyword?(string)
36
- !!color_rgb(string) && string != 'transparent'
36
+ color_rgb(string) && string != 'transparent'
37
37
  end
38
38
 
39
39
  def color_rgb(string)
@@ -4,11 +4,7 @@ module SCSSLint
4
4
  include LinterRegistry
5
5
 
6
6
  def visit_comment(node)
7
- add_lint(node) unless node.invisible?
8
- end
9
-
10
- def description
11
- 'Use // comments everywhere'
7
+ add_lint(node, 'Use `//` comments everywhere') unless node.invisible?
12
8
  end
13
9
  end
14
10
  end
@@ -4,11 +4,7 @@ module SCSSLint
4
4
  include LinterRegistry
5
5
 
6
6
  def visit_debug(node)
7
- add_lint(node)
8
- end
9
-
10
- def description
11
- '@debug line'
7
+ add_lint(node, 'Remove @debug line')
12
8
  end
13
9
  end
14
10
  end
@@ -18,18 +18,17 @@ module SCSSLint
18
18
  end
19
19
 
20
20
  if children != sorted_children
21
- add_lint(node.children.first)
21
+ add_lint(node.children.first, MESSAGE)
22
22
  end
23
23
 
24
24
  yield # Continue linting children
25
25
  end
26
26
 
27
- def description
27
+ private
28
+
29
+ MESSAGE =
28
30
  'Rule sets should start with @extend declarations, followed by ' <<
29
31
  'properties and nested rule sets, in that order'
30
- end
31
-
32
- private
33
32
 
34
33
  def important_node?(node)
35
34
  DECLARATION_ORDER.include? node.class
@@ -4,6 +4,28 @@ module SCSSLint
4
4
  include LinterRegistry
5
5
 
6
6
  def visit_rule(node)
7
+ check_properties(node)
8
+ end
9
+
10
+ def visit_mixindef(node)
11
+ check_properties(node)
12
+ end
13
+
14
+ private
15
+
16
+ def property_value(prop)
17
+ case prop.value
18
+ when Sass::Script::Funcall
19
+ prop.value.name
20
+ when Sass::Script::String
21
+ when Sass::Script::Tree::Literal
22
+ prop.value.value
23
+ else
24
+ prop.value.to_s
25
+ end
26
+ end
27
+
28
+ def check_properties(node)
7
29
  properties = node.children
8
30
  .select { |child| child.is_a?(Sass::Tree::PropNode) }
9
31
  .reject { |prop| prop.name.any? { |item| item.is_a?(Sass::Script::Node) } }
@@ -14,15 +36,7 @@ module SCSSLint
14
36
  name = prop.name.join
15
37
 
16
38
  prop_hash = name
17
- prop_value =
18
- case prop.value
19
- when Sass::Script::Funcall
20
- prop.value.name
21
- when Sass::Script::String
22
- prop.value.value
23
- else
24
- prop.value.to_s
25
- end
39
+ prop_value = property_value(prop)
26
40
 
27
41
  prop_value.to_s.scan(/^(-[^-]+-.+)/) do |vendor_keyword|
28
42
  prop_hash << vendor_keyword.first
@@ -30,6 +30,7 @@ module SCSSLint
30
30
  MESSAGE_FORMAT = '%s declaration should be %s by an empty line'
31
31
 
32
32
  def check(node, type)
33
+ return if config['ignore_single_line_blocks'] && node_on_single_line(node)
33
34
  check_preceding_node(node, type)
34
35
  check_following_node(node, type)
35
36
  end
@@ -79,5 +80,19 @@ module SCSSLint
79
80
  .children
80
81
  .select { |child| child.is_a?(Sass::Tree::Node) }
81
82
  end
83
+
84
+ def node_on_single_line(node)
85
+ return if node.source_range.start_pos.line != node.source_range.end_pos.line
86
+
87
+ # The Sass parser reports an incorrect source range if the trailing curly
88
+ # brace is on the next line, e.g.
89
+ #
90
+ # p {
91
+ # }
92
+ #
93
+ # Since we don't want to count this as a single line node, check if the
94
+ # last character on the first line is an opening curly brace.
95
+ engine.lines[node.line - 1].strip[-1] != '{'
96
+ end
82
97
  end
83
98
  end
@@ -4,12 +4,8 @@ module SCSSLint
4
4
  include LinterRegistry
5
5
 
6
6
  def visit_rule(node)
7
- add_lint(node) if node.children.empty?
7
+ add_lint(node, 'Empty rule') if node.children.empty?
8
8
  yield # Continue linting children
9
9
  end
10
-
11
- def description
12
- 'Empty rule'
13
- end
14
10
  end
15
11
  end
@@ -7,7 +7,12 @@ module SCSSLint
7
7
  id_sel = seq.members.find { |simple| simple.is_a?(Sass::Selector::Id) }
8
8
  return unless id_sel
9
9
 
10
- if seq.members.any? { |simple| !simple.is_a?(Sass::Selector::Id) && !simple.is_a?(Sass::Selector::Pseudo) }
10
+ can_be_simplified = seq.members.any? do |simple|
11
+ !simple.is_a?(Sass::Selector::Id) &&
12
+ !simple.is_a?(Sass::Selector::Pseudo)
13
+ end
14
+
15
+ if can_be_simplified
11
16
  add_lint(seq, "Selector `#{seq}` can be simplified to `#{id_sel}`, " <<
12
17
  'since IDs should be uniquely identifying')
13
18
  end
@@ -44,26 +44,26 @@ module SCSSLint
44
44
  end
45
45
 
46
46
  # Define node types that increase indentation level
47
- alias :visit_directive :check_and_visit_children
48
- alias :visit_each :check_and_visit_children
49
- alias :visit_for :check_and_visit_children
50
- alias :visit_function :check_and_visit_children
51
- alias :visit_media :check_and_visit_children
52
- alias :visit_mixin :check_and_visit_children
53
- alias :visit_mixindef :check_and_visit_children
54
- alias :visit_prop :check_and_visit_children
55
- alias :visit_rule :check_and_visit_children
56
- alias :visit_supports :check_and_visit_children
57
- alias :visit_while :check_and_visit_children
47
+ alias_method :visit_directive, :check_and_visit_children
48
+ alias_method :visit_each, :check_and_visit_children
49
+ alias_method :visit_for, :check_and_visit_children
50
+ alias_method :visit_function, :check_and_visit_children
51
+ alias_method :visit_media, :check_and_visit_children
52
+ alias_method :visit_mixin, :check_and_visit_children
53
+ alias_method :visit_mixindef, :check_and_visit_children
54
+ alias_method :visit_prop, :check_and_visit_children
55
+ alias_method :visit_rule, :check_and_visit_children
56
+ alias_method :visit_supports, :check_and_visit_children
57
+ alias_method :visit_while, :check_and_visit_children
58
58
 
59
59
  # Define node types to check indentation of (notice comments are left out)
60
- alias :visit_charset :check_indentation
61
- alias :visit_content :check_indentation
62
- alias :visit_cssimport :check_indentation
63
- alias :visit_extend :check_indentation
64
- alias :visit_import :check_indentation
65
- alias :visit_return :check_indentation
66
- alias :visit_variable :check_indentation
67
- alias :visit_warn :check_indentation
60
+ alias_method :visit_charset, :check_indentation
61
+ alias_method :visit_content, :check_indentation
62
+ alias_method :visit_cssimport, :check_indentation
63
+ alias_method :visit_extend, :check_indentation
64
+ alias_method :visit_import, :check_indentation
65
+ alias_method :visit_return, :check_indentation
66
+ alias_method :visit_variable, :check_indentation
67
+ alias_method :visit_warn, :check_indentation
68
68
  end
69
69
  end
@@ -8,11 +8,10 @@ module SCSSLint
8
8
  # every word boundary (so %placeholder becomes ['%', 'placeholder']).
9
9
  selector = node.selector.join
10
10
 
11
- add_lint(node) unless selector.start_with?('%')
12
- end
13
-
14
- def description
15
- 'Always use placeholder selectors (e.g. %some-placeholder) with @extend'
11
+ unless selector.start_with?('%')
12
+ add_lint(node,
13
+ 'Prefer using placeholder selectors (e.g. %some-placeholder) with @extend')
14
+ end
16
15
  end
17
16
  end
18
17
  end
@@ -10,18 +10,19 @@ module SCSSLint
10
10
  child.name.all? { |part| part.is_a?(String) }
11
11
  end
12
12
 
13
- sortable_prop_names = sortable_props.map { |child| child.name.join }
13
+ sortable_prop_info = sortable_props
14
+ .map { |child| child.name.join }
15
+ .map do |name|
16
+ /^(?<vendor>-\w+(-osx)?-)?(?<property>.+)/ =~ name
17
+ { name: name, vendor: vendor, property: property }
18
+ end
14
19
 
15
- sorted_prop_names = sortable_prop_names.map do |name|
16
- /^(?<vendor>-\w+(-osx)?-)?(?<property>.+)/ =~ name
17
- { name: name, vendor: vendor, property: property }
18
- end.sort { |a, b| compare_properties(a, b) }
19
- .map { |fields| fields[:name] }
20
+ sorted_props = sortable_prop_info
21
+ .sort { |a, b| compare_properties(a, b) }
20
22
 
21
- sorted_prop_names.each_with_index do |name, index|
22
- # Report the first property out of order with the sorted list
23
- if name != sortable_prop_names[index]
24
- add_lint(sortable_props[index])
23
+ sorted_props.each_with_index do |prop, index|
24
+ if prop != sortable_prop_info[index]
25
+ add_lint(sortable_props[index], MESSAGE)
25
26
  break
26
27
  end
27
28
  end
@@ -29,13 +30,11 @@ module SCSSLint
29
30
  yield # Continue linting children
30
31
  end
31
32
 
32
- def description
33
- 'Properties should be sorted in order, with ' <<
34
- 'vendor-prefixed extensions before the standardized CSS property'
35
- end
36
-
37
33
  private
38
34
 
35
+ MESSAGE = 'Properties should be sorted in order, with vendor-prefixed ' <<
36
+ 'extensions before the standardized CSS property'
37
+
39
38
  # Compares two properties which can contain a vendor prefix. It allows for a
40
39
  # sort order like:
41
40
  #
@@ -52,23 +51,31 @@ module SCSSLint
52
51
  # are ordered amongst themselves by vendor prefix.
53
52
  def compare_properties(a, b)
54
53
  if a[:property] == b[:property]
55
- if a[:vendor] && b[:vendor]
56
- a[:vendor] <=> b[:vendor]
57
- elsif a[:vendor]
58
- -1
59
- elsif b[:vendor]
60
- 1
61
- else
62
- 0
63
- end
54
+ compare_by_vendor(a, b)
64
55
  else
65
56
  if config['order']
66
- (config['order'].index(a[:property]) || Float::INFINITY) <=>
67
- (config['order'].index(b[:property]) || Float::INFINITY)
57
+ compare_by_order(a, b, config['order'])
68
58
  else
69
59
  a[:property] <=> b[:property]
70
60
  end
71
61
  end
72
62
  end
63
+
64
+ def compare_by_vendor(a, b)
65
+ if a[:vendor] && b[:vendor]
66
+ a[:vendor] <=> b[:vendor]
67
+ elsif a[:vendor]
68
+ -1
69
+ elsif b[:vendor]
70
+ 1
71
+ else
72
+ 0
73
+ end
74
+ end
75
+
76
+ def compare_by_order(a, b, order)
77
+ (order.index(a[:property]) || Float::INFINITY) <=>
78
+ (order.index(b[:property]) || Float::INFINITY)
79
+ end
73
80
  end
74
81
  end
@@ -63,19 +63,27 @@ module SCSSLint
63
63
  end
64
64
 
65
65
  def condensed_shorthand(top, right, bottom = nil, left = nil)
66
- if top == right && right == bottom && bottom == left
66
+ if can_condense_to_one_value(top, right, bottom, left)
67
67
  [top]
68
- elsif top == right && bottom.nil? && left.nil?
69
- [top]
70
- elsif top == bottom && right == left
68
+ elsif can_condense_to_two_values(top, right, bottom, left)
71
69
  [top, right]
72
- elsif top == bottom && left.nil?
73
- top == right ? [top] : [top, right]
74
70
  elsif right == left
75
71
  [top, right, bottom]
76
72
  else
77
73
  [top, right, bottom, left].compact
78
74
  end
79
75
  end
76
+
77
+ def can_condense_to_one_value(top, right, bottom, left)
78
+ if top == right
79
+ top == bottom && (bottom == left || left.nil?) ||
80
+ bottom.nil? && left.nil?
81
+ end
82
+ end
83
+
84
+ def can_condense_to_two_values(top, right, bottom, left)
85
+ top == bottom && right == left ||
86
+ top == bottom && left.nil? && top != right
87
+ end
80
88
  end
81
89
  end
@@ -6,13 +6,9 @@ module SCSSLint
6
6
  def visit_root(node)
7
7
  engine.lines.each_with_index do |line, index|
8
8
  line.scan /[^"#](?<![^ ] )\{/ do |match|
9
- @lints << Lint.new(engine.filename, index + 1, description)
9
+ add_lint(index + 1, 'Opening curly braces ({) should be preceded by one space')
10
10
  end
11
11
  end
12
12
  end
13
-
14
- def description
15
- 'Opening curly braces ({) should be preceded by one space'
16
- end
17
13
  end
18
14
  end
@@ -53,8 +53,8 @@ module SCSSLint
53
53
  add_lint(node, 'Prefer single quoted strings') if string !~ /'/
54
54
  else
55
55
  if string =~ /(?<! \\) \\"/x && string !~ /'/
56
- add_lint(node, 'Use single-quoted strings when writing double quotes ' +
57
- 'to avoid having to escape the double quotes')
56
+ add_lint(node, 'Use single-quoted strings when writing double ' <<
57
+ 'quotes to avoid having to escape the double quotes')
58
58
  end
59
59
  end
60
60
  end
@@ -62,8 +62,8 @@ module SCSSLint
62
62
  def check_single_quotes(node, string)
63
63
  if config['style'] == 'single_quotes'
64
64
  if string =~ /(?<! \\) \\'/x && string !~ /"/
65
- add_lint(node, 'Use double-quoted strings when writing single quotes ' +
66
- 'to avoid having to escape the single quotes')
65
+ add_lint(node, 'Use double-quoted strings when writing single ' <<
66
+ 'quotes to avoid having to escape the single quotes')
67
67
  elsif string =~ /(?<! \\) \\"/x
68
68
  add_lint(node, "Don't escape double quotes in single-quoted strings")
69
69
  end
@@ -0,0 +1,55 @@
1
+ require 'uri'
2
+
3
+ module SCSSLint
4
+ # Checks the format of URLs for unnecessary protocols or domains.
5
+ class Linter::UrlFormat < Linter
6
+ include LinterRegistry
7
+
8
+ def visit_script_funcall(node)
9
+ return unless node.name == 'url'
10
+
11
+ if url_string?(node.args[0])
12
+ url = node.args[0].value.value.to_s
13
+ check_url(url, node)
14
+ end
15
+
16
+ yield
17
+ end
18
+
19
+ def visit_prop(node)
20
+ if url_literal?(node.value)
21
+ url = node.value.to_sass.gsub(/^url\((.*)\)$/, '\\1')
22
+ check_url(url, node)
23
+ end
24
+
25
+ yield
26
+ end
27
+
28
+ private
29
+
30
+ def url_literal?(prop_value)
31
+ return unless prop_value.is_a?(Sass::Script::Tree::Literal)
32
+ return unless prop_value.value.is_a?(Sass::Script::Value::String)
33
+ return unless prop_value.value.type == :identifier
34
+
35
+ prop_value.to_sass.match(/^url\(/)
36
+ end
37
+
38
+ def url_string?(arg)
39
+ return unless arg.is_a?(Sass::Script::Tree::Literal)
40
+ return unless arg.value.is_a?(Sass::Script::Value::String)
41
+
42
+ arg.value.type == :string
43
+ end
44
+
45
+ def check_url(url, node)
46
+ uri = URI(url)
47
+
48
+ if uri.scheme || uri.host
49
+ add_lint(node, "URL `#{url}` should not contain protocol or domain")
50
+ end
51
+ rescue URI::Error => ex
52
+ add_lint(node, "Invalid URL `#{url}`: #{ex}")
53
+ end
54
+ end
55
+ end
@@ -1,13 +1,11 @@
1
- require 'colorize'
2
-
3
1
  module SCSSLint
4
2
  # Reports a single line per lint.
5
3
  class Reporter::DefaultReporter < Reporter
6
4
  def report_lints
7
5
  if lints.any?
8
6
  lints.map do |lint|
9
- type = lint.error? ? '[E]'.red : '[W]'.yellow
10
- "#{lint.filename.cyan}:" << "#{lint.line}".magenta <<
7
+ type = lint.error? ? '[E]'.color(:red) : '[W]'.color(:yellow)
8
+ "#{lint.filename.color(:cyan)}:" << "#{lint.line}".color(:magenta) <<
11
9
  " #{type} #{lint.description}"
12
10
  end.join("\n") + "\n"
13
11
  end
@@ -1,4 +1,4 @@
1
1
  # Defines the gem version.
2
2
  module SCSSLint
3
- VERSION = '0.20.3'
3
+ VERSION = '0.21.0'
4
4
  end
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.20.3
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Causes Engineering
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-27 00:00:00.000000000 Z
12
+ date: 2014-03-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: colorize
15
+ name: rainbow
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '='
18
+ - - ~>
19
19
  - !ruby/object:Gem::Version
20
- version: 0.5.8
20
+ version: '2.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '='
25
+ - - ~>
26
26
  - !ruby/object:Gem::Version
27
- version: 0.5.8
27
+ version: '2.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: sass
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -43,30 +43,30 @@ dependencies:
43
43
  name: nokogiri
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '='
46
+ - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: 1.6.1
48
+ version: 1.6.0
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '='
53
+ - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 1.6.1
55
+ version: 1.6.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '='
60
+ - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: 2.14.1
62
+ version: '2.0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - '='
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 2.14.1
69
+ version: '2.0'
70
70
  description: Configurable tool for writing clean and consistent SCSS
71
71
  email:
72
72
  - eng@causes.com
@@ -78,55 +78,56 @@ extra_rdoc_files: []
78
78
  files:
79
79
  - config/default.yml
80
80
  - data/properties.txt
81
- - lib/scss_lint/version.rb
81
+ - lib/scss_lint/cli.rb
82
+ - lib/scss_lint/config.rb
82
83
  - lib/scss_lint/constants.rb
83
- - lib/scss_lint/utils.rb
84
- - lib/scss_lint/reporter/files_reporter.rb
85
- - lib/scss_lint/reporter/xml_reporter.rb
86
- - lib/scss_lint/reporter/default_reporter.rb
87
- - lib/scss_lint/runner.rb
88
- - lib/scss_lint/reporter.rb
84
+ - lib/scss_lint/engine.rb
89
85
  - lib/scss_lint/lint.rb
90
- - lib/scss_lint/linter.rb
91
- - lib/scss_lint/rake_task.rb
92
- - lib/scss_lint/selector_visitor.rb
93
- - lib/scss_lint/sass/tree.rb
94
- - lib/scss_lint/sass/script.rb
95
- - lib/scss_lint/config.rb
96
- - lib/scss_lint/linter/compass.rb
97
- - lib/scss_lint/linter/space_after_comma.rb
98
- - lib/scss_lint/linter/space_before_brace.rb
86
+ - lib/scss_lint/linter/border_zero.rb
99
87
  - lib/scss_lint/linter/capitalization_in_selector.rb
100
- - lib/scss_lint/linter/indentation.rb
101
- - lib/scss_lint/linter/trailing_semicolon_after_property_value.rb
102
- - lib/scss_lint/linter/shorthand.rb
103
- - lib/scss_lint/linter/id_with_extraneous_selector.rb
104
- - lib/scss_lint/linter/empty_line_between_blocks.rb
105
- - lib/scss_lint/linter/declaration_order.rb
106
- - lib/scss_lint/linter/zero_unit.rb
107
- - lib/scss_lint/linter/placeholder_in_extend.rb
108
- - lib/scss_lint/linter/selector_depth.rb
88
+ - lib/scss_lint/linter/color_keyword.rb
89
+ - lib/scss_lint/linter/comment.rb
109
90
  - lib/scss_lint/linter/compass/property_with_mixin.rb
110
- - lib/scss_lint/linter/space_after_property_name.rb
111
- - lib/scss_lint/linter/property_spelling.rb
112
- - lib/scss_lint/linter/url_quotes.rb
113
- - lib/scss_lint/linter/name_format.rb
114
- - lib/scss_lint/linter/space_between_parens.rb
115
- - lib/scss_lint/linter/border_zero.rb
116
- - lib/scss_lint/linter/space_after_property_colon.rb
91
+ - lib/scss_lint/linter/compass.rb
117
92
  - lib/scss_lint/linter/debug_statement.rb
93
+ - lib/scss_lint/linter/declaration_order.rb
118
94
  - lib/scss_lint/linter/duplicate_property.rb
119
- - lib/scss_lint/linter/property_sort_order.rb
95
+ - lib/scss_lint/linter/empty_line_between_blocks.rb
96
+ - lib/scss_lint/linter/empty_rule.rb
120
97
  - lib/scss_lint/linter/hex_format.rb
121
- - lib/scss_lint/linter/color_keyword.rb
122
- - lib/scss_lint/linter/string_quotes.rb
98
+ - lib/scss_lint/linter/id_with_extraneous_selector.rb
99
+ - lib/scss_lint/linter/indentation.rb
123
100
  - lib/scss_lint/linter/leading_zero.rb
124
- - lib/scss_lint/linter/comment.rb
125
- - lib/scss_lint/linter/empty_rule.rb
101
+ - lib/scss_lint/linter/name_format.rb
102
+ - lib/scss_lint/linter/placeholder_in_extend.rb
103
+ - lib/scss_lint/linter/property_sort_order.rb
104
+ - lib/scss_lint/linter/property_spelling.rb
105
+ - lib/scss_lint/linter/selector_depth.rb
106
+ - lib/scss_lint/linter/shorthand.rb
126
107
  - lib/scss_lint/linter/single_line_per_selector.rb
127
- - lib/scss_lint/cli.rb
128
- - lib/scss_lint/engine.rb
108
+ - lib/scss_lint/linter/space_after_comma.rb
109
+ - lib/scss_lint/linter/space_after_property_colon.rb
110
+ - lib/scss_lint/linter/space_after_property_name.rb
111
+ - lib/scss_lint/linter/space_before_brace.rb
112
+ - lib/scss_lint/linter/space_between_parens.rb
113
+ - lib/scss_lint/linter/string_quotes.rb
114
+ - lib/scss_lint/linter/trailing_semicolon_after_property_value.rb
115
+ - lib/scss_lint/linter/url_format.rb
116
+ - lib/scss_lint/linter/url_quotes.rb
117
+ - lib/scss_lint/linter/zero_unit.rb
118
+ - lib/scss_lint/linter.rb
129
119
  - lib/scss_lint/linter_registry.rb
120
+ - lib/scss_lint/rake_task.rb
121
+ - lib/scss_lint/reporter/default_reporter.rb
122
+ - lib/scss_lint/reporter/files_reporter.rb
123
+ - lib/scss_lint/reporter/xml_reporter.rb
124
+ - lib/scss_lint/reporter.rb
125
+ - lib/scss_lint/runner.rb
126
+ - lib/scss_lint/sass/script.rb
127
+ - lib/scss_lint/sass/tree.rb
128
+ - lib/scss_lint/selector_visitor.rb
129
+ - lib/scss_lint/utils.rb
130
+ - lib/scss_lint/version.rb
130
131
  - lib/scss_lint.rb
131
132
  - bin/scss-lint
132
133
  homepage: https://github.com/causes/scss-lint