sevencop 0.6.1 → 0.8.1

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: f744cb31d07cadbb924e1ce690b85ee2c771ff9264333c153fcc52244d596dd6
4
- data.tar.gz: c594faf493963d8f188559ca1f77b7b8570c05b5936356d6fc259de2417200a7
3
+ metadata.gz: 7ed10e2f4687671a6868a81d9c550490d309bc0f604c7b2f596db6efa9ef7ef9
4
+ data.tar.gz: a097023dd73739464bc3c55f0d30cc89166eb8caa22201b3419a1ccaa778295c
5
5
  SHA512:
6
- metadata.gz: ee20da1638b96c6256a257b6602afcc90a22b33c4988fd8a44b50d5f93b7ab311e7ce052f3aeef4dd0b08c40028cb1c371184a3569e8656086a96b685b62d4d9
7
- data.tar.gz: 266bdf4e223ce62e269da6e850b22491d8b1dc052a8f686b972c895a86d29d067b4105e1716c78c9b5f7c2cd231b567ac1b26e58cac656f45843f2dabf5b432f
6
+ metadata.gz: 3037aad57ef04821ea70c518a5d1cbc4bd69bbfb8460ac22887bee480ae9d599c871ed77226944ca29f1cdd24060558b3358513919c486af4bdce7e5d8980e08
7
+ data.tar.gz: 956951c7a21d5c1315bee2e6a77ce21307c8889cbdeebca5931a40c5f8a21bdb8c89703054e2304ca2760f5878b0d211ed92613a27b2825ab514a9a9657192b4
data/.rubocop.yml CHANGED
@@ -3,15 +3,8 @@ AllCops:
3
3
  SuggestExtensions: false
4
4
  TargetRubyVersion: 2.6
5
5
 
6
- Layout/LineLength:
7
- Enabled: false
8
-
9
6
  Metrics:
10
7
  Enabled: false
11
8
 
12
- Naming/FileName:
13
- Exclude:
14
- - lib/sevencop.rb
15
-
16
9
  Style/Documentation:
17
10
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ### Changed
6
+
7
+ - Improve `Sevencop/ToSWithArgument` performance.
8
+
9
+ ## 0.8.0 - 2022-07-20
10
+
11
+ ### Added
12
+
13
+ - Add `Sevencop/ToSWithArgument` cop.
14
+
15
+ ## 0.7.0 - 2022-07-15
16
+
17
+ ### Added
18
+
19
+ - Add `Sevencop/WhereNot` cop.
20
+
5
21
  ## 0.6.1 - 2022-07-04
6
22
 
7
23
  ### Fixed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sevencop (0.6.1)
4
+ sevencop (0.8.1)
5
5
  rubocop
6
6
 
7
7
  GEM
@@ -9,12 +9,13 @@ GEM
9
9
  specs:
10
10
  ast (2.4.2)
11
11
  diff-lcs (1.5.0)
12
- parallel (1.21.0)
13
- parser (3.1.1.0)
12
+ json (2.6.2)
13
+ parallel (1.22.1)
14
+ parser (3.1.2.0)
14
15
  ast (~> 2.4.1)
15
16
  rainbow (3.1.1)
16
17
  rake (13.0.6)
17
- regexp_parser (2.2.1)
18
+ regexp_parser (2.5.0)
18
19
  rexml (3.2.5)
19
20
  rspec (3.11.0)
20
21
  rspec-core (~> 3.11.0)
@@ -25,23 +26,24 @@ GEM
25
26
  rspec-expectations (3.11.0)
26
27
  diff-lcs (>= 1.2.0, < 2.0)
27
28
  rspec-support (~> 3.11.0)
28
- rspec-mocks (3.11.0)
29
+ rspec-mocks (3.11.1)
29
30
  diff-lcs (>= 1.2.0, < 2.0)
30
31
  rspec-support (~> 3.11.0)
31
32
  rspec-support (3.11.0)
32
- rubocop (1.27.0)
33
+ rubocop (1.31.2)
34
+ json (~> 2.3)
33
35
  parallel (~> 1.10)
34
36
  parser (>= 3.1.0.0)
35
37
  rainbow (>= 2.2.2, < 4.0)
36
38
  regexp_parser (>= 1.8, < 3.0)
37
- rexml
38
- rubocop-ast (>= 1.16.0, < 2.0)
39
+ rexml (>= 3.2.5, < 4.0)
40
+ rubocop-ast (>= 1.18.0, < 2.0)
39
41
  ruby-progressbar (~> 1.7)
40
42
  unicode-display_width (>= 1.4.0, < 3.0)
41
- rubocop-ast (1.16.0)
43
+ rubocop-ast (1.19.1)
42
44
  parser (>= 3.1.1.0)
43
45
  ruby-progressbar (1.11.0)
44
- unicode-display_width (2.1.0)
46
+ unicode-display_width (2.2.0)
45
47
 
46
48
  PLATFORMS
47
49
  x86_64-linux
@@ -53,4 +55,4 @@ DEPENDENCIES
53
55
  sevencop!
54
56
 
55
57
  BUNDLED WITH
56
- 2.3.16
58
+ 2.3.17
data/README.md CHANGED
@@ -27,12 +27,22 @@ gem install sevencop
27
27
 
28
28
  ## Usage
29
29
 
30
+ Require sevencop from your .rubocop.yml:
31
+
30
32
  ```yaml
31
33
  # .rubocop.yml
32
34
  require:
33
35
  - sevencop
34
36
  ```
35
37
 
38
+ then enable the cops you want to use:
39
+
40
+ ```yaml
41
+ # .rubocop.yml
42
+ Sevencop/BelongsToOptional:
43
+ Enabled: true
44
+ ```
45
+
36
46
  ## Cops
37
47
 
38
48
  All cops are `Enabled: false` by default.
@@ -59,7 +69,7 @@ This is useful for migration of `config.active_record.belongs_to_required_by_def
59
69
 
60
70
  ### Sevencop/HashLiteralOrder
61
71
 
62
- Sort Hash literal by key.
72
+ Sort Hash literal entries by key.
63
73
 
64
74
  ```ruby
65
75
  # bad
@@ -135,3 +145,15 @@ validates :name, uniqueness: { allow_nil: true, scope: :user_id, case_sensitive:
135
145
  ```
136
146
 
137
147
  Useful to keep the same behavior between Rails 6.0 and 6.1 where case insensitive collation is used in MySQL.
148
+
149
+ ### Sevencop/WhereNot
150
+
151
+ Identifies passing multi-elements Hash literal to `where.not`.
152
+
153
+ ```ruby
154
+ # bad
155
+ where.not(key1: value1, key2: value2)
156
+
157
+ # good
158
+ where.not(key1: value1).where.not(key2: value2)
159
+ ```
data/config/default.yml CHANGED
@@ -25,9 +25,23 @@ Sevencop/RedundantExistenceCheck:
25
25
  Safe: false
26
26
  VersionAdded: '0.1'
27
27
 
28
+ Sevencop/ToSWithArgument:
29
+ Description: |
30
+ Identifies passing any argument to `#to_s`.
31
+ Enabled: false
32
+ Safe: false
33
+ VersionAdded: '0.8'
34
+
28
35
  Sevencop/UniquenessValidatorExplicitCaseSensitivity:
29
36
  Description: |
30
37
  Specify :case_sensitivity option on use of UniquenessValidator.
31
38
  Enabled: false
32
39
  Safe: false
33
40
  VersionAdded: '0.3'
41
+
42
+ Sevencop/WhereNot:
43
+ Description: |
44
+ Identifies passing multi-elements Hash literal to `where.not`.
45
+ Enabled: false
46
+ Safe: false
47
+ VersionAdded: '0.7'
@@ -63,12 +63,6 @@ module RuboCop
63
63
  ].join
64
64
  end
65
65
 
66
- # @param [RuboCop::AST::HashNode] node
67
- # @return [Boolean]
68
- def multi_line?(node)
69
- node.source.include?("\n")
70
- end
71
-
72
66
  # @param [Array<RuboCop::AST::PairNode>] pairs
73
67
  # @return [Array<RuboCop::AST::PairNode>]
74
68
  def sort(pairs)
