sevencop 0.33.0 → 0.35.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
  SHA256:
3
- metadata.gz: 2aa8a2d8e7e48840c1bfdfd2c512e4117d52c5d525663ba0d25dbfe815ca1f70
4
- data.tar.gz: 9d3a6b87ee268c2dddc82b7eaaf85bc431bce6a36dfb401717986a16e4445b79
3
+ metadata.gz: 2931983d77f0150cab0d7dc492a651fb89ddf689138898445b92b8d355d58d09
4
+ data.tar.gz: f2b9309bb927cae02589660e9fa9d1d25713bd91b34937e721b80d505c0a819c
5
5
  SHA512:
6
- metadata.gz: 14a1f39bda2b687ff9784812eb8600ce792f5bca38a7eb542f268ebb7f23b20b482ef424f50e953cd0f268fee652f787de4f556192ba479d90543521c9a955cd
7
- data.tar.gz: '08a48ae20f4716f2ea593054e74c684f31e8392a70177eb9076cd4b41fde6bd800000c4655545ade7385b366cd82d7fc985bbc66c0a69d1d1220e22e3a342f5b'
6
+ metadata.gz: 7fd6884d56779944c0caf4c2fee1f860494629b5f34eb344bac567de7a02e268ca8e8cf13064df2c42288698a8c2b8f296540c6e3a9d4b8fdab2def647c410d9
7
+ data.tar.gz: 1dd9b63de192c1291ceafc4b72e12fae92274c4de86076d5756fda6046f3816811cd245c7a1f5fdce555b707c5fb63bb307a9d74e3e2f9fc37bcf2aafdd8271e
data/.rubocop.yml CHANGED
@@ -39,7 +39,6 @@ RSpec/FilePath:
39
39
  RSpecEmptyLineAfterLet: rspec_empty_line_after_let
40
40
  RSpecExamplesInSameGroup: rspec_examples_in_same_group
41
41
  RSpecMemoizedHelperBlockDelimiter: rspec_memoized_helper_block_delimiter
42
- RSpecRailsResponseParsedBody: rspec_rails_response_parsed_body
43
42
 
44
43
  RSpec/MultipleExpectations:
45
44
  Enabled: false
@@ -59,11 +58,11 @@ Sevencop/MethodDefinitionKeywordArgumentOrdered:
59
58
  Sevencop/MethodDefinitionOrdered:
60
59
  Enabled: true
61
60
 
62
- Sevencop/RequireOrdered:
63
- Enabled: true
64
-
65
61
  Style/Documentation:
66
62
  Enabled: false
67
63
 
68
64
  Style/MultilineBlockChain:
69
65
  Enabled: false
66
+
67
+ Style/RequireOrder:
68
+ Enabled: true
data/Gemfile.lock CHANGED
@@ -1,68 +1,74 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sevencop (0.33.0)
4
+ sevencop (0.35.0)
5
5
  activesupport
6
6
  rubocop
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (7.0.4)
11
+ activesupport (7.0.4.3)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 1.6, < 2)
14
14
  minitest (>= 5.1)
15
15
  tzinfo (~> 2.0)
16
16
  ast (2.4.2)
17
- concurrent-ruby (1.1.10)
17
+ concurrent-ruby (1.2.2)
18
18
  diff-lcs (1.5.0)
19
- i18n (1.12.0)
19
+ i18n (1.13.0)
20
20
  concurrent-ruby (~> 1.0)
21
- json (2.6.2)
22
- minitest (5.16.3)
23
- parallel (1.22.1)
24
- parser (3.1.2.1)
21
+ json (2.6.3)
22
+ minitest (5.18.0)
23
+ parallel (1.23.0)
24
+ parser (3.2.2.1)
25
25
  ast (~> 2.4.1)
26
26
  rainbow (3.1.1)
27
27
  rake (13.0.6)
28
- regexp_parser (2.6.1)
28
+ regexp_parser (2.8.0)
29
29
  rexml (3.2.5)
30
30
  rspec (3.12.0)
31
31
  rspec-core (~> 3.12.0)
32
32
  rspec-expectations (~> 3.12.0)
33
33
  rspec-mocks (~> 3.12.0)
34
- rspec-core (3.12.0)
34
+ rspec-core (3.12.2)
35
35
  rspec-support (~> 3.12.0)
36
- rspec-expectations (3.12.0)
36
+ rspec-expectations (3.12.3)
37
37
  diff-lcs (>= 1.2.0, < 2.0)
38
38
  rspec-support (~> 3.12.0)
39
- rspec-mocks (3.12.0)
39
+ rspec-mocks (3.12.5)
40
40
  diff-lcs (>= 1.2.0, < 2.0)
41
41
  rspec-support (~> 3.12.0)
42
42
  rspec-support (3.12.0)
43
- rubocop (1.39.0)
43
+ rubocop (1.50.2)
44
44
  json (~> 2.3)
45
45
  parallel (~> 1.10)
46
- parser (>= 3.1.2.1)
46
+ parser (>= 3.2.0.0)
47
47
  rainbow (>= 2.2.2, < 4.0)
48
48
  regexp_parser (>= 1.8, < 3.0)
49
49
  rexml (>= 3.2.5, < 4.0)
50
- rubocop-ast (>= 1.23.0, < 2.0)
50
+ rubocop-ast (>= 1.28.0, < 2.0)
51
51
  ruby-progressbar (~> 1.7)
52
- unicode-display_width (>= 1.4.0, < 3.0)
53
- rubocop-ast (1.23.0)
54
- parser (>= 3.1.1.0)
55
- rubocop-performance (1.15.1)
52
+ unicode-display_width (>= 2.4.0, < 3.0)
53
+ rubocop-ast (1.28.1)
54
+ parser (>= 3.2.1.0)
55
+ rubocop-capybara (2.18.0)
56
+ rubocop (~> 1.41)
57
+ rubocop-factory_bot (2.22.0)
58
+ rubocop (~> 1.33)
59
+ rubocop-performance (1.17.1)
56
60
  rubocop (>= 1.7.0, < 2.0)
57
61
  rubocop-ast (>= 0.4.0)
58
62
  rubocop-rake (0.6.0)
59
63
  rubocop (~> 1.0)
60
- rubocop-rspec (2.15.0)
64
+ rubocop-rspec (2.22.0)
61
65
  rubocop (~> 1.33)
62
- ruby-progressbar (1.11.0)
63
- tzinfo (2.0.5)
66
+ rubocop-capybara (~> 2.17)
67
+ rubocop-factory_bot (~> 2.22)
68
+ ruby-progressbar (1.13.0)
69
+ tzinfo (2.0.6)
64
70
  concurrent-ruby (~> 1.0)
65
- unicode-display_width (2.3.0)
71
+ unicode-display_width (2.4.2)
66
72
 
67
73
  PLATFORMS
68
74
  x86_64-linux
data/README.md CHANGED
@@ -29,7 +29,6 @@ Note that all cops are `Enabled: false` by default.
29
29
  ## Cops
30
30
 
31
31
  - [Sevencop/AutoloadOrdered](lib/rubocop/cop/sevencop/autoload_ordered.rb)
32
- - [Sevencop/ConstantBase](lib/rubocop/cop/sevencop/constant_base.rb)
33
32
  - [Sevencop/FactoryBotAssociationOption](lib/rubocop/cop/sevencop/factory_bot_association_option.rb)
34
33
  - [Sevencop/FactoryBotAssociationStyle](lib/rubocop/cop/sevencop/factory_bot_association_style.rb)
35
34
  - [Sevencop/HashElementOrdered](lib/rubocop/cop/sevencop/hash_element_ordered.rb)
@@ -44,12 +43,10 @@ Note that all cops are `Enabled: false` by default.
44
43
  - [Sevencop/RailsSpecificActionName](lib/rubocop/cop/sevencop/rails_specific_action_name.rb)
45
44
  - [Sevencop/RailsUniquenessValidatorExplicitCaseSensitivity](lib/rubocop/cop/sevencop/rails_uniqueness_validator_explicit_case_sensitivity.rb)
46
45
  - [Sevencop/RailsWhereNot](lib/rubocop/cop/sevencop/rails_where_not.rb)
47
- - [Sevencop/RequireOrdered](lib/rubocop/cop/sevencop/require_ordered.rb)
48
46
  - [Sevencop/RSpecDescribeHttpEndpoint](lib/rubocop/cop/sevencop/rspec_describe_http_endpoint.rb)
49
47
  - [Sevencop/RSpecEmptyLineAfterLet](lib/rubocop/cop/sevencop/rspec_empty_line_after_let.rb)
50
48
  - [Sevencop/RSpecExamplesInSameGroup](lib/rubocop/cop/sevencop/rspec_examples_in_same_group.rb)
51
49
  - [Sevencop/RSpecMemoizedHelperBlockDelimiter](lib/rubocop/cop/sevencop/rspec_memoized_helper_block_delimiter.rb)
