sevencop 0.6.1 → 0.8.1

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: 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