@@ -36,8 +36,8 @@ module RuboCop
36
36
  (send
37
37
  _ _
38
38
  {
39
- (str /field\(.+\)/) |
40
- (dstr <(str /field\(.+\)/) ...>)
39
+ (str /field\(.+\)/i) |
40
+ (dstr <(str /field\(.+\)/i) ...>)
41
41
  }
42
42
  ...
43
43
  )
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sevencop
6
+ # Identifies passing any argument to `#to_s`.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # to_s(:delimited)
12
+ #
13
+ # # good
14
+ # to_formatted_s(:delimited)
15
+ #
16
+ class ToSWithArgument < Base
17
+ extend AutoCorrector
18
+
19
+ MSG = 'Use `to_formatted_s(...)` instead of `to_s(...)`.'
20
+
21
+ RESTRICT_ON_SEND = %i[to_s].freeze
22
+
23
+ def_node_matcher :to_s_with_any_argument?, <<~PATTERN
24
+ (call _ :to_s _+)
25
+ PATTERN
26
+
27
+ def on_send(node)
28
+ return unless to_s_with_any_argument?(node)
29
+
30
+ add_offense(node) do |rewriter|
31
+ rewriter.replace(
32
+ node.loc.selector,
33
+ 'to_formatted_s'
34
+ )
35
+ end
36
+ end
37
+ alias on_csend on_send
38
+ end
39
+ end
40
+ end
41
+ end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cop
5
5
  module Sevencop
6
6
  # Identifies use of UniquenessValidator without :case_sensitive option.
7
- # This is useful to keep the same behavior between Rails 6.0 and 6.1 where case insensitive collation is used in MySQL.
7
+ # Useful to keep the same behavior between Rails 6.0 and 6.1 where case insensitive collation is used in MySQL.
8
8
  #
9
9
  # @safety
10
10
  # This cop is unsafe because it can register a false positive.
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sevencop
6
+ # Identifies passing multi-elements Hash literal to `where.not`.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # where.not(key1: value1, key2: value2)
12
+ #
13
+ # # good
14
+ # where.not(key1: value1).where.not(key2: value2)
15
+ #
16
+ class WhereNot < Base
17
+ extend AutoCorrector
18
+
19
+ MSG = 'Use `where.not(key1: value1).where.not(key2: value2)` style.'
20
+
21
+ def_node_matcher :where_not_with_multiple_elements_hash?, <<~PATTERN
22
+ (send
23
+ (send _ :where) :not
24
+ ({ hash | kwargs }
25
+ (pair _ _)
26
+ (pair _ _)+))
27
+ PATTERN
28
+
29
+ def on_send(node)
30
+ return unless where_not_with_multiple_elements_hash?(node)
31
+
32
+ add_offense(node) do |corrector|
33
+ pairs = node.children[2].children
34
+ last_end_pos = pairs[0].location.expression.end_pos
35
+ pairs[1..].each do |pair|
36
+ corrector.remove(pair.location.expression.with(begin_pos: last_end_pos))
37
+ last_end_pos = pair.location.expression.end_pos
38
+ corrector.insert_after(node.location.expression, ".where.not(#{pair.source})")
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sevencop
4
- VERSION = '0.6.1'
4
+ VERSION = '0.8.1'
5
5
  end
data/lib/sevencop.rb CHANGED
@@ -10,7 +10,9 @@ require_relative 'rubocop/cop/sevencop/belongs_to_optional'
10
10
  require_relative 'rubocop/cop/sevencop/hash_literal_order'
11
11
  require_relative 'rubocop/cop/sevencop/order_field'
12
12
  require_relative 'rubocop/cop/sevencop/redundant_existence_check'
13
+ require_relative 'rubocop/cop/sevencop/to_s_with_argument'
13
14
  require_relative 'rubocop/cop/sevencop/uniqueness_validator_explicit_case_sensitivity'
15
+ require_relative 'rubocop/cop/sevencop/where_not'
14
16
 
15
17
  module Sevencop
16
18
  PROJECT_ROOT = ::Pathname.new(__dir__).parent.expand_path.freeze
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.6.1
4
+ version: 0.8.1
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-07-03 00:00:00.000000000 Z
11
+ date: 2022-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -45,7 +45,9 @@ files:
45
45
  - lib/rubocop/cop/sevencop/hash_literal_order.rb
46
46
  - lib/rubocop/cop/sevencop/order_field.rb
47
47
  - lib/rubocop/cop/sevencop/redundant_existence_check.rb
48
+ - lib/rubocop/cop/sevencop/to_s_with_argument.rb
48
49
  - lib/rubocop/cop/sevencop/uniqueness_validator_explicit_case_sensitivity.rb
50
+ - lib/rubocop/cop/sevencop/where_not.rb
49
51
  - lib/sevencop.rb
50
52
  - lib/sevencop/inject.rb
51
53
  - lib/sevencop/version.rb