rubocop-rspec 1.14.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0d76ad6b5a03029a44d0df0b733fd13816be3ffd
4
- data.tar.gz: 430a2169a27502c780f3ab10d9e0bae261a31f94
3
+ metadata.gz: 05c5a02b8f251474055785a8e599fa2bbd66a5da
4
+ data.tar.gz: 4d34abb87f561cbe99dcd4df35d4d2e4b8eb1499
5
5
  SHA512:
6
- metadata.gz: 54815c238a360be303b16144d9dcb3338770948de917b0a5a6f292dd25721b9d48c042edab0361f203b050be82cb18bcd2dcd1250b4ee111f9e3f3d15dd1ed1d
7
- data.tar.gz: 1d39b6af29a27b1cda1ae5f223e74dfba11f494381920ae821941546322d3688cd30e3666a245535c6bc8998c2b7bb13c4aafc378ebc7b3469ee434b60741db3
6
+ metadata.gz: 55de6981f33d7f310a4290a1fc4578bb6d0ba905a2ce4ea86f966d025165cfd6d08d05f5198b56dcd207178724f574e6e046cb4af01be02a7e36662cfe792647
7
+ data.tar.gz: 73f5cdbc39ed5bc4aaa0d2fa8aa0769855b09f2d960ccf5078638582be79556109a491819a4253414a567a50baef1e66b6b737203998a57fad0cf2997c4446ca
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Master (Unreleased)
4
4
 
5
+ ## 1.15.0 (2017-05-24)
6
+
7
+ * Add `RSpec/DescribeSymbol` cop. ([@tsigo][])
8
+ * Fix error when `RSpec/OverwritingSetup` and `RSpec/ScatteredLet` analyzed empty example groups. ([@backus][])
9
+
5
10
  ## 1.14.0 (2017-03-24)
6
11
 
7
12
  * Add `RSpec/OverwritingSetup` cop. ([@Darhazer][])
@@ -206,3 +211,4 @@
206
211
  [@redross]: https://github.com/redross
207
212
  [@cfabianski]: https://github.com/cfabianski
208
213
  [@dgollahon]: https://github.com/dgollahon
214
+ [@tsigo]: https://github.com/tsigo
@@ -42,6 +42,10 @@ RSpec/DescribeMethod:
42
42
  Description: Checks that the second argument to `describe` specifies a method.
43
43
  Enabled: true
44
44
 
45
+ RSpec/DescribeSymbol:
46
+ Description: Avoid describing symbols.
47
+ Enabled: true
48
+
45
49
  RSpec/IteratedExpectation:
46
50
  Description: Check that `all` matcher is used instead of iterating over an array.
47
51
  Enabled: true
@@ -26,6 +26,7 @@ require 'rubocop/cop/rspec/be_eql'
26
26
  require 'rubocop/cop/rspec/before_after_all'
27
27
  require 'rubocop/cop/rspec/describe_class'
28
28
  require 'rubocop/cop/rspec/describe_method'
29
+ require 'rubocop/cop/rspec/describe_symbol'
29
30
  require 'rubocop/cop/rspec/described_class'
30
31
  require 'rubocop/cop/rspec/empty_example_group'
31
32
  require 'rubocop/cop/rspec/empty_line_after_final_let'
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RSpec
6
+ # Avoid describing symbols.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # describe :my_method do
11
+ # ...
12
+ # end
13
+ #
14
+ # # good
15
+ # describe '#my_method' do
16
+ # ...
17
+ # end
18
+ #
19
+ # See https://github.com/rspec/rspec-core/issues/1610
20
+ class DescribeSymbol < Cop
21
+ MSG = 'Avoid describing symbols.'.freeze
22
+
23
+ def_node_matcher :describe_symbol?, <<-PATTERN
24
+ (send {(const nil :RSpec) nil} :describe $sym ...)
25
+ PATTERN
26
+
27
+ def on_send(node)
28
+ describe_symbol?(node) { |match| add_offense(match, :expression) }
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -29,7 +29,7 @@ module RuboCop
29
29
  PATTERN
30
30
 
31
31
  def on_block(node)
32
- return unless example_group?(node)
32
+ return unless example_group_with_body?(node)
33
33
 
34
34
  _describe, _args, body = *node
35
35
 
@@ -32,7 +32,7 @@ module RuboCop
32
32
  def_node_matcher :let?, '(block (send nil {:let :let!} ...) ...)'
33
33
 
34
34
  def on_block(node)
35
- return unless example_group?(node)
35
+ return unless example_group_with_body?(node)
36
36
 
37
37
  _describe, _args, body = *node
38
38
 
@@ -8,6 +8,11 @@ module RuboCop
8
8
  extend RuboCop::NodePattern::Macros
9
9
 
10
10
  def_node_matcher :example_group?, ExampleGroups::ALL.block_pattern
