sevencop 0.14.0 → 0.16.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 +4 -4
- data/.rubocop.yml +12 -0
- data/Gemfile.lock +1 -1
- data/README.md +15 -31
- data/config/default.yml +23 -17
- data/lib/rubocop/cop/sevencop/autoload_ordered.rb +21 -11
- data/lib/rubocop/cop/sevencop/method_definition_arguments_multiline.rb +4 -1
- data/lib/rubocop/cop/sevencop/{method_definition_keyword_arguments_ordered.rb → method_definition_keyword_argument_ordered.rb} +1 -1
- data/lib/rubocop/cop/sevencop/method_definition_ordered.rb +14 -35
- data/lib/rubocop/cop/sevencop/{belongs_to_optional.rb → rails_belongs_to_optional.rb} +1 -1
- data/lib/rubocop/cop/sevencop/{inferred_spec_type.rb → rails_inferred_spec_type.rb} +5 -2
- data/lib/rubocop/cop/sevencop/{order_field.rb → rails_order_field.rb} +1 -1
- data/lib/rubocop/cop/sevencop/{uniqueness_validator_explicit_case_sensitivity.rb → rails_uniqueness_validator_explicit_case_sensitivity.rb} +1 -1
- data/lib/rubocop/cop/sevencop/{where_not.rb → rails_where_not.rb} +4 -4
- data/lib/rubocop/cop/sevencop/require_ordered.rb +94 -0
- data/lib/sevencop/cop_concerns/ordered.rb +45 -0
- data/lib/sevencop/cop_concerns.rb +7 -0
- data/lib/sevencop/version.rb +1 -1
- data/lib/sevencop.rb +8 -6
- data/sevencop.gemspec +2 -2
- metadata +13 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c55fa975db18f38f073127cff1b736321d599328040959966ca3c7ee68e576f4
|
4
|
+
data.tar.gz: a976b6455cf9083a81dca72c0ecd2b7df79e963ca1fd49124d6c756799975ee3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f9f873aead1ae719deb96b16f46850fb8daa55a81dbb7709f548352b624bffdb34f639176f5580bbc25bd279c8acd679b175b0a9755c89260c23ef303975a18
|
7
|
+
data.tar.gz: 43e716bfb540bfa7a607aeefae2bef61334518b636d277fcff4155af7145734d17f6eec10494a72b09e40b3d6736175f28b84db18091f89dad4c179bd5479320
|
data/.rubocop.yml
CHANGED
@@ -26,6 +26,18 @@ RSpec/ExampleLength:
|
|
26
26
|
RSpec/MultipleExpectations:
|
27
27
|
Enabled: false
|
28
28
|
|
29
|
+
Sevencop/AutoloadOrdered:
|
30
|
+
Enabled: true
|
31
|
+
|
32
|
+
Sevencop/HashElementOrdered:
|
33
|
+
Enabled: true
|
34
|
+
|
35
|
+
Sevencop/MethodDefinitionArgumentsMultiline:
|
36
|
+
Enabled: true
|
37
|
+
|
38
|
+
Sevencop/MethodDefinitionKeywordArgumentOrdered:
|
39
|
+
Enabled: true
|
40
|
+
|
29
41
|
Sevencop/MethodDefinitionOrdered:
|
30
42
|
Enabled: true
|
31
43
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,58 +2,42 @@
|
|
2
2
|
|
3
3
|
[](https://github.com/r7kamura/sevencop/actions/workflows/test.yml)
|
4
4
|
|
5
|
-
|
5
|
+
Opinionated custom cops for [RuboCop](https://github.com/rubocop/rubocop).
|
6
6
|
|
7
|
-
##
|
7
|
+
## Usage
|
8
8
|
|
9
|
-
|
9
|
+
Install `sevencop` gem:
|
10
10
|
|
11
11
|
```ruby
|
12
|
+
# Gemfile
|
12
13
|
gem 'sevencop', require: false
|
13
14
|
```
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
```
|
18
|
-
bundle install
|
19
|
-
```
|
20
|
-
|
21
|
-
Or install it yourself as:
|
22
|
-
|
23
|
-
```
|
24
|
-
gem install sevencop
|
25
|
-
```
|
26
|
-
|
27
|
-
## Usage
|
28
|
-
|
29
|
-
Require sevencop from your .rubocop.yml:
|
16
|
+
then require `sevencop` and enable the cops you want to use on .rubocop.yml:
|
30
17
|
|
31
18
|
```yaml
|
32
19
|
# .rubocop.yml
|
33
20
|
require:
|
34
21
|
- sevencop
|
35
|
-
```
|
36
22
|
|
37
|
-
|
38
|
-
|
39
|
-
```yaml
|
40
|
-
# .rubocop.yml
|
41
|
-
Sevencop/BelongsToOptional:
|
23
|
+
Sevencop/MethodDefinitionOrdered:
|
42
24
|
Enabled: true
|
43
25
|
```
|
44
26
|
|
45
27
|
## Cops
|
46
28
|
|
47
|
-
|
29
|
+
Choose the cops you want to use and enable them on your .rubocop.yml.
|
48
30
|
|
49
|
-
- [Sevencop/
|
31
|
+
- [Sevencop/AutoloadOrdered](lib/rubocop/cop/sevencop/autoload_ordered.rb)
|
50
32
|
- [Sevencop/HashElementOrdered](lib/rubocop/cop/sevencop/hash_element_ordered.rb)
|
51
|
-
- [Sevencop/InferredSpecType](lib/rubocop/cop/sevencop/inferred_spec_type.rb)
|
52
33
|
- [Sevencop/MethodDefinitionArgumentsMultiline](lib/rubocop/cop/sevencop/method_definition_arguments_multiline.rb)
|
53
|
-
- [Sevencop/
|
34
|
+
- [Sevencop/MethodDefinitionKeywordArgumentOrdered](lib/rubocop/cop/sevencop/method_definition_keyword_argument_ordered.rb)
|
54
35
|
- [Sevencop/MethodDefinitionOrdered](lib/rubocop/cop/sevencop/method_definition_ordered.rb)
|
55
|
-
- [Sevencop/
|
56
|
-
- [Sevencop/
|
57
|
-
- [Sevencop/
|
36
|
+
- [Sevencop/RailsBelongsToOptional](lib/rubocop/cop/sevencop/rails_belongs_to_optional.rb)
|
37
|
+
- [Sevencop/RailsInferredSpecType](lib/rubocop/cop/sevencop/rails_inferred_spec_type.rb)
|
38
|
+
- [Sevencop/RailsOrderField](lib/rubocop/cop/sevencop/rails_order_field.rb)
|
39
|
+
- [Sevencop/RailsUniquenessValidatorExplicitCaseSensitivity](lib/rubocop/cop/sevencop/rails_uniqueness_validator_explicit_case_sensitivity.rb)
|
40
|
+
- [Sevencop/RailsWhereNot](lib/rubocop/cop/sevencop/rails_where_not.rb)
|
41
|
+
- [Sevencop/RequireOrdered](lib/rubocop/cop/sevencop/require_ordered.rb)
|
58
42
|
|
59
43
|
Note that all cops are `Enabled: false` by default.
|
data/config/default.yml
CHANGED
@@ -4,25 +4,12 @@ Sevencop/AutoloadOrdered:
|
|
4
4
|
Enabled: false
|
5
5
|
VersionAdded: '0.12'
|
6
6
|
|
7
|
-
Sevencop/BelongsToOptional:
|
8
|
-
Description: |
|
9
|
-
Force `belongs_to` with `optional: true` option.
|
10
|
-
Enabled: false
|
11
|
-
Safe: false
|
12
|
-
VersionAdded: '0.5'
|
13
|
-
|
14
7
|
Sevencop/HashElementOrdered:
|
15
8
|
Description: |
|
16
9
|
Sort Hash elements by key.
|
17
10
|
Enabled: false
|
18
11
|
VersionAdded: '0.6'
|
19
12
|
|
20
|
-
Sevencop/InferredSpecType:
|
21
|
-
Description: |
|
22
|
-
Identifies redundant spec type.
|
23
|
-
Enabled: false
|
24
|
-
VersionAdded: '0.9'
|
25
|
-
|
26
13
|
Sevencop/MethodDefinitionArgumentsMultiline:
|
27
14
|
Description: |
|
28
15
|
Inserts new lines between method definition arguments.
|
@@ -35,29 +22,48 @@ Sevencop/MethodDefinitionOrdered:
|
|
35
22
|
Enabled: false
|
36
23
|
VersionAdded: '0.14'
|
37
24
|
|
38
|
-
Sevencop/
|
25
|
+
Sevencop/MethodDefinitionKeywordArgumentOrdered:
|
39
26
|
Description: |
|
40
27
|
Sort method definition keyword arguments in alphabetical order.
|
41
28
|
Enabled: false
|
42
29
|
VersionAdded: '0.13'
|
43
30
|
|
44
|
-
Sevencop/
|
31
|
+
Sevencop/RailsBelongsToOptional:
|
32
|
+
Description: |
|
33
|
+
Force `belongs_to` with `optional: true` option.
|
34
|
+
Enabled: false
|
35
|
+
Safe: false
|
36
|
+
VersionAdded: '0.5'
|
37
|
+
|
38
|
+
Sevencop/RailsInferredSpecType:
|
39
|
+
Description: |
|
40
|
+
Identifies redundant spec type.
|
41
|
+
Enabled: false
|
42
|
+
VersionAdded: '0.9'
|
43
|
+
|
44
|
+
Sevencop/RailsOrderField:
|
45
45
|
Description: |
|
46
46
|
Wrap safe SQL String by `Arel.sql`.
|
47
47
|
Enabled: false
|
48
48
|
Safe: false
|
49
49
|
VersionAdded: '0.4'
|
50
50
|
|
51
|
-
Sevencop/
|
51
|
+
Sevencop/RailsUniquenessValidatorExplicitCaseSensitivity:
|
52
52
|
Description: |
|
53
53
|
Specify :case_sensitivity option on use of UniquenessValidator.
|
54
54
|
Enabled: false
|
55
55
|
Safe: false
|
56
56
|
VersionAdded: '0.3'
|
57
57
|
|
58
|
-
Sevencop/
|
58
|
+
Sevencop/RailsWhereNot:
|
59
59
|
Description: |
|
60
60
|
Identifies passing multi-elements Hash literal to `where.not`.
|
61
61
|
Enabled: false
|
62
62
|
Safe: false
|
63
63
|
VersionAdded: '0.7'
|
64
|
+
|
65
|
+
Sevencop/RequireOrdered:
|
66
|
+
Description: |
|
67
|
+
Sort `require` and `require_relative` in alphabetical order.
|
68
|
+
Enabled: false
|
69
|
+
VersionAdded: '0.16'
|
@@ -25,6 +25,8 @@ module RuboCop
|
|
25
25
|
|
26
26
|
include RangeHelp
|
27
27
|
|
28
|
+
include ::Sevencop::CopConcerns::Ordered
|
29
|
+
|
28
30
|
MSG = 'Sort `autoload` in alphabetical order.'
|
29
31
|
|
30
32
|
RESTRICT_ON_SEND = %i[
|
@@ -32,14 +34,15 @@ module RuboCop
|
|
32
34
|
].freeze
|
33
35
|
|
34
36
|
# @param node [RuboCop::AST::SendNode]
|
37
|
+
# @return [void]
|
35
38
|
def on_send(node)
|
36
|
-
|
37
|
-
return unless
|
39
|
+
previous_older_sibling = find_previous_older_sibling(node)
|
40
|
+
return unless previous_older_sibling
|
38
41
|
|
39
42
|
add_offense(node) do |corrector|
|
40
43
|
swap(
|
41
44
|
range_by_whole_lines(
|
42
|
-
|
45
|
+
previous_older_sibling.location.expression,
|
43
46
|
include_final_newline: true
|
44
47
|
),
|
45
48
|
range_by_whole_lines(
|
@@ -54,12 +57,12 @@ module RuboCop
|
|
54
57
|
private
|
55
58
|
|
56
59
|
# @param node [RuboCop::AST::SendNode]
|
57
|
-
# @return [RuboCop::AST::SendNode]
|
58
|
-
def
|
59
|
-
node.left_siblings.find do |sibling|
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
# @return [RuboCop::AST::SendNode, nil]
|
61
|
+
def find_previous_older_sibling(node)
|
62
|
+
node.left_siblings.grep(::RuboCop::AST::Node).reverse.find do |sibling|
|
63
|
+
break unless sibling.send_type?
|
64
|
+
break unless sibling.method?(:autoload)
|
65
|
+
break unless in_same_section?(sibling, node)
|
63
66
|
|
64
67
|
node.first_argument.source < sibling.first_argument.source
|
65
68
|
end
|
@@ -68,7 +71,10 @@ module RuboCop
|
|
68
71
|
# @param node1 [RuboCop::AST::SendNode]
|
69
72
|
# @param node2 [RuboCop::AST::SendNode]
|
70
73
|
# @return [Boolean]
|
71
|
-
def in_same_section?(
|
74
|
+
def in_same_section?(
|
75
|
+
node1,
|
76
|
+
node2
|
77
|
+
)
|
72
78
|
!node1.location.expression.with(
|
73
79
|
end_pos: node2.location.expression.end_pos
|
74
80
|
).source.include?("\n\n")
|
@@ -77,7 +83,11 @@ module RuboCop
|
|
77
83
|
# @param range1 [Paresr::Source::Range]
|
78
84
|
# @param range2 [Paresr::Source::Range]
|
79
85
|
# @param corrector [RuboCop::AST::Corrector]
|
80
|
-
def swap(
|
86
|
+
def swap(
|
87
|
+
range1,
|
88
|
+
range2,
|
89
|
+
corrector:
|
90
|
+
)
|
81
91
|
corrector.insert_before(range1, range2.source)
|
82
92
|
corrector.remove(range2)
|
83
93
|
end
|
@@ -39,7 +39,10 @@ module RuboCop
|
|
39
39
|
# @param corrector [RuboCop::AST::Corrector]
|
40
40
|
# @param node [RuboCop::AST::ArgsNode]
|
41
41
|
# @return [String]
|
42
|
-
def autocorrect(
|
42
|
+
def autocorrect(
|
43
|
+
corrector,
|
44
|
+
node
|
45
|
+
)
|
43
46
|
indent = ' ' * node.parent.location.expression.column
|
44
47
|
|
45
48
|
corrector.replace(
|
@@ -17,7 +17,7 @@ module RuboCop
|
|
17
17
|
#
|
18
18
|
# # good
|
19
19
|
# def foo(c:, d:, a: 2, b: 1); end
|
20
|
-
class
|
20
|
+
class MethodDefinitionKeywordArgumentOrdered < Base
|
21
21
|
extend AutoCorrector
|
22
22
|
|
23
23
|
MSG = 'Sort method definition keyword arguments in alphabetical order.'
|
@@ -30,24 +30,24 @@ module RuboCop
|
|
30
30
|
include RangeHelp
|
31
31
|
include VisibilityHelp
|
32
32
|
|
33
|
+
include ::Sevencop::CopConcerns::Ordered
|
34
|
+
|
33
35
|
MSG = 'Sort method definition in alphabetical order.'
|
34
36
|
|
35
37
|
# @param node [RuboCop::AST::DefNode]
|
38
|
+
# @return [void]
|
36
39
|
def on_def(node)
|
37
40
|
previous_older_sibling = find_previous_older_sibling(node)
|
38
41
|
return unless previous_older_sibling
|
39
42
|
|
40
|
-
add_offense(
|
43
|
+
add_offense(
|
44
|
+
range_with_comments(node)
|
45
|
+
) do |corrector|
|
41
46
|
swap(
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
range_by_whole_lines(
|
47
|
-
range_with_comments(node),
|
48
|
-
include_final_newline: true
|
49
|
-
),
|
50
|
-
corrector: corrector
|
47
|
+
range_with_comments_and_lines(previous_older_sibling),
|
48
|
+
range_with_comments_and_lines(node),
|
49
|
+
corrector: corrector,
|
50
|
+
newline: true
|
51
51
|
)
|
52
52
|
end
|
53
53
|
end
|
@@ -56,7 +56,7 @@ module RuboCop
|
|
56
56
|
private
|
57
57
|
|
58
58
|
# @param node [RuboCop::AST::DefNode]
|
59
|
-
# @return [RuboCop::AST::DefNode]
|
59
|
+
# @return [RuboCop::AST::DefNode, nil]
|
60
60
|
def find_previous_older_sibling(node)
|
61
61
|
previous_siblings_in_same_section_of(node).find do |sibling|
|
62
62
|
next if sibling.type != node.type
|
@@ -68,21 +68,11 @@ module RuboCop
|
|
68
68
|
# @param node [RuboCop::AST::Node]
|
69
69
|
# @return [Array<RuboCop::AST::Node>]
|
70
70
|
def previous_siblings_in_same_section_of(node)
|
71
|
-
|
71
|
+
siblings = node.left_siblings.grep(::RuboCop::AST::Node)
|
72
|
+
return siblings if node.defs_type?
|
72
73
|
|
73
|
-
|
74
|
+
siblings.reverse.take_while do |sibling|
|
74
75
|
!visibility_block?(sibling)
|
75
|
-
end.reverse
|
76
|
-
end
|
77
|
-
|
78
|
-
# @param node [RuboCop::AST::Node]
|
79
|
-
# @return [Paresr::Source::Range]
|
80
|
-
def range_with_comments(node)
|
81
|
-
comment = processed_source.ast_with_comments[node].first
|
82
|
-
if comment
|
83
|
-
node.location.expression.with(begin_pos: comment.location.expression.begin_pos)
|
84
|
-
else
|
85
|
-
node.location.expression
|
86
76
|
end
|
87
77
|
end
|
88
78
|
|
@@ -94,17 +84,6 @@ module RuboCop
|
|
94
84
|
node.method_name
|
95
85
|
]
|
96
86
|
end
|
97
|
-
|
98
|
-
# @param range1 [Paresr::Source::Range]
|
99
|
-
# @param range2 [Paresr::Source::Range]
|
100
|
-
# @param corrector [RuboCop::AST::Corrector]
|
101
|
-
def swap(range1, range2, corrector:)
|
102
|
-
corrector.insert_before(
|
103
|
-
range1,
|
104
|
-
"#{range2.source}\n"
|
105
|
-
)
|
106
|
-
corrector.remove(range2)
|
107
|
-
end
|
108
87
|
end
|
109
88
|
end
|
110
89
|
end
|
@@ -20,7 +20,7 @@ module RuboCop
|
|
20
20
|
# # spec/models/user_spec.rb
|
21
21
|
# RSpec.describe User, type: :request
|
22
22
|
#
|
23
|
-
class
|
23
|
+
class RailsInferredSpecType < Base
|
24
24
|
extend AutoCorrector
|
25
25
|
|
26
26
|
# @return [Array<Hash>]
|
@@ -81,7 +81,10 @@ module RuboCop
|
|
81
81
|
|
82
82
|
# @param [RuboCop::AST::Corrector] corrector
|
83
83
|
# @param [RuboCop::AST::Node] node
|
84
|
-
def autocorrect(
|
84
|
+
def autocorrect(
|
85
|
+
corrector,
|
86
|
+
node
|
87
|
+
)
|
85
88
|
corrector.remove(
|
86
89
|
node.location.expression.with(
|
87
90
|
begin_pos: node.left_sibling.location.expression.end_pos
|
@@ -26,7 +26,7 @@ module RuboCop
|
|
26
26
|
# # good
|
27
27
|
# validates :name, uniqueness: { allow_nil: true, scope: :user_id, case_sensitive: true }
|
28
28
|
#
|
29
|
-
class
|
29
|
+
class RailsUniquenessValidatorExplicitCaseSensitivity < Base
|
30
30
|
extend AutoCorrector
|
31
31
|
|
32
32
|
MSG = 'Specify :case_sensitivity option on use of UniquenessValidator.'
|
@@ -13,13 +13,13 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# where.not(key1: value1).where.not(key2: value2)
|
15
15
|
#
|
16
|
-
class
|
16
|
+
class RailsWhereNot < Base
|
17
17
|
extend AutoCorrector
|
18
18
|
|
19
19
|
MSG = 'Use `where.not(key1: value1).where.not(key2: value2)` style.'
|
20
20
|
|
21
|
-
# @!method
|
22
|
-
def_node_matcher :
|
21
|
+
# @!method rails_where_not_with_multiple_elements_hash?(node)
|
22
|
+
def_node_matcher :rails_where_not_with_multiple_elements_hash?, <<~PATTERN
|
23
23
|
(send
|
24
24
|
(send _ :where) :not
|
25
25
|
({ hash | kwargs }
|
@@ -28,7 +28,7 @@ module RuboCop
|
|
28
28
|
PATTERN
|
29
29
|
|
30
30
|
def on_send(node)
|
31
|
-
return unless
|
31
|
+
return unless rails_where_not_with_multiple_elements_hash?(node)
|
32
32
|
|
33
33
|
add_offense(node) do |corrector|
|
34
34
|
pairs = node.children[2].children
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Sevencop
|
6
|
+
# Sort `require` and `require_relative` in alphabetical order.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# require 'b'
|
11
|
+
# require 'a'
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# require 'a'
|
15
|
+
# require 'b'
|
16
|
+
#
|
17
|
+
# # bad
|
18
|
+
# require_relative 'b'
|
19
|
+
# require_relative 'a'
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# require_relative 'a'
|
23
|
+
# require_relative 'b'
|
24
|
+
#
|
25
|
+
# # good
|
26
|
+
# require 'a'
|
27
|
+
# require 'd'
|
28
|
+
#
|
29
|
+
# require 'b'
|
30
|
+
# require 'c'
|
31
|
+
#
|
32
|
+
# # good
|
33
|
+
# require 'b'
|
34
|
+
# require_relative 'c'
|
35
|
+
# require 'a'
|
36
|
+
class RequireOrdered < Base
|
37
|
+
extend AutoCorrector
|
38
|
+
|
39
|
+
include RangeHelp
|
40
|
+
|
41
|
+
include ::Sevencop::CopConcerns::Ordered
|
42
|
+
|
43
|
+
RESTRICT_ON_SEND = %i[
|
44
|
+
require
|
45
|
+
require_relative
|
46
|
+
].freeze
|
47
|
+
|
48
|
+
# @param node [RuboCop::AST::SendNode]
|
49
|
+
# @return [void]
|
50
|
+
def on_send(node)
|
51
|
+
previous_older_sibling = find_previous_older_sibling(node)
|
52
|
+
return unless previous_older_sibling
|
53
|
+
|
54
|
+
add_offense(
|
55
|
+
range_with_comments(node),
|
56
|
+
message: "Sort `#{node.method_name}` in alphabetical order."
|
57
|
+
) do |corrector|
|
58
|
+
swap(
|
59
|
+
range_with_comments_and_lines(previous_older_sibling),
|
60
|
+
range_with_comments_and_lines(node),
|
61
|
+
corrector: corrector
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
# @param node [RuboCop::AST::SendNode]
|
69
|
+
# @return [RuboCop::AST::SendNode, nil]
|
70
|
+
def find_previous_older_sibling(node)
|
71
|
+
node.left_siblings.reverse.find do |sibling|
|
72
|
+
break unless sibling.send_type?
|
73
|
+
break if sibling.method_name != node.method_name
|
74
|
+
break unless in_same_section?(sibling, node)
|
75
|
+
|
76
|
+
node.first_argument.source < sibling.first_argument.source
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# @param node1 [RuboCop::AST::SendNode]
|
81
|
+
# @param node2 [RuboCop::AST::SendNode]
|
82
|
+
# @return [Boolean]
|
83
|
+
def in_same_section?(
|
84
|
+
node1,
|
85
|
+
node2
|
86
|
+
)
|
87
|
+
!node1.location.expression.with(
|
88
|
+
end_pos: node2.location.expression.end_pos
|
89
|
+
).source.include?("\n\n")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sevencop
|
4
|
+
module CopConcerns
|
5
|
+
module Ordered
|
6
|
+
private
|
7
|
+
|
8
|
+
# @param node [RuboCop::AST::Node]
|
9
|
+
# @return [Paresr::Source::Range]
|
10
|
+
def range_with_comments(node)
|
11
|
+
comment = processed_source.ast_with_comments[node].first
|
12
|
+
if comment
|
13
|
+
node.location.expression.with(begin_pos: comment.location.expression.begin_pos)
|
14
|
+
else
|
15
|
+
node.location.expression
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# @param node [RuboCop::AST::Node]
|
20
|
+
# @return [Parser::Source::Range]
|
21
|
+
def range_with_comments_and_lines(node)
|
22
|
+
range_by_whole_lines(
|
23
|
+
range_with_comments(node),
|
24
|
+
include_final_newline: true
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
# @param range1 [Paresr::Source::Range]
|
29
|
+
# @param range2 [Paresr::Source::Range]
|
30
|
+
# @param corrector [RuboCop::AST::Corrector]
|
31
|
+
# @param newline [Boolean]
|
32
|
+
def swap(
|
33
|
+
range1,
|
34
|
+
range2,
|
35
|
+
corrector:,
|
36
|
+
newline: false
|
37
|
+
)
|
38
|
+
inserted = range2.source
|
39
|
+
inserted += "\n" if newline
|
40
|
+
corrector.insert_before(range1, inserted)
|
41
|
+
corrector.remove(range2)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/sevencop/version.rb
CHANGED
data/lib/sevencop.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'sevencop/cop_concerns'
|
3
4
|
require_relative 'sevencop/rubocop_extension'
|
4
5
|
require_relative 'sevencop/version'
|
5
6
|
|
6
7
|
require_relative 'rubocop/cop/sevencop/autoload_ordered'
|
7
|
-
require_relative 'rubocop/cop/sevencop/belongs_to_optional'
|
8
8
|
require_relative 'rubocop/cop/sevencop/hash_element_ordered'
|
9
|
-
require_relative 'rubocop/cop/sevencop/inferred_spec_type'
|
10
9
|
require_relative 'rubocop/cop/sevencop/method_definition_arguments_multiline'
|
11
|
-
require_relative 'rubocop/cop/sevencop/
|
10
|
+
require_relative 'rubocop/cop/sevencop/method_definition_keyword_argument_ordered'
|
12
11
|
require_relative 'rubocop/cop/sevencop/method_definition_ordered'
|
13
|
-
require_relative 'rubocop/cop/sevencop/
|
14
|
-
require_relative 'rubocop/cop/sevencop/
|
15
|
-
require_relative 'rubocop/cop/sevencop/
|
12
|
+
require_relative 'rubocop/cop/sevencop/rails_belongs_to_optional'
|
13
|
+
require_relative 'rubocop/cop/sevencop/rails_inferred_spec_type'
|
14
|
+
require_relative 'rubocop/cop/sevencop/rails_order_field'
|
15
|
+
require_relative 'rubocop/cop/sevencop/rails_uniqueness_validator_explicit_case_sensitivity'
|
16
|
+
require_relative 'rubocop/cop/sevencop/rails_where_not'
|
17
|
+
require_relative 'rubocop/cop/sevencop/require_ordered'
|
data/sevencop.gemspec
CHANGED
@@ -8,14 +8,14 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ['Ryo Nakamura']
|
9
9
|
spec.email = ['r7kamura@gmail.com']
|
10
10
|
|
11
|
-
spec.summary = '
|
11
|
+
spec.summary = 'Opinionated custom cops for RuboCop.'
|
12
12
|
spec.homepage = 'https://github.com/r7kamura/sevencop'
|
13
13
|
spec.license = 'MIT'
|
14
14
|
spec.required_ruby_version = '>= 2.6.0'
|
15
15
|
|
16
16
|
spec.metadata['homepage_uri'] = spec.homepage
|
17
17
|
spec.metadata['source_code_uri'] = spec.homepage
|
18
|
-
spec.metadata['changelog_uri'] = "#{spec.homepage}/
|
18
|
+
spec.metadata['changelog_uri'] = "#{spec.homepage}/releases"
|
19
19
|
spec.metadata['rubygems_mfa_required'] = 'true'
|
20
20
|
|
21
21
|
# Specify which files should be added to the gem when it is released.
|
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.
|
4
|
+
version: 0.16.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-09-
|
11
|
+
date: 2022-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -42,17 +42,20 @@ files:
|
|
42
42
|
- Rakefile
|
43
43
|
- config/default.yml
|
44
44
|
- lib/rubocop/cop/sevencop/autoload_ordered.rb
|
45
|
-
- lib/rubocop/cop/sevencop/belongs_to_optional.rb
|
46
45
|
- lib/rubocop/cop/sevencop/hash_element_ordered.rb
|
47
|
-
- lib/rubocop/cop/sevencop/inferred_spec_type.rb
|
48
46
|
- lib/rubocop/cop/sevencop/method_definition_arguments_multiline.rb
|
49
|
-
- lib/rubocop/cop/sevencop/
|
47
|
+
- lib/rubocop/cop/sevencop/method_definition_keyword_argument_ordered.rb
|
50
48
|
- lib/rubocop/cop/sevencop/method_definition_ordered.rb
|
51
|
-
- lib/rubocop/cop/sevencop/
|
52
|
-
- lib/rubocop/cop/sevencop/
|
53
|
-
- lib/rubocop/cop/sevencop/
|
49
|
+
- lib/rubocop/cop/sevencop/rails_belongs_to_optional.rb
|
50
|
+
- lib/rubocop/cop/sevencop/rails_inferred_spec_type.rb
|
51
|
+
- lib/rubocop/cop/sevencop/rails_order_field.rb
|
52
|
+
- lib/rubocop/cop/sevencop/rails_uniqueness_validator_explicit_case_sensitivity.rb
|
53
|
+
- lib/rubocop/cop/sevencop/rails_where_not.rb
|
54
|
+
- lib/rubocop/cop/sevencop/require_ordered.rb
|
54
55
|
- lib/sevencop.rb
|
55
56
|
- lib/sevencop/config_loader.rb
|
57
|
+
- lib/sevencop/cop_concerns.rb
|
58
|
+
- lib/sevencop/cop_concerns/ordered.rb
|
56
59
|
- lib/sevencop/rubocop_extension.rb
|
57
60
|
- lib/sevencop/version.rb
|
58
61
|
- sevencop.gemspec
|
@@ -62,7 +65,7 @@ licenses:
|
|
62
65
|
metadata:
|
63
66
|
homepage_uri: https://github.com/r7kamura/sevencop
|
64
67
|
source_code_uri: https://github.com/r7kamura/sevencop
|
65
|
-
changelog_uri: https://github.com/r7kamura/sevencop/
|
68
|
+
changelog_uri: https://github.com/r7kamura/sevencop/releases
|
66
69
|
rubygems_mfa_required: 'true'
|
67
70
|
post_install_message:
|
68
71
|
rdoc_options: []
|
@@ -82,5 +85,5 @@ requirements: []
|
|
82
85
|
rubygems_version: 3.3.7
|
83
86
|
signing_key:
|
84
87
|
specification_version: 4
|
85
|
-
summary:
|
88
|
+
summary: Opinionated custom cops for RuboCop.
|
86
89
|
test_files: []
|