sevencop 0.11.1 → 0.12.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: f5145711881e4ff729c76af2973e3c7af5c4ad5d7a72318dc28ea4346b7530e0
4
- data.tar.gz: 3bade2432dfd3a659d4c689c005cc36c0ecb16da14dd99d338a815876ec8951f
3
+ metadata.gz: adcb3382c32455ca63651bf5593974e773cf00dfd0b3d14955541c6ce219c6c7
4
+ data.tar.gz: d6f50b292bb6f56c0f6ec36fc4271c931af4c1c46cef9b8c14a2505cf984f8ed
5
5
  SHA512:
6
- metadata.gz: 8011ea16ecaf3d1e8eb34156ca6b30f1f545d3d01406a4a1fa189b5cfb5bd74a4b0a6d177762c750023ac50c645e1ef8378028d44f4c710ea6744577fa7c5a64
7
- data.tar.gz: '0392eb84b36bff0120d79e637d84fa3d893935d10c4dfd5dbd004bacdff75bf524137dc38976705e69aaa6c420fe4ad01160b89c36a49bc6c764d8cccae4079c'
6
+ metadata.gz: 552d6582fc4aa3baa550afd6d27477c822e4f098b470c0c038a36380c6ab74f9962a27e8f04be05cc60586be43376de1ec20a0a5b56587d71b24d3fa36e8e4cb
7
+ data.tar.gz: 05df622c8de515879b816077ba5fc40cd47858c1666390beac8d2ac29e86c1983921d5d8964b8b7de64106e789f3217032b6338a9988442207dbe5aeb62a8031
data/.rubocop.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  require:
2
2
  - rubocop/cop/internal_affairs
3
+ - rubocop-performance
4
+ - rubocop-rake
5
+ - rubocop-rspec
3
6
 
4
7
  AllCops:
5
8
  NewCops: enable
@@ -9,5 +12,18 @@ AllCops:
9
12
  Metrics:
10
13
  Enabled: false
11
14
 
15
+ RSpec:
16
+ Language:
17
+ Expectations:
18
+ - expect_correction
19
+ - expect_no_offenses
20
+ - expect_offense
21
+
22
+ RSpec/ExampleLength:
23
+ Enabled: false
24
+
25
+ RSpec/MultipleExpectations:
26
+ Enabled: false
27
+
12
28
  Style/Documentation:
13
29
  Enabled: false
data/Gemfile CHANGED
@@ -5,6 +5,9 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in sevencop.gemspec
6
6
  gemspec
7
7
 
8
- gem 'rake', '~> 13.0'
9
- gem 'rspec', '~> 3.0'
10
- gem 'rubocop', '~> 1.21'
8
+ gem 'rake'
9
+ gem 'rspec'
10
+ gem 'rubocop'
11
+ gem 'rubocop-performance'
12
+ gem 'rubocop-rake'
13
+ gem 'rubocop-rspec'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sevencop (0.11.1)
4
+ sevencop (0.12.1)
5
5
  rubocop
6
6
 
7
7
  GEM
@@ -11,7 +11,7 @@ GEM
11
11
  diff-lcs (1.5.0)
12
12
  json (2.6.2)
13
13
  parallel (1.22.1)
14
- parser (3.1.2.0)
14
+ parser (3.1.2.1)
15
15
  ast (~> 2.4.1)
16
16
  rainbow (3.1.1)
17
17
  rake (13.0.6)
@@ -23,35 +23,45 @@ GEM
23
23
  rspec-mocks (~> 3.11.0)
24
24
  rspec-core (3.11.0)
25
25
  rspec-support (~> 3.11.0)
26
- rspec-expectations (3.11.0)
26
+ rspec-expectations (3.11.1)
27
27
  diff-lcs (>= 1.2.0, < 2.0)
28
28
  rspec-support (~> 3.11.0)
29
29
  rspec-mocks (3.11.1)
30
30
  diff-lcs (>= 1.2.0, < 2.0)
31
31
  rspec-support (~> 3.11.0)
32
- rspec-support (3.11.0)
33
- rubocop (1.31.2)
32
+ rspec-support (3.11.1)
33
+ rubocop (1.36.0)
34
34
  json (~> 2.3)
35
35
  parallel (~> 1.10)
36
- parser (>= 3.1.0.0)
36
+ parser (>= 3.1.2.1)
37
37
  rainbow (>= 2.2.2, < 4.0)
38
38
  regexp_parser (>= 1.8, < 3.0)
39
39
  rexml (>= 3.2.5, < 4.0)
40
- rubocop-ast (>= 1.18.0, < 2.0)
40
+ rubocop-ast (>= 1.20.1, < 2.0)
41
41
  ruby-progressbar (~> 1.7)
42
42
  unicode-display_width (>= 1.4.0, < 3.0)
43
- rubocop-ast (1.19.1)
43
+ rubocop-ast (1.21.0)
44
44
  parser (>= 3.1.1.0)
45
+ rubocop-performance (1.15.0)
46
+ rubocop (>= 1.7.0, < 2.0)
47
+ rubocop-ast (>= 0.4.0)
48
+ rubocop-rake (0.6.0)
49
+ rubocop (~> 1.0)
50
+ rubocop-rspec (2.13.1)
51
+ rubocop (~> 1.33)
45
52
  ruby-progressbar (1.11.0)
46
- unicode-display_width (2.2.0)
53
+ unicode-display_width (2.3.0)
47
54
 
48
55
  PLATFORMS
49
56
  x86_64-linux
50
57
 
51
58
  DEPENDENCIES
