scss-lint 0.31.0 → 0.32.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: 67663cf8293192d8f0962e8fe04c86d2b2dafddb
4
- data.tar.gz: 92271e0c11e57a9088be1bd94437b7c07c31e205
3
+ metadata.gz: 78eefba7814228e097ecd728f37ec53bd3a9c98b
4
+ data.tar.gz: 21356e0c75ed328ac007f0ae9841d0e30a434fbd
5
5
  SHA512:
6
- metadata.gz: 7048b50c46c68b5d7cae9dea14a37791e550a40092b7d3443d266076fb5bfebf1d858b66eb8f6d8c147a75f54deafcbc3d72eb03740ed51f1b79a9406e925217
7
- data.tar.gz: e89a5be79049adc3e1aa69e761a961ba711cab010843a54031e7ecdfc546c12c5647ff7b407f875be6577c3d22e817976cdb71fd39f3dc0d7f4bd045e2dfdca1
6
+ metadata.gz: 919f35cdcaa899ca549c87e549f653c89d0da5241bf45127d85ab89f9a76186df21432af47fc080827c7c9436aa915171aa70320faf859189d7ca051197d0c84
7
+ data.tar.gz: c29ec8826b699855207837b10ae2679707b599a5a1db8c06c5579f6631e989e385bf545453498f9ef37408602e11201ee6d3e9658f3998fa8b5557bf10b6c57d
data/lib/scss_lint/cli.rb CHANGED
@@ -31,6 +31,7 @@ module SCSSLint
31
31
 
32
32
  def act_on_options(options)
33
33
  load_required_paths(options)
34
+ load_reporters(options)
34
35
 
35
36
  if options[:help]
36
37
  print_help(options)
@@ -176,6 +177,18 @@ module SCSSLint
176
177
  end
177
178
  end
178
179
 
180
+ def load_reporters(options)
181
+ options[:reporters].map! do |reporter_name, output_file|
182
+ begin
183
+ reporter = SCSSLint::Reporter.const_get(reporter_name + 'Reporter')
184
+ rescue NameError
185
+ raise SCSSLint::Exceptions::InvalidCLIOption,
186
+ "Invalid output format specified: #{reporter_name}"
187
+ end
188
+ [reporter, output_file]
189
+ end
190
+ end
191
+
179
192
  def print_formatters
180
193
  puts 'Installed formatters:'
181
194
 
@@ -3,6 +3,8 @@ module SCSSLint
3
3
  class Linter::BangFormat < Linter
4
4
  include LinterRegistry
5
5
 
6
+ STOPPING_CHARACTERS = ['!', "'", '"', nil]
7
+
6
8
  def visit_prop(node)
7
9
  return unless node.to_sass.include?('!')
8
10
  return unless check_spacing(node)
@@ -21,9 +23,8 @@ module SCSSLint
21
23
  # stop at quotation marks to protect against linting !'s within strings
22
24
  # (e.g. `content`)
23
25
  def find_bang_offset(range)
24
- stopping_characters = ['!', '\'', '"']
25
26
  offset = 0
26
- offset -= 1 until stopping_characters.include?(character_at(range.end_pos, offset))
27
+ offset -= 1 until STOPPING_CHARACTERS.include?(character_at(range.end_pos, offset))
27
28
  offset
28
29
  end
29
30
 
@@ -37,29 +37,28 @@ module SCSSLint
37
37
  return if @ignored_names.include?(name)
38
38
  return unless violation = violated_convention(name, type)
39
39
 
40
- add_lint(node, "Selector `#{name}` should be " \
41
- "written #{violation[:explanation]}")
40
+ add_lint(node, "Selector `#{name}` #{violation[:explanation]}")
42
41
  end
43
42
 
44
43
  CONVENTIONS = {
45
44
  'hyphenated_lowercase' => {
46
- explanation: 'in lowercase with hyphens',
45
+ explanation: 'should be written in lowercase with hyphens',
47
46
  validator: ->(name) { name !~ /[^\-a-z0-9]/ },
48
47
  },
49
48
  'snake_case' => {
50
- explanation: 'in lowercase with underscores',
49
+ explanation: 'should be written in lowercase with underscores',
51
50
  validator: ->(name) { name !~ /[^_a-z0-9]/ },
52
51
  },
53
52
  'camel_case' => {
54
- explanation: 'has no spaces with capitalized words except first',
53
+ explanation: 'should be written in camelCase format',
55
54
  validator: ->(name) { name =~ /^[a-z][a-zA-Z0-9]*$/ },
56
55
  },
57
56
  'hyphenated_BEM' => {
58
- explanation: 'in hyphenated BEM (Block Element Modifier) format',
57
+ explanation: 'should be written in hyphenated BEM (Block Element Modifier) format',
59
58
  validator: ->(name) { name !~ /[A-Z]|-{3}|_{3}|[^_]_[^_]/ },
60
59
  },
61
60
  'BEM' => {
62
- explanation: 'in BEM (Block Element Modifier) format',
61
+ explanation: 'should be written in BEM (Block Element Modifier) format',
63
62
  validator: lambda do |name|
64
63
  name =~ /
65
64
  ^[a-z]([-]?[a-z0-9]+)*
@@ -77,7 +76,7 @@ module SCSSLint
77
76
  'hyphenated_lowercase'
78
77
 
79
78
  convention = CONVENTIONS[convention_name] || {
80
- explanation: "must match regex /#{convention_name}/",
79
+ explanation: "should match regex /#{convention_name}/",
81
80
  validator: ->(name) { name =~ /#{convention_name}/ }
82
81
  }
83
82
 
@@ -3,7 +3,7 @@ require 'optparse'
3
3
  module SCSSLint
4
4
  # Handles option parsing for the command line application.
5
5
  class Options
6
- DEFAULT_REPORTER = [SCSSLint::Reporter::DefaultReporter, :stdout]
6
+ DEFAULT_REPORTER = ['Default', :stdout]
7
7
 
8
8
  # Parses command line options into an options hash.
9
9
  #
@@ -48,14 +48,10 @@ module SCSSLint
48
48
 
49
49
  # @param format [String]
50
50
  def define_output_format(format)
51
- unless @options[:reporters] == [DEFAULT_REPORTER] && format == 'Default'
52
- @options[:reporters].reject! { |i| i == DEFAULT_REPORTER }
53
- reporter = SCSSLint::Reporter.const_get(format + 'Reporter')
54
- @options[:reporters] << [reporter, :stdout]
55
- end
56
- rescue NameError
57
- raise SCSSLint::Exceptions::InvalidCLIOption,
58
- "Invalid output format specified: #{format}"
51
+ return if @options[:reporters] == [DEFAULT_REPORTER] && format == 'Default'
52
+
53
+ @options[:reporters].reject! { |i| i == DEFAULT_REPORTER }
54
+ @options[:reporters] << [format, :stdout]
59
55
  end
60
56
 
61
57
  def add_linter_options(parser)
@@ -29,10 +29,7 @@ module SCSSLint
29
29
  require 'scss_lint'
30
30
  require 'scss_lint/cli'
31
31
 
32
- CLI.new([]).tap do |cli|
33
- cli.parse_arguments
34
- cli.run
35
- end
32
+ CLI.new.run([])
36
33
  rescue SystemExit => ex
37
34
  if ex.status == CLI::EXIT_CODES[:data]
38
35
  abort('scss-lint found lints')
@@ -1,4 +1,4 @@
1
1
  # Defines the gem version.
2
2
  module SCSSLint
3
- VERSION = '0.31.0'
3
+ VERSION = '0.32.0'
4
4
  end
@@ -96,4 +96,16 @@ describe SCSSLint::Linter::BangFormat do
96
96
 
97
97
  it { should_not report_lint }
98
98
  end
99
+
100
+ context 'when !<word> is not followed by a semicolon' do
101
+ let(:css) { <<-CSS }
102
+ .class {
103
+ margin: 0 !important
104
+ }
105
+ CSS
106
+
107
+ it 'does not loop forever' do
108
+ subject.should_not report_lint
109
+ end
110
+ end
99
111
  end
@@ -654,7 +654,6 @@ describe SCSSLint::Linter::SpaceBeforeBrace do
654
654
  end
655
655
 
656
656
  context 'when using #{} interpolation' do
657
-
658
657
  context 'and the `style` option is `space`' do
659
658
  let(:css) { <<-CSS }
660
659
  @mixin test-mixin($class, $prop, $pixels) {
@@ -769,7 +768,6 @@ describe SCSSLint::Linter::SpaceBeforeBrace do
769
768
 
770
769
  it { should_not report_lint }
771
770
  end
772
-
773
771
  end
774
772
 
775
773
  context 'when curly brace is on own line' do
@@ -15,7 +15,7 @@ describe SCSSLint::Options do
15
15
  end
16
16
 
17
17
  it 'specifies the DefaultReporter by default' do
18
- subject[:reporters].first.should include SCSSLint::Reporter::DefaultReporter
18
+ subject[:reporters].first.should include 'Default'
19
19
  end
20
20
 
21
21
  it 'outputs to STDOUT' do
@@ -30,13 +30,5 @@ describe SCSSLint::Options do
30
30
  expect { subject }.to raise_error SCSSLint::Exceptions::InvalidCLIOption
31
31
  end
32
32
  end
33
-
34
- context 'when a non-existent reporter is specified' do
35
- let(:args) { %w[--format NonExistentReporter] }
36
-
37
- it 'raises an error' do
38
- expect { subject }.to raise_error SCSSLint::Exceptions::InvalidCLIOption
39
- end
40
- end
41
33
  end
42
34
  end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'scss_lint/rake_task'
3
+
4
+ describe SCSSLint::RakeTask do
5
+ before do
6
+ # Silence console output
7
+ STDOUT.stub(:write)
8
+ end
9
+
10
+ describe '#run' do
11
+ subject do
12
+ SCSSLint::RakeTask.new
13
+ Rake::Task['scss_lint']
14
+ end
15
+
16
+ it 'returns a successful exit code' do
17
+ expect(subject.invoke.first.call).to be_truthy
18
+ end
19
+ end
20
+ 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.31.0
4
+ version: 0.32.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-12-10 00:00:00.000000000 Z
12
+ date: 2015-01-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rainbow
@@ -207,6 +207,7 @@ files:
207
207
  - spec/scss_lint/linter_spec.rb
208
208
  - spec/scss_lint/location_spec.rb
209
209
  - spec/scss_lint/options_spec.rb
210
+ - spec/scss_lint/rake_task_spec.rb
210
211
  - spec/scss_lint/reporter/config_reporter_spec.rb
211
212
  - spec/scss_lint/reporter/default_reporter_spec.rb
212
213
  - spec/scss_lint/reporter/files_reporter_spec.rb
@@ -246,7 +247,6 @@ test_files:
246
247
  - spec/scss_lint/cli_spec.rb
247
248
  - spec/scss_lint/config_spec.rb
248
249
  - spec/scss_lint/engine_spec.rb
249
- - spec/scss_lint/linter/bang_format_spec.rb
250
250
  - spec/scss_lint/linter/border_zero_spec.rb
251
251
  - spec/scss_lint/linter/color_keyword_spec.rb
252
252
  - spec/scss_lint/linter/comment_spec.rb
@@ -278,7 +278,6 @@ test_files:
278
278
  - spec/scss_lint/linter/space_after_comma_spec.rb
279
279
  - spec/scss_lint/linter/space_after_property_colon_spec.rb
280
280
  - spec/scss_lint/linter/space_after_property_name_spec.rb
281
- - spec/scss_lint/linter/space_before_brace_spec.rb
282
281
  - spec/scss_lint/linter/space_between_parens_spec.rb
283
282
  - spec/scss_lint/linter/string_quotes_spec.rb
284
283
  - spec/scss_lint/linter/trailing_semicolon_spec.rb
@@ -291,9 +290,10 @@ test_files:
291
290
  - spec/scss_lint/linter/zero_unit_spec.rb
292
291
  - spec/scss_lint/linter/name_format_spec.rb
293
292
  - spec/scss_lint/linter/empty_line_between_blocks_spec.rb
293
+ - spec/scss_lint/linter/bang_format_spec.rb
294
+ - spec/scss_lint/linter/space_before_brace_spec.rb
294
295
  - spec/scss_lint/linter_registry_spec.rb
295
296
  - spec/scss_lint/location_spec.rb
296
- - spec/scss_lint/options_spec.rb
297
297
  - spec/scss_lint/reporter/config_reporter_spec.rb
298
298
  - spec/scss_lint/reporter/default_reporter_spec.rb
299
299
  - spec/scss_lint/reporter/files_reporter_spec.rb
@@ -303,7 +303,9 @@ test_files:
303
303
  - spec/scss_lint/runner_spec.rb
304
304
  - spec/scss_lint/selector_visitor_spec.rb
305
305
  - spec/scss_lint/linter_spec.rb
306
- - spec/spec_helper.rb
306
+ - spec/scss_lint/rake_task_spec.rb
307
+ - spec/scss_lint/options_spec.rb
307
308
  - spec/support/isolated_environment.rb
308
309
  - spec/support/matchers/report_lint.rb
310
+ - spec/spec_helper.rb
309
311
  has_rdoc: