sevencop 0.6.1 → 0.7.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: f744cb31d07cadbb924e1ce690b85ee2c771ff9264333c153fcc52244d596dd6
4
- data.tar.gz: c594faf493963d8f188559ca1f77b7b8570c05b5936356d6fc259de2417200a7
3
+ metadata.gz: 435ef77ac8fd3b1e598c538068a02cf91bce3e1d3143bd1e48b45ed80b9a8cd1
4
+ data.tar.gz: 8bc5d65cde82f92a7f6457041cd49a1448af80d1915841a44a4fc2c22b7b0877
5
5
  SHA512:
6
- metadata.gz: ee20da1638b96c6256a257b6602afcc90a22b33c4988fd8a44b50d5f93b7ab311e7ce052f3aeef4dd0b08c40028cb1c371184a3569e8656086a96b685b62d4d9
7
- data.tar.gz: 266bdf4e223ce62e269da6e850b22491d8b1dc052a8f686b972c895a86d29d067b4105e1716c78c9b5f7c2cd231b567ac1b26e58cac656f45843f2dabf5b432f
6
+ metadata.gz: f53c512de8a6c32b2c4a409dc274dc22149c3ef15b680c8223e58a74bcac0015ccb3dd2d2e397fbb410bdf6f949e9f3d1de645c8332204a88dce7ab6ca5194da
7
+ data.tar.gz: 2fd6cc8caf282c894b41744ae7df09d54017ce02d82ac3ab4925c85cde00a1aa0b8fd0ebc0fac5ec70f25dd8ab5fbfa79160102456a2a58ffafd3da1ffb92689
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,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.7.0 - 2022-07-15
6
+
7
+ ### Added
8
+
9
+ - Add `Sevencop/WhereNot` cop.
10
+
5
11
  ## 0.6.1 - 2022-07-04
6
12
 
7
13
  ### 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.7.0)
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
@@ -31,3 +31,10 @@ Sevencop/UniquenessValidatorExplicitCaseSensitivity:
31
31
  Enabled: false
32
32
  Safe: false
33
33
  VersionAdded: '0.3'
34
+
35
+ Sevencop/WhereNot:
36
+ Description: |
37
+ Identifies passing multi-elements Hash literal to `where.not`.
38
+ Enabled: false
39
+ Safe: false
40
+ 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)
@@ -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.7.0'
5
5
  end
data/lib/sevencop.rb CHANGED
@@ -11,6 +11,7 @@ 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
13
  require_relative 'rubocop/cop/sevencop/uniqueness_validator_explicit_case_sensitivity'
14
+ require_relative 'rubocop/cop/sevencop/where_not'
14
15
 
15
16
  module Sevencop
16
17
  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.7.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-07-03 00:00:00.000000000 Z
11
+ date: 2022-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -46,6 +46,7 @@ files:
46
46
  - lib/rubocop/cop/sevencop/order_field.rb
47
47
  - lib/rubocop/cop/sevencop/redundant_existence_check.rb
48
48
  - lib/rubocop/cop/sevencop/uniqueness_validator_explicit_case_sensitivity.rb
49
+ - lib/rubocop/cop/sevencop/where_not.rb
49
50
  - lib/sevencop.rb
50
51
  - lib/sevencop/inject.rb
51
52
  - lib/sevencop/version.rb