52
- rake (~> 13.0)
53
- rspec (~> 3.0)
54
- rubocop (~> 1.21)
59
+ rake
60
+ rspec
61
+ rubocop
62
+ rubocop-performance
63
+ rubocop-rake
64
+ rubocop-rspec
55
65
  sevencop!
56
66
 
57
67
  BUNDLED WITH
data/README.md CHANGED
@@ -47,6 +47,27 @@ Sevencop/BelongsToOptional:
47
47
 
48
48
  All cops are `Enabled: false` by default.
49
49
 
50
+ ### Sevencop/AutoloadOrdered
51
+
52
+ Sort `autoload` in alphabetical order within their section.
53
+
54
+ ```ruby
55
+ # bad
56
+ autoload :B, 'b'
57
+ autoload :A, 'a'
58
+
59
+ # good
60
+ autoload :A, 'a'
61
+ autoload :B, 'b'
62
+
63
+ # good
64
+ autoload :B, 'b'
65
+ autoload :D, 'd'
66
+
67
+ autoload :A, 'a'
68
+ autoload :C, 'a'
69
+ ```
70
+
50
71
  ### Sevencop/BelongsToOptional
51
72
 
52
73
  Force `belongs_to` with `optional: true` option.
data/config/default.yml CHANGED
@@ -1,3 +1,9 @@
1
+ Sevencop/AutoloadOrdered:
2
+ Description: |
3
+ Sort `autoload` in alphabetical order.
4
+ Enabled: false
5
+ VersionAdded: '0.12.0'
6
+
1
7
  Sevencop/BelongsToOptional:
2
8
  Description: |
3
9
  Force `belongs_to` with `optional: true` option.
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sevencop
6
+ # Sort `autoload` in alphabetical order within their section.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # autoload :B, 'b'
11
+ # autoload :A, 'a'
12
+ #
13
+ # # good
14
+ # autoload :A, 'a'
15
+ # autoload :B, 'b'
16
+ #
17
+ # # good
18
+ # autoload :A, 'a'
19
+ # autoload :D, 'd'
20
+ #
21
+ # autoload :B, 'b'
22
+ # autoload :C, 'c'
23
+ class AutoloadOrdered < Base
24
+ extend AutoCorrector
25
+
26
+ include RangeHelp
27
+
28
+ MSG = 'Sort `autoload` in alphabetical order within their section.'
29
+
30
+ RESTRICT_ON_SEND = %i[
31
+ autoload
32
+ ].freeze
33
+
34
+ # @param node [RuboCop::AST::SendNode]
35
+ def on_send(node)
36
+ previous_older_autoload = find_previous_older_autoload(node)
37
+ return unless previous_older_autoload
38
+
39
+ add_offense(node) do |corrector|
40
+ swap(
41
+ range_by_whole_lines(
42
+ previous_older_autoload.location.expression,
43
+ include_final_newline: true
44
+ ),
45
+ range_by_whole_lines(
46
+ node.location.expression,
47
+ include_final_newline: true
48
+ ),
49
+ corrector: corrector
50
+ )
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ # @param node [RuboCop::AST::SendNode]
57
+ # @return [RuboCop::AST::SendNode]
58
+ def find_previous_older_autoload(node)
59
+ node.left_siblings.find do |sibling|
60
+ next unless sibling.send_type?
61
+ next unless sibling.method?(:autoload)
62
+ next unless in_same_section?(sibling, node)
63
+
64
+ node.first_argument.source < sibling.first_argument.source
65
+ end
66
+ end
67
+
68
+ # @param node1 [RuboCop::AST::SendNode]
69
+ # @param node2 [RuboCop::AST::SendNode]
70
+ # @return [Boolean]
71
+ def in_same_section?(node1, node2)
72
+ !node1.location.expression.with(
73
+ end_pos: node2.location.expression.end_pos
74
+ ).source.include?("\n\n")
75
+ end
76
+
77
+ # @param range1 [Paresr::Source::Range]
78
+ # @param range2 [Paresr::Source::Range]
79
+ # @param corrector [RuboCop::AST::Corrector]
80
+ def swap(range1, range2, corrector:)
81
+ corrector.insert_before(range1, range2.source)
82
+ corrector.remove(range2)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -49,6 +49,7 @@ module RuboCop
49
49
  )
50
50
  end
51
51
  end
52
+ alias on_numblock on_block
52
53
 
53
54
  private
54
55
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sevencop
4
- VERSION = '0.11.1'
4
+ VERSION = '0.12.1'
5
5
  end
data/lib/sevencop.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative 'sevencop/rubocop_extension'
4
4
  require_relative 'sevencop/version'
5
5
 
6
+ require_relative 'rubocop/cop/sevencop/autoload_ordered'
6
7
  require_relative 'rubocop/cop/sevencop/belongs_to_optional'
7
8
  require_relative 'rubocop/cop/sevencop/factory_bot_create_list'
8
9
  require_relative 'rubocop/cop/sevencop/hash_literal_order'
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.11.1
4
+ version: 0.12.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-09-21 00:00:00.000000000 Z
11
+ date: 2022-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -41,6 +41,7 @@ files:
41
41
  - README.md
42
42
  - Rakefile
43
43
  - config/default.yml
44
+ - lib/rubocop/cop/sevencop/autoload_ordered.rb
44
45
  - lib/rubocop/cop/sevencop/belongs_to_optional.rb
45
46
  - lib/rubocop/cop/sevencop/factory_bot_create_list.rb
46
47
  - lib/rubocop/cop/sevencop/hash_literal_order.rb