52
- - [Sevencop/RSpecRailsResponseParsedBody](lib/rubocop/cop/sevencop/rspec_rails_response_parsed_body.rb)
53
50
 
54
51
  ## Notes
55
52
 
data/config/default.yml CHANGED
@@ -4,11 +4,6 @@ Sevencop/AutoloadOrdered:
4
4
  Enabled: false
5
5
  Safe: false
6
6
 
7
- Sevencop/ConstantBase:
8
- Description: |
9
- Avoid unnecessary `::` prefix on constant.
10
- Enabled: false
11
-
12
7
  Sevencop/FactoryBotAssociationOption:
13
8
  Description: |
14
9
  Avoid redundant options on FactoryBot associations.
@@ -116,12 +111,6 @@ Sevencop/RailsWhereNot:
116
111
  Enabled: false
117
112
  Safe: false
118
113
 
119
- Sevencop/RequireOrdered:
120
- Description: |
121
- Sort `require` and `require_relative` in alphabetical order.
122
- Enabled: false
123
- Safe: false
124
-
125
114
  Sevencop/RSpecDescribeHttpEndpoint:
126
115
  Description: |
127
116
  Pass HTTP endpoint identifier (e.g. `GET /users`) to top-level `describe` on request-specs.
@@ -151,12 +140,3 @@ Sevencop/RSpecMemoizedHelperBlockDelimiter:
151
140
  Enabled: false
152
141
  Include:
153
142
  - spec/**/*
154
-
155
- Sevencop/RSpecRailsResponseParsedBody:
156
- Description: |
157
- Prefer `response.parsed_body` to `JSON.parse(response.body)`.
158
- Enabled: false
159
- Safe: false
160
- Include:
161
- - spec/controllers/**/*
162
- - spec/requests/**/*
@@ -69,8 +69,8 @@ module RuboCop
69
69
  node1,
70
70
  node2
71
71
  )
