scss-lint 0.27.0 → 0.28.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: 09f5144a404feb287b0142ae57abdc1fba664079
4
- data.tar.gz: 8d199cc76993c5b93a99e0ece1e91e929b052d2f
3
+ metadata.gz: 42f28b5047a9fc0063a953cfe84bf4d7e61939ae
4
+ data.tar.gz: dbf4ea16dadcdff7fde653b7433478085bf80260
5
5
  SHA512:
6
- metadata.gz: 85c7e8f492803782ea48d4da4ed4981c1ed516e3dce5dfb2b7baef837986b7b27804b8294f10b4d640fd6898d64394ce8a8f2b30625b988e991b5d23417f22e0
7
- data.tar.gz: e45e2bf8e0ec689a8b1561afc560ac9c5a960a560e3a8d4f40abe5b0f0a27669ed1eb9af3344a5d36912c2d1d3bc559fb19ebd06e50af3776b3d9828d2e5821d
6
+ metadata.gz: 0354b7af1ee236a8add0483e6adc97751e687b1f19850cc248cc94a9200fa28c5a1f84244b35b01a812a7f48a6c25056fdb07508d9e3d9b55ba928b7daa2a998
7
+ data.tar.gz: 321fbeeee64c9d02cd4dddd2176ac1b546f71a4f4b66bb861d089de1490316ffe0ce804395ff02727b78a8c4908fc1cf2c7c30ca198147ec5f3f828af3406efa
@@ -36,7 +36,7 @@ module SCSSLint
36
36
  private
37
37
 
38
38
  def check(node, selector_name = nil)
39
- name = node.name.join
39
+ name = node.name
40
40
 
41
41
  return if @ignored_names.include?(name)
42
42
  return unless name =~ /[A-Z]/
@@ -3,37 +3,25 @@ module SCSSLint
3
3
  class Linter::SingleLinePerSelector < Linter
4
4
  include LinterRegistry
5
5
 
6
- def visit_rule(node)
7
- add_lint(node, MESSAGE) if invalid_comma_placement?(node)
8
- yield # Continue linting children
9
- end
10
-
11
- private
12
-
13
6
  MESSAGE = 'Each selector in a comma sequence should be on its own line'
14
7
 
15
- # A comma is invalid if it starts the line or is not the end of the line
16
- def invalid_comma_placement?(node)
17
- # We must ignore selectors with interpolation, since there's no way to
18
- # tell if the overall selector is valid since the interpolation could
19
- # insert commas incorrectly. Thus we simply ignore.
20
- return unless node.rule.all? { |item| item.is_a?(String) }
8
+ def visit_comma_sequence(node)
9
+ return unless node.members.count > 1
21
10
 
22
- normalize_spacing(condense_to_string(node.rule)) =~ /\n,|,[^\n]/
23
- end
24
-
25
- # Since RuleNode.rule returns an array containing both String and
26
- # Sass::Script::Nodes, we need to condense it into a single string that we
27
- # can run a regex against.
28
- def condense_to_string(sequence_list)
29
- sequence_list.select { |item| item.is_a?(String) }.inject(:+)
30
- end
11
+ if node.members[0].members[1] == "\n"
12
+ # Comma is on its own line
13
+ add_lint(node, MESSAGE)
14
+ end
31
15
 
32
- # Removes extra spacing between lines in a comma-separated sequence due to
33
- # comments being removed in the parse phase. This makes it easy to check if
34
- # a comma is where it belongs.
35
- def normalize_spacing(string_sequence)
36
- string_sequence.gsub(/,[^\S\n]*\n\s*/, ",\n")
16
+ node.members[1..-1].each_with_index do |sequence, index|
17
+ if sequence.members[0] != "\n"
18
+ # Next sequence doesn't reside on its own line
19
+ add_lint(node.line + index, MESSAGE)
20
+ elsif sequence.members[1] == "\n"
21
+ # Comma is on its own line
22
+ add_lint(node.line + index, MESSAGE)
23
+ end
24
+ end
37
25
  end
38
26
  end
39
27
  end
@@ -3,6 +3,17 @@ module SCSSLint
3
3
  class Linter::StringQuotes < Linter
4
4
  include LinterRegistry
5
5
 
6
+ def visit_script_stringinterpolation(node)
7
+ # We can't statically determine what the resultant string looks like when
8
+ # string interpolation is used, e.g. "one #{$var} three" could be a very
9
+ # different string depending on $var = `'" + "'` or $var = `two`.
10
+ #
11
+ # Thus we manually skip the substrings in the string interpolation and
12
+ # visit the expressions in the interpolation itself.
13
+ node.children.reject { |child| child.is_a?(Sass::Script::Tree::Literal) }
14
+ .each { |child| visit(child) }
15
+ end
16
+
6
17
  def visit_script_string(node)
7
18
  check_quotes(node, source_from_range(node.source_range))
8
19
  end
@@ -38,7 +38,7 @@ module SCSSLint
38
38
  first = simple_sequence.members.first
39
39
  simple_sequence.members.size == 1 &&
40
40
  first.is_a?(Sass::Selector::Parent) &&
41
- first.suffix.empty? # Ignore concatenated selectors, like `&-something`
41
+ first.suffix.nil? # Ignore concatenated selectors, like `&-something`
42
42
  end
43
43
  end
44
44
  end
@@ -1,4 +1,4 @@
1
1
  # Defines the gem version.
2
2
  module SCSSLint
3
- VERSION = '0.27.0'
3
+ VERSION = '0.28.0'
4
4
  end
