rubocop-rspec 1.14.0 → 1.15.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: 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