72
- !node1.location.expression.with(
73
- end_pos: node2.location.expression.end_pos
72
+ !node1.source_range.with(
73
+ end_pos: node2.source_range.end_pos
74
74
  ).source.include?("\n\n")
75
75
  end
76
76
 
@@ -76,7 +76,7 @@ module RuboCop
76
76
  corrector.remove(
77
77
  range_with_surrounding_comma(
78
78
  range_with_surrounding_space(
79
- node.location.expression,
79
+ node.source_range,
80
80
  side: :left
81
81
  ),
82
82
  :left
@@ -95,7 +95,7 @@ module RuboCop
95
95
  def whitespace_between(node)
96
96
  if node.pairs.length >= 2
97
97
  processed_source.raw_source[
98
- node.pairs[0].location.expression.end_pos + 1...node.pairs[1].location.expression.begin_pos
98
+ node.pairs[0].source_range.end_pos + 1...node.pairs[1].source_range.begin_pos
99
99
  ]
100
100
  else
101
101
  ' '
@@ -108,7 +108,7 @@ module RuboCop
108
108
  # ^^^^
109
109
  def whitespace_leading(node)
110
110
  processed_source.raw_source[
111
- node.location.expression.begin.end_pos + offset_for(node)...node.pairs[0].location.expression.begin_pos
111
+ node.source_range.begin.end_pos + offset_for(node)...node.pairs[0].source_range.begin_pos
112
112
  ]
113
113
  end
114
114
 
@@ -118,7 +118,7 @@ module RuboCop
118
118
  # ^^
119
119
  def whitespace_trailing(node)
120
120
  processed_source.raw_source[
121
- node.pairs[-1].location.expression.end_pos...node.location.expression.end.begin_pos - offset_for(node)
121
+ node.pairs[-1].source_range.end_pos...node.source_range.end.begin_pos - offset_for(node)
122
122
  ]
123
123
  end
124
124
  end
@@ -44,10 +44,10 @@ module RuboCop
44
44
  corrector,
45
45
  node
46
46
  )
47
- indent = ' ' * node.parent.location.expression.column
47
+ indent = ' ' * node.parent.source_range.column
48
48
 
49
49
  corrector.replace(
50
- node.location.expression.with(
50
+ node.source_range.with(
51
51
  begin_pos: node.parent.location.name.end_pos
52
52
  ),
53
53
  [
@@ -67,7 +67,7 @@ module RuboCop
67
67
  # @return [Boolean]
68
68
  def multilined?(node)
69
69
  node.children.map do |child|
70
- child.location.expression.line
70
+ child.source_range.line
71
71
  end.uniq.length == node.children.length
72
72
  end
73
73
  end
@@ -87,9 +87,7 @@ module RuboCop
87
87
  ranges = [
88
88
  node,
89
89
  *processed_source.ast_with_comments[node]
90
- ].map do |element|
91
- element.location.expression
92
- end
90
+ ].map(&:source_range)
93
91
  ranges.reduce do |result, range|
94
92
  add_range(result, range)
95
93
  end
@@ -33,8 +33,8 @@ module RuboCop
33
33
  "#{node.source}, "
34
34
  )
35
35
  corrector.remove(
36
- node.location.expression.with(
37
- begin_pos: node.left_sibling.location.expression.end_pos
36
+ node.source_range.with(
37
+ begin_pos: node.left_sibling.source_range.end_pos
38
38
  )
39
39
  )
40
40
  end
@@ -767,7 +767,7 @@ module RuboCop
767
767
  with:
768
768
  )
769
769
  corrector.replace(
770
- node.location.expression.with(
770
+ node.source_range.with(
771
771
  begin_pos: node.each_descendant(:const).first.location.name.begin_pos
772
772
  ),
773
773
  with
@@ -177,7 +177,7 @@ module RuboCop
177
177
  # @param node [RuboCop::AST::SendNode]
178
178
  # @return [Parser::Source::Range]
179
179
  def convert_to_autocorrected_range(node)
180
- node.location.expression.with(
180
+ node.source_range.with(
181
181
  begin_pos: node.location.selector.begin_pos
182
182
  )
183
183
  end
@@ -78,12 +78,12 @@ module RuboCop
78
78
  add_offense(uniqueness_value) do |corrector|
79
79
  if uniqueness_value.true_type?
80
80
  corrector.replace(
81
- uniqueness_value.source_range,
81
+ uniqueness_value,
82
82
  '{ case_sensitive: true }'
83
83
  )
84
84
  else
85
85
  corrector.insert_after(
86
- uniqueness_value.pairs.last.source_range,
86
+ uniqueness_value.pairs.last,
87
87
  ', case_sensitive: true'
88
88
  )
89
89
  end
@@ -32,11 +32,11 @@ module RuboCop
32
32
 
33
33
  add_offense(node) do |corrector|
34
34
  pairs = node.children[2].children
35
- last_end_pos = pairs[0].location.expression.end_pos
35
+ last_end_pos = pairs[0].source_range.end_pos
36
36
  pairs[1..].each do |pair|
37
- corrector.remove(pair.location.expression.with(begin_pos: last_end_pos))
38
- last_end_pos = pair.location.expression.end_pos
39
- corrector.insert_after(node.location.expression, ".where.not(#{pair.source})")
37
+ corrector.remove(pair.source_range.with(begin_pos: last_end_pos))
38
+ last_end_pos = pair.source_range.end_pos
39
+ corrector.insert_after(node, ".where.not(#{pair.source})")
40
40
  end
41
41
  end
42
42
  end
@@ -24,9 +24,7 @@ module Sevencop
24
24
  ranges = [
25
25
  node,
26
26
  *processed_source.ast_with_comments[node]
27
- ].map do |element|
28
- element.location.expression
29
- end
27
+ ].map(&:source_range)
30
28
  ranges.reduce do |result, range|
31
29
  add_range(result, range)
32
30
  end
@@ -7,7 +7,7 @@ require_relative 'config_loader'
7
7
  RuboCop::ConfigLoader.instance_variable_set(
8
8
  :@default_configuration,
9
9
  Sevencop::ConfigLoader.call(
10
- path: ::File.expand_path(
10
+ path: File.expand_path(
11
11
  '../../config/default.yml',
12
12
  __dir__
13
13
  )
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sevencop
4
- VERSION = '0.33.0'
4
+ VERSION = '0.35.0'
5
5
  end
data/lib/sevencop.rb CHANGED
@@ -5,7 +5,6 @@ require_relative 'sevencop/rubocop_extension'
5
5
  require_relative 'sevencop/version'
6
6
 
7
7
  require_relative 'rubocop/cop/sevencop/autoload_ordered'
8
- require_relative 'rubocop/cop/sevencop/constant_base'
9
8
  require_relative 'rubocop/cop/sevencop/factory_bot_association_option'
10
9
  require_relative 'rubocop/cop/sevencop/factory_bot_association_style'
11
10
  require_relative 'rubocop/cop/sevencop/hash_element_ordered'
@@ -20,9 +19,7 @@ require_relative 'rubocop/cop/sevencop/rails_order_field_in_order_of'
20
19
  require_relative 'rubocop/cop/sevencop/rails_specific_action_name'
21
20
  require_relative 'rubocop/cop/sevencop/rails_uniqueness_validator_explicit_case_sensitivity'
22
21
  require_relative 'rubocop/cop/sevencop/rails_where_not'
23
- require_relative 'rubocop/cop/sevencop/require_ordered'
24
22
  require_relative 'rubocop/cop/sevencop/rspec_describe_http_endpoint'
25
23
  require_relative 'rubocop/cop/sevencop/rspec_empty_line_after_let'
26
24
  require_relative 'rubocop/cop/sevencop/rspec_examples_in_same_group'
27
25
  require_relative 'rubocop/cop/sevencop/rspec_memoized_helper_block_delimiter'
28
- require_relative 'rubocop/cop/sevencop/rspec_rails_response_parsed_body'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sevencop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.33.0
4
+ version: 0.35.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-03 00:00:00.000000000 Z
11
+ date: 2023-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -57,7 +57,6 @@ files:
57
57
  - config/default.yml
58
58
  - data/reserved_words_mysql.txt
59
59
  - lib/rubocop/cop/sevencop/autoload_ordered.rb
60
- - lib/rubocop/cop/sevencop/constant_base.rb
61
60
  - lib/rubocop/cop/sevencop/factory_bot_association_option.rb
62
61
  - lib/rubocop/cop/sevencop/factory_bot_association_style.rb
63
62
  - lib/rubocop/cop/sevencop/hash_element_ordered.rb
@@ -72,12 +71,10 @@ files:
72
71
  - lib/rubocop/cop/sevencop/rails_specific_action_name.rb
73
72
  - lib/rubocop/cop/sevencop/rails_uniqueness_validator_explicit_case_sensitivity.rb
74
73
  - lib/rubocop/cop/sevencop/rails_where_not.rb
75
- - lib/rubocop/cop/sevencop/require_ordered.rb
76
74
  - lib/rubocop/cop/sevencop/rspec_describe_http_endpoint.rb
77
75
  - lib/rubocop/cop/sevencop/rspec_empty_line_after_let.rb
78
76
  - lib/rubocop/cop/sevencop/rspec_examples_in_same_group.rb
79
77
  - lib/rubocop/cop/sevencop/rspec_memoized_helper_block_delimiter.rb
80
- - lib/rubocop/cop/sevencop/rspec_rails_response_parsed_body.rb
81
78
  - lib/sevencop.rb
82
79
  - lib/sevencop/config_loader.rb
83
80
  - lib/sevencop/cop_concerns.rb
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module Sevencop
6
- # Avoid unnecessary `::` prefix on constant.
7
- #
8
- # @example
9
- # # bad
10
- # ::Const
11
- #
12
- # # good
13
- # Const
14
- #
15
- # # bad
16
- # class << self
17
- # ::Const
18
- # end
19
- #
20
- # # good
21
- # class << self
22
- # Const
23
- # end
24
- #
25
- # # good
26
- # class A
27
- # ::Const
28
- # end
29
- #
30
- # # good
31
- # class A
32
- # ::Const
33
- # end
34
- class ConstantBase < Base
35
- extend AutoCorrector
36
-
37
- MSG = 'Avoid unnecessary `::` prefix on constant.'
38
-
39
- # @param node [RuboCop::AST::CbaseNode]
40
- # @return [void]
41
- def on_cbase(node)
42
- return unless bad?(node)
43
-
44
- add_offense(node) do |corrector|
45
- corrector.remove(node)
46
- end
47
- end
48
-
49
- private
50
-
51
- # @param node [RuboCop::AST::CbaseNode]
52
- # @return [Boolean]
53
- def bad?(node)
54
- module_nesting_ancestors_of(node).none?
55
- end
56
-
57
- # @param node [RuboCop::AST::Node]
58
- # @return [Enumerable<RuboCop::AST::Node>]
59
- def module_nesting_ancestors_of(node)
60
- node.each_ancestor(:class, :module).reject do |ancestor|
61
- ancestor.class_type? && used_in_super_class_part?(node, class_node: ancestor)
62
- end
63
- end
64
-
65
- # @param class_node [RuboCop::AST::Node]
66
- # @param node [RuboCop::AST::CbaseNode]
67
- # @return [Boolean]
68
- def used_in_super_class_part?(
69
- node,
70
- class_node:
71
- )
72
- class_node.parent_class&.each_descendant(:cbase)&.any? do |descendant|
73
- descendant.equal?(node)
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,94 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module Sevencop
6
- # Sort `require` and `require_relative` in alphabetical order.
7
- #
8
- # @example
9
- # # bad
10
- # require 'b'
11
- # require 'a'
12
- #
13
- # # good
14
- # require 'a'
15
- # require 'b'
16
- #
17
- # # bad
18
- # require_relative 'b'
19
- # require_relative 'a'
20
- #
21
- # # good
22
- # require_relative 'a'
23
- # require_relative 'b'
24
- #
25
- # # good
26
- # require 'a'
27
- # require 'd'
28
- #
29
- # require 'b'
30
- # require 'c'
31
- #
32
- # # good
33
- # require 'b'
34
- # require_relative 'c'
35
- # require 'a'
36
- class RequireOrdered < Base
37
- extend AutoCorrector
38
-
39
- include RangeHelp
40
-
41
- include ::Sevencop::CopConcerns::Ordered
42
-
43
- RESTRICT_ON_SEND = %i[
44
- require
45
- require_relative
46
- ].freeze
47
-
48
- # @param node [RuboCop::AST::SendNode]
49
- # @return [void]
50
- def on_send(node)
51
- previous_older_sibling = find_previous_older_sibling(node)
52
- return unless previous_older_sibling
53
-
54
- add_offense(
55
- node,
56
- message: "Sort `#{node.method_name}` in alphabetical order."
57
- ) do |corrector|
58
- swap(
59
- range_with_comments_and_lines(previous_older_sibling),
60
- range_with_comments_and_lines(node),
61
- corrector: corrector
62
- )
63
- end
64
- end
65
-
66
- private
67
-
68
- # @param node [RuboCop::AST::SendNode]
69
- # @return [RuboCop::AST::SendNode, nil]
70
- def find_previous_older_sibling(node)
71
- node.left_siblings.reverse.find do |sibling|
72
- break unless sibling.send_type?
73
- break if sibling.method_name != node.method_name
74
- break unless in_same_section?(sibling, node)
75
-
76
- node.first_argument.source < sibling.first_argument.source
77
- end
78
- end
79
-
80
- # @param node1 [RuboCop::AST::SendNode]
81
- # @param node2 [RuboCop::AST::SendNode]
82
- # @return [Boolean]
83
- def in_same_section?(
84
- node1,
85
- node2
86
- )
87
- !node1.location.expression.with(
88
- end_pos: node2.location.expression.end_pos
89
- ).source.include?("\n\n")
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module Sevencop
6
- # Prefer `response.parsed_body` to `JSON.parse(response.body)`.
7
- #
8
- # @safety
9
- # This cop is unsafe because Content-Type may not be `application/json`.
10
- #
11
- # @example
12
- # # bad
13
- # JSON.parse(response.body)
14
- #
15
- # # good
16
- # response.parsed_body
17
- class RSpecRailsResponseParsedBody < Base
18
- extend AutoCorrector
19
-
20
- MSG = 'Prefer `response.parsed_body` to `JSON.parse(response.body)`.'
21
-
22
- RESTRICT_ON_SEND = %i[parse].freeze
23
-
24
- # @param node [RuboCop::AST::SendNode]
25
- # @return [void]
26
- def on_send(node)
27
- return unless bad?(node)
28
-
29
- add_offense(node) do |corrector|
30
- autocorrect(corrector, node)
31
- end
32
- end
33
-
34
- private
35
-
36
- # @!method json_parse_response_body?(node)
37
- # @param node [RuboCop::AST::Node]
38
- # @return [Boolean]
39
- def_node_matcher :json_parse_response_body?, <<~PATTERN
40
- (send
41
- (const
42
- {nil? cbase}
43
- :JSON
44
- )
45
- :parse
46
- (send
47
- (send
48
- nil?
49
- :response
50
- )
51
- :body
52
- )
53
- )
54
- PATTERN
55
- alias bad? json_parse_response_body?
56
-
57
- # @param corrector [RuboCop::Cop::Corrector]
58
- # @param node [RuboCop::AST::SendNode]
59
- # @return [void]
60
- def autocorrect(
61
- corrector,
62
- node
63
- )
64
- corrector.replace(node, 'response.parsed_body')
65
- end
66
- end
67
- end
68
- end
69
- end