@@ -29,7 +29,7 @@ describe SCSSLint::Linter::SingleLinePerSelector do
29
29
  }
30
30
  CSS
31
31
 
32
- it { should report_lint line: 1 }
32
+ it { should report_lint line: 3 }
33
33
  end
34
34
 
35
35
  context 'when commas are not at the end of the line' do
@@ -64,7 +64,7 @@ describe SCSSLint::Linter::SingleLinePerSelector do
64
64
  }
65
65
  CSS
66
66
 
67
- it { should report_lint line: 2 }
67
+ it { should report_lint line: 4 }
68
68
  end
69
69
 
70
70
  context 'when rule contains interpolated selectors' do
@@ -218,6 +218,26 @@ describe SCSSLint::Linter::StringQuotes do
218
218
 
219
219
  it { should_not report_lint }
220
220
  end
221
+
222
+ context 'and contains interpolation inside a substring with single quotes' do
223
+ let(:css) { <<-CSS }
224
+ p {
225
+ content: "<svg width='\#{$something}'>";
226
+ }
227
+ CSS
228
+
229
+ it { should_not report_lint }
230
+ end
231
+
232
+ context 'and contains a single-quoted string inside interpolation' do
233
+ let(:css) { <<-CSS }
234
+ p {
235
+ content: "<svg width='\#{func('hello')}'>";
236
+ }
237
+ CSS
238
+
239
+ it { should report_lint }
240
+ end
221
241
  end
222
242
 
223
243
  context 'and string is written with double quotes' do
@@ -36,7 +36,7 @@ describe SCSSLint::SelectorVisitor do
36
36
  context 'when visitor defines visit_attribute' do
37
37
  class TestAttributeVisitor < TrackingSelectorVisitor
38
38
  def visit_attribute(attribute)
39
- @node_order << attribute.name.join
39
+ @node_order << attribute.name
40
40
  end
41
41
  end
42
42
 
@@ -56,7 +56,7 @@ describe SCSSLint::SelectorVisitor do
56
56
  context 'when visitor defines visit_class' do
57
57
  class TestClassVisitor < TrackingSelectorVisitor
58
58
  def visit_class(klass)
59
- @node_order << klass.name.join
59
+ @node_order << klass.name
60
60
  end
61
61
  end
62
62
 
@@ -76,7 +76,7 @@ describe SCSSLint::SelectorVisitor do
76
76
  context 'when visitor defines visit_element' do
77
77
  class TestElementVisitor < TrackingSelectorVisitor
78
78
  def visit_element(element)
79
- @node_order << element.name.join
79
+ @node_order << element.name
80
80
  end
81
81
  end
82
82
 
@@ -96,7 +96,7 @@ describe SCSSLint::SelectorVisitor do
96
96
  context 'when visitor defines visit_id' do
97
97
  class TestIdVisitor < TrackingSelectorVisitor
98
98
  def visit_id(id)
99
- @node_order << id.name.join
99
+ @node_order << id.name
100
100
  end
101
101
  end
102
102
 
@@ -137,7 +137,7 @@ describe SCSSLint::SelectorVisitor do
137
137
  context 'when visitor defines visit_placeholder' do
138
138
  class TestPlaceholderVisitor < TrackingSelectorVisitor
139
139
  def visit_placeholder(placeholder)
140
- @node_order << placeholder.name.join
140
+ @node_order << placeholder.name
141
141
  end
142
142
  end
143
143
 
@@ -156,7 +156,7 @@ describe SCSSLint::SelectorVisitor do
156
156
  context 'when visitor defines visit_pseudo' do
157
157
  class TestPseudoVisitor < TrackingSelectorVisitor
158
158
  def visit_pseudo(pseudo)
159
- @node_order << pseudo.name.join
159
+ @node_order << pseudo.name
160
160
  end
161
161
  end
162
162
 
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.27.0
4
+ version: 0.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Causes Engineering
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-19 00:00:00.000000000 Z
12
+ date: 2014-09-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rainbow
@@ -31,20 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - ~>
33
33
  - !ruby/object:Gem::Version
34
- version: 3.3.0
35
- - - '>='
36
- - !ruby/object:Gem::Version
37
- version: 3.3.7
34
+ version: 3.4.0
38
35
  type: :runtime
39
36
  prerelease: false
40
37
  version_requirements: !ruby/object:Gem::Requirement
41
38
  requirements:
42
39
  - - ~>
43
40
  - !ruby/object:Gem::Version
44
- version: 3.3.0
45
- - - '>='
46
- - !ruby/object:Gem::Version
47
- version: 3.3.7
41
+ version: 3.4.0
48
42
  - !ruby/object:Gem::Dependency
49
43
  name: nokogiri
50
44
  requirement: !ruby/object:Gem::Requirement
@@ -79,14 +73,14 @@ dependencies:
79
73
  requirements:
80
74
  - - '='
81
75
  - !ruby/object:Gem::Version
82
- version: 0.24.1
76
+ version: 0.25.0
83
77
  type: :development
84
78
  prerelease: false
85
79
  version_requirements: !ruby/object:Gem::Requirement
86
80
  requirements:
87
81
  - - '='
88
82
  - !ruby/object:Gem::Version
89
- version: 0.24.1
83
+ version: 0.25.0
90
84
  description: Configurable tool for writing clean and consistent SCSS
91
85
  email:
92
86
  - eng@causes.com
@@ -295,3 +289,4 @@ test_files:
295
289
  - spec/support/matchers/report_lint.rb
296
290
  - spec/support/isolated_environment.rb
297
291
  - spec/spec_helper.rb
292
+ has_rdoc: