sevencop 0.35.1 → 0.36.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
  SHA256:
3
- metadata.gz: 00bdcb34361d6d2adc9c56ad5c04a70763a03b9ed94c94836855ccf1bae0504a
4
- data.tar.gz: 42425e905007e02da20af812e08d388a6ab897abc7ae6963084110e709524774
3
+ metadata.gz: 41302972abfb2a785a3a9fcffb8b9b229d34d8182125f75cc34062720ef7262c
4
+ data.tar.gz: ac07370e67a54572895b3d49c5992da0521aa474de7e9e47d3b998a740b9f087
5
5
  SHA512:
6
- metadata.gz: 157017650f5d89046b8acfc2cdc7505c3fe24d9f88ebcdde530ca362c11291b2ece58c02fb983843e2c42ded4262ae2e638bed2f3feb9ffa26149405185e623a
7
- data.tar.gz: b42d35a4f16268871b51f794b4d1fcf68cef53576889a8ebbb913fb3ffefb3e0b9ee8d27bbf1eb44d981f9a491f6d14cfae70f026495312a459bdd131f011d5f
6
+ metadata.gz: 05fccfbdc29de4b5f0dda00caa7a30528068e98e665ba6ace777d1531c968dedce672c429226b4c0c5c167d986b0fcfb9ead8d7244ea359abd27b1edc8d15b3b
7
+ data.tar.gz: 07a7d923cc6f06c0b9df3ede1de081b23ea116d1bba328faf9529fe6b2174d691ab1c99ea3f6eaa175d8e762e7b61b2c1dc34457cbe5d6ace012b58a0be83066
data/.rubocop.yml CHANGED
@@ -43,6 +43,13 @@ RSpec/FilePath:
43
43
  RSpec/MultipleExpectations:
44
44
  Enabled: false
45
45
 
46
+ RSpec/SpecFilePathFormat:
47
+ CustomTransform:
48
+ RSpecDescribeHttpEndpoint: rspec_describe_http_endpoint
49
+ RSpecEmptyLineAfterLet: rspec_empty_line_after_let
50
+ RSpecExamplesInSameGroup: rspec_examples_in_same_group
51
+ RSpecMemoizedHelperBlockDelimiter: rspec_memoized_helper_block_delimiter
52
+
46
53
  Sevencop/AutoloadOrdered:
47
54
  Enabled: true
48
55
 
data/Gemfile.lock CHANGED
@@ -1,32 +1,46 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sevencop (0.35.1)
4
+ sevencop (0.36.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.5)
11
+ activesupport (7.1.3)
12
+ base64
13
+ bigdecimal
12
14
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
+ connection_pool (>= 2.2.5)
16
+ drb
13
17
  i18n (>= 1.6, < 2)
14
18
  minitest (>= 5.1)
19
+ mutex_m
15
20
  tzinfo (~> 2.0)
16
21
  ast (2.4.2)
17
- concurrent-ruby (1.2.2)
22
+ base64 (0.2.0)
23
+ bigdecimal (3.1.6)
24
+ concurrent-ruby (1.2.3)
25
+ connection_pool (2.4.1)
18
26
  diff-lcs (1.5.0)
27
+ drb (2.2.0)
28
+ ruby2_keywords
19
29
  i18n (1.14.1)
20
30
  concurrent-ruby (~> 1.0)
21
- json (2.6.3)
22
- minitest (5.18.0)
23
- parallel (1.23.0)
24
- parser (3.2.2.1)
31
+ json (2.7.1)
32
+ language_server-protocol (3.17.0.3)
33
+ minitest (5.21.2)
34
+ mutex_m (0.2.0)
35
+ parallel (1.24.0)
36
+ parser (3.3.0.5)
25
37
  ast (~> 2.4.1)
38
+ racc
39
+ racc (1.7.3)
26
40
  rainbow (3.1.1)
27
- rake (13.0.6)
28
- regexp_parser (2.8.0)
29
- rexml (3.2.5)
41
+ rake (13.1.0)
42
+ regexp_parser (2.9.0)
43
+ rexml (3.2.6)
30
44
  rspec (3.12.0)
31
45
  rspec-core (~> 3.12.0)
32
46
  rspec-expectations (~> 3.12.0)
@@ -36,39 +50,41 @@ GEM
36
50
  rspec-expectations (3.12.3)
37
51
  diff-lcs (>= 1.2.0, < 2.0)
38
52
  rspec-support (~> 3.12.0)
39
- rspec-mocks (3.12.5)
53
+ rspec-mocks (3.12.6)
40
54
  diff-lcs (>= 1.2.0, < 2.0)
41
55
  rspec-support (~> 3.12.0)
42
- rspec-support (3.12.0)
43
- rubocop (1.50.2)
56
+ rspec-support (3.12.1)
57
+ rubocop (1.60.2)
44
58
  json (~> 2.3)
59
+ language_server-protocol (>= 3.17.0)
45
60
  parallel (~> 1.10)
46
- parser (>= 3.2.0.0)
61
+ parser (>= 3.3.0.2)
47
62
  rainbow (>= 2.2.2, < 4.0)
48
63
  regexp_parser (>= 1.8, < 3.0)
49
64
  rexml (>= 3.2.5, < 4.0)
50
- rubocop-ast (>= 1.28.0, < 2.0)
65
+ rubocop-ast (>= 1.30.0, < 2.0)
51
66
  ruby-progressbar (~> 1.7)
52
67
  unicode-display_width (>= 2.4.0, < 3.0)
53
- rubocop-ast (1.28.1)
68
+ rubocop-ast (1.30.0)
54
69
  parser (>= 3.2.1.0)
55
- rubocop-capybara (2.18.0)
70
+ rubocop-capybara (2.20.0)
56
71
  rubocop (~> 1.41)
57
- rubocop-factory_bot (2.22.0)
58
- rubocop (~> 1.33)
59
- rubocop-performance (1.17.1)
60
- rubocop (>= 1.7.0, < 2.0)
61
- rubocop-ast (>= 0.4.0)
72
+ rubocop-factory_bot (2.25.1)
73
+ rubocop (~> 1.41)
74
+ rubocop-performance (1.20.2)
75
+ rubocop (>= 1.48.1, < 2.0)
76
+ rubocop-ast (>= 1.30.0, < 2.0)
62
77
  rubocop-rake (0.6.0)
63
78
  rubocop (~> 1.0)
64
- rubocop-rspec (2.22.0)
65
- rubocop (~> 1.33)
79
+ rubocop-rspec (2.26.1)
80
+ rubocop (~> 1.40)
66
81
  rubocop-capybara (~> 2.17)
67
82
  rubocop-factory_bot (~> 2.22)
68
83
  ruby-progressbar (1.13.0)
84
+ ruby2_keywords (0.0.5)
69
85
  tzinfo (2.0.6)
70
86
  concurrent-ruby (~> 1.0)
71
- unicode-display_width (2.4.2)
87
+ unicode-display_width (2.5.0)
72
88
 
73
89
  PLATFORMS
74
90
  x86_64-linux
data/README.md CHANGED
@@ -32,6 +32,7 @@ Note that all cops are `Enabled: false` by default.
32
32
  - [Sevencop/FactoryBotAssociationOption](lib/rubocop/cop/sevencop/factory_bot_association_option.rb)
33
33
  - [Sevencop/FactoryBotAssociationStyle](lib/rubocop/cop/sevencop/factory_bot_association_style.rb)
34
34
  - [Sevencop/HashElementOrdered](lib/rubocop/cop/sevencop/hash_element_ordered.rb)
35
+ - [Sevencop/MapMethodChain](lib/rubocop/cop/sevencop/map_method_chain.rb)
35
36
  - [Sevencop/MethodDefinitionArgumentsMultiline](lib/rubocop/cop/sevencop/method_definition_arguments_multiline.rb)
36
37
  - [Sevencop/MethodDefinitionInIncluded](lib/rubocop/cop/sevencop/method_definition_in_included.rb)
37
38
  - [Sevencop/MethodDefinitionKeywordArgumentOrdered](lib/rubocop/cop/sevencop/method_definition_keyword_argument_ordered.rb)
data/config/default.yml CHANGED
@@ -37,6 +37,12 @@ Sevencop/HashElementOrdered:
37
37
  Enabled: false
38
38
  Safe: false
39
39
 
40
+ Sevencop/MapMethodChain:
41
+ Description: |
42
+ Checks if the map method is used in a chain.
43
+ Enabled: false
44
+ Safe: false
45
+
40
46
  Sevencop/MethodDefinitionArgumentsMultiline:
41
47
  Description: |