11
+
12
+ def_node_matcher :example_group_with_body?, <<-PATTERN
13
+ (block #{ExampleGroups::ALL.send_pattern} args [!nil])
14
+ PATTERN
15
+
11
16
  def_node_matcher :example?, Examples::ALL.block_pattern
12
17
  end
13
18
  end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module RSpec
5
5
  # Version information for the RSpec RuboCop plugin.
6
6
  module Version
7
- STRING = '1.14.0'.freeze
7
+ STRING = '1.15.0'.freeze
8
8
  end
9
9
  end
10
10
  end
@@ -0,0 +1,42 @@
1
+ RSpec.describe RuboCop::Cop::RSpec::DescribeSymbol do
2
+ subject(:cop) { described_class.new }
3
+
4
+ it 'flags violations for `describe :symbol`' do
5
+ expect_violation(<<-RUBY)
6
+ describe(:some_method) { }
7
+ ^^^^^^^^^^^^ Avoid describing symbols.
8
+ RUBY
9
+ end
10
+
11
+ it 'flags violations for `describe :symbol` with multiple arguments' do
12
+ expect_violation(<<-RUBY)
13
+ describe(:some_method, "description") { }
14
+ ^^^^^^^^^^^^ Avoid describing symbols.
15
+ RUBY
16
+ end
17
+
18
+ it 'flags violations for `RSpec.describe :symbol`' do
19
+ expect_violation(<<-RUBY)
20
+ RSpec.describe(:some_method, "description") { }
21
+ ^^^^^^^^^^^^ Avoid describing symbols.
22
+ RUBY
23
+ end
24
+
25
+ it 'flags violations for a nested `describe`' do
26
+ expect_violation(<<-RUBY)
27
+ RSpec.describe Foo do
28
+ describe :to_s do
29
+ ^^^^^ Avoid describing symbols.
30
+ end
31
+ end
32
+ RUBY
33
+ end
34
+
35
+ it 'does not flag non-Symbol arguments' do
36
+ expect_no_violations('describe("#some_method") { }')
37
+ end
38
+
39
+ it 'does not flag `context :symbol`' do
40
+ expect_no_violations('context(:some_method) { }')
41
+ end
42
+ end
@@ -43,4 +43,9 @@ RSpec.describe RuboCop::Cop::RSpec::OverwritingSetup do
43
43
  end
44
44
  RUBY
45
45
  end
46
+
47
+ it 'does not encounter an error when handling an empty describe' do
48
+ expect { inspect_source(cop, 'RSpec.describe(User) do end', 'a_spec.rb') }
49
+ .not_to raise_error
50
+ end
46
51
  end
@@ -23,4 +23,9 @@ RSpec.describe RuboCop::Cop::RSpec::ScatteredLet do
23
23
  end
24
24
  RUBY
25
25
  end
26
+
27
+ it 'does not encounter an error when handling an empty describe' do
28
+ expect { inspect_source(cop, 'RSpec.describe(User) do end', 'a_spec.rb') }
29
+ .not_to raise_error
30
+ end
26
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Backus
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-03-24 00:00:00.000000000 Z
13
+ date: 2017-03-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -151,6 +151,7 @@ files:
151
151
  - lib/rubocop/cop/rspec/cop.rb
152
152
  - lib/rubocop/cop/rspec/describe_class.rb
153
153
  - lib/rubocop/cop/rspec/describe_method.rb
154
+ - lib/rubocop/cop/rspec/describe_symbol.rb
154
155
  - lib/rubocop/cop/rspec/described_class.rb
155
156
  - lib/rubocop/cop/rspec/empty_example_group.rb
156
157
  - lib/rubocop/cop/rspec/empty_line_after_final_let.rb
@@ -212,6 +213,7 @@ files:
212
213
  - spec/rubocop/cop/rspec/cop_spec.rb
213
214
  - spec/rubocop/cop/rspec/describe_class_spec.rb
214
215
  - spec/rubocop/cop/rspec/describe_method_spec.rb
216
+ - spec/rubocop/cop/rspec/describe_symbol_spec.rb
215
217
  - spec/rubocop/cop/rspec/described_class_spec.rb
216
218
  - spec/rubocop/cop/rspec/empty_example_group_spec.rb
217
219
  - spec/rubocop/cop/rspec/empty_line_after_final_let_spec.rb
@@ -279,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
279
281
  version: '0'
280
282
  requirements: []
281
283
  rubyforge_project:
282
- rubygems_version: 2.5.2
284
+ rubygems_version: 2.6.8
283
285
  signing_key:
284
286
  specification_version: 4
285
287
  summary: Code style checking for RSpec files
@@ -295,6 +297,7 @@ test_files:
295
297
  - spec/rubocop/cop/rspec/cop_spec.rb
296
298
  - spec/rubocop/cop/rspec/describe_class_spec.rb
297
299
  - spec/rubocop/cop/rspec/describe_method_spec.rb
300
+ - spec/rubocop/cop/rspec/describe_symbol_spec.rb
298
301
  - spec/rubocop/cop/rspec/described_class_spec.rb
299
302
  - spec/rubocop/cop/rspec/empty_example_group_spec.rb
300
303
  - spec/rubocop/cop/rspec/empty_line_after_final_let_spec.rb