42
48
  Inserts new lines between method definition arguments.
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sevencop
6
+ # Checks if the map method is used in a chain.
7
+ #
8
+ # This cop is another version of `Performance/MapMethodChain` cop which has the autocorrection support.
9
+ # They have decided not to add autocorrection, so we have this cop in case you want to use it.
10
+ # https://github.com/rubocop/rubocop-performance/issues/436
11
+ #
12
+ # @example
13
+ # # bad
14
+ # array.map(&:foo).map(&:bar)
15
+ #
16
+ # # good
17
+ # array.map { |element| element.foo.bar }
18
+ class MapMethodChain < Base
19
+ extend AutoCorrector
20
+
21
+ include IgnoredNode
22
+
23
+ RESTRICT_ON_SEND = %i[map collect].freeze
24
+
25
+ # @!method block_pass_with_symbol_arg?(node)
26
+ def_node_matcher :block_pass_with_symbol_arg?, <<~PATTERN
27
+ (:block_pass (:sym $_))
28
+ PATTERN
29
+
30
+ def on_send(node)
31
+ return if part_of_ignored_node?(node)
32
+ return unless (map_arg = block_pass_with_symbol_arg?(node.first_argument))
33
+
34
+ map_args = [map_arg]
35
+ return unless (begin_of_chained_map_method = find_begin_of_chained_map_method(node, map_args))
36
+
37
+ range = begin_of_chained_map_method.loc.selector.begin.join(node.source_range.end)
38
+ replacement = "#{begin_of_chained_map_method.method_name} { |element| element.#{map_args.join('.')} }"
39
+ add_offense(
40
+ range,
41
+ message: format(
42
+ 'Use `%<replacement>s` instead of `%<method_name>s` method chain.',
43
+ method_name: begin_of_chained_map_method.method_name,
44
+ replacement: replacement
45
+ )
46
+ ) do |corrector|
47
+ corrector.replace(range, replacement)
48
+ end
49
+
50
+ ignore_node(node)
51
+ end
52
+
53
+ private
54
+
55
+ def find_begin_of_chained_map_method(
56
+ node,
57
+ map_args
58
+ )
59
+ return unless (chained_map_method = node.receiver)
60
+ return if !chained_map_method.call_type? || !RESTRICT_ON_SEND.include?(chained_map_method.method_name)
61
+ return unless (map_arg = block_pass_with_symbol_arg?(chained_map_method.first_argument))
62
+
63
+ map_args.unshift(map_arg)
64
+
65
+ receiver = chained_map_method.receiver
66
+
67
+ return chained_map_method unless receiver&.call_type? && block_pass_with_symbol_arg?(receiver.first_argument)
68
+
69
+ find_begin_of_chained_map_method(chained_map_method, map_args)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -48,7 +48,7 @@ module RuboCop
48
48
  return unless without_options?(node) || (with_hash_options?(node) && !with_optional?(node))
49
49
 
50
50
  add_offense(node) do |corrector|
51
- corrector.insert_after(node.arguments[-1], ', optional: true')
51
+ corrector.insert_after(node.last_argument, ', optional: true')
52
52
  end
53
53
  end
54
54
  end
@@ -48,10 +48,10 @@ module RuboCop
48
48
  def on_send(node)
49
49
  return unless order_with_field?(node)
50
50
 
51
- first_argument_node = node.arguments.first
51
+ first_argument_node = node.first_argument
52
52
  add_offense(first_argument_node) do |corrector|
53
53
  corrector.replace(
54
- node.arguments.first,
54
+ node.first_argument,
55
55
  "Arel.sql(#{first_argument_node.source})"
56
56
  )
57
57
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sevencop
4
- VERSION = '0.35.1'
4
+ VERSION = '0.36.0'
5
5
  end
data/lib/sevencop.rb CHANGED
@@ -8,6 +8,7 @@ require_relative 'rubocop/cop/sevencop/autoload_ordered'
8
8
  require_relative 'rubocop/cop/sevencop/factory_bot_association_option'
9
9
  require_relative 'rubocop/cop/sevencop/factory_bot_association_style'
10
10
  require_relative 'rubocop/cop/sevencop/hash_element_ordered'
11
+ require_relative 'rubocop/cop/sevencop/map_method_chain'
11
12
  require_relative 'rubocop/cop/sevencop/method_definition_arguments_multiline'
12
13
  require_relative 'rubocop/cop/sevencop/method_definition_in_included'
13
14
  require_relative 'rubocop/cop/sevencop/method_definition_keyword_argument_ordered'
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.35.1
4
+ version: 0.36.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: 2023-06-04 00:00:00.000000000 Z
11
+ date: 2024-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -60,6 +60,7 @@ files:
60
60
  - lib/rubocop/cop/sevencop/factory_bot_association_option.rb
61
61
  - lib/rubocop/cop/sevencop/factory_bot_association_style.rb
62
62
  - lib/rubocop/cop/sevencop/hash_element_ordered.rb
63
+ - lib/rubocop/cop/sevencop/map_method_chain.rb
63
64
  - lib/rubocop/cop/sevencop/method_definition_arguments_multiline.rb
64
65
  - lib/rubocop/cop/sevencop/method_definition_in_included.rb
65
66
  - lib/rubocop/cop/sevencop/method_definition_keyword_argument_ordered.rb