momocop 0.1.7 → 0.1.9
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 +3 -0
- data/lib/momocop/version.rb +1 -1
- data/lib/rubocop/cop/momocop/factory_bot_missing_associations.rb +12 -2
- data/lib/rubocop/cop/momocop/factory_bot_missing_properties.rb +8 -0
- data/lib/rubocop/cop/momocop/factory_bot_property_order.rb +27 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd1936728acc124e621799990c68af8e6aa54c7cd984ce038efcbe8929c2416c
|
4
|
+
data.tar.gz: 0b6b2242cb847844e0279ff35193c391922facae5c32dc2ca86cf7778e97aebc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34e3af0e7bcb5a2b3091fa79e713ceb4fd50acc2bec9c7c815680fb93cb37e0052ba08d70e2adc35a5ba4718c4b622e738acfc0a0e6f33113021978eedb3b1f7
|
7
|
+
data.tar.gz: fa078fbc91b3bfe61ac9da25463b59eaab3871e882c16f9e59e8d40d04bb12d82e948d6c08d933a6534b7600661fb6ce13db3009fbfcf850d5ca4cdf2708ce85
|
data/.rubocop.yml
CHANGED
data/lib/momocop/version.rb
CHANGED
@@ -43,6 +43,14 @@ module RuboCop
|
|
43
43
|
|
44
44
|
block_node = node.block_node
|
45
45
|
|
46
|
+
# Add block if it's missing
|
47
|
+
unless block_node
|
48
|
+
add_offense(node, message: MSG) do |corrector|
|
49
|
+
indentation = ' ' * node.loc.column
|
50
|
+
corrector.replace(node.source_range, "#{node.source} do\n#{indentation}end")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
46
54
|
# Check missing associations
|
47
55
|
defined_associations = get_defined_association_names(block_node)
|
48
56
|
model_associations = get_model_association_names(class_name)
|
@@ -52,8 +60,6 @@ module RuboCop
|
|
52
60
|
return unless missing_associations.any?
|
53
61
|
|
54
62
|
add_offense(node, message: MSG) do |corrector|
|
55
|
-
next unless block_node
|
56
|
-
|
57
63
|
# Add newline before closing block if it's a one-liner
|
58
64
|
if one_line_block?(block_node)
|
59
65
|
indentation = ' ' * node.loc.column
|
@@ -66,6 +72,8 @@ module RuboCop
|
|
66
72
|
|
67
73
|
# TODO: calculate indentation size
|
68
74
|
indentation = ' ' * (node.loc.column + 2)
|
75
|
+
|
76
|
+
# use send node if blockless
|
69
77
|
corrector.insert_after(block_node.loc.begin, "\n#{indentation}#{definition}")
|
70
78
|
end
|
71
79
|
end
|
@@ -76,6 +84,8 @@ module RuboCop
|
|
76
84
|
end
|
77
85
|
|
78
86
|
private def one_line_block?(block_node)
|
87
|
+
return false if block_node.nil?
|
88
|
+
|
79
89
|
block_node.loc.begin.line == block_node.loc.end.line
|
80
90
|
end
|
81
91
|
|
@@ -50,6 +50,14 @@ module RuboCop
|
|
50
50
|
|
51
51
|
block_node = node.block_node
|
52
52
|
|
53
|
+
# Add block if it's missing
|
54
|
+
unless block_node
|
55
|
+
add_offense(node, message: MSG) do |corrector|
|
56
|
+
indentation = ' ' * node.loc.column
|
57
|
+
corrector.replace(node.source_range, "#{node.source} do\n#{indentation}end")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
53
61
|
# Check missing associations
|
54
62
|
|
55
63
|
# Exclude defined sequences
|
@@ -49,11 +49,15 @@ module RuboCop
|
|
49
49
|
return unless inside_factory_bot_define?(node)
|
50
50
|
|
51
51
|
block_node = node.block_node
|
52
|
+
return unless block_node
|
53
|
+
|
52
54
|
entire_definitions = defined_properties(block_node)
|
53
55
|
|
54
56
|
sections =
|
55
57
|
entire_definitions
|
56
|
-
.slice_when { |a, b|
|
58
|
+
.slice_when { |a, b|
|
59
|
+
(range_with_comments(b).first_line - range_with_comments(a).last_line) > 1
|
60
|
+
}
|
57
61
|
.select { |definitions| definitions.size >= 2 }
|
58
62
|
|
59
63
|
sections.each do |definitions|
|
@@ -83,11 +87,31 @@ module RuboCop
|
|
83
87
|
|
84
88
|
private def defined_properties(block_node)
|
85
89
|
body_node = block_node&.children&.last
|
86
|
-
|
90
|
+
|
91
|
+
# empty block
|
92
|
+
return [] unless body_node
|
93
|
+
|
94
|
+
# begin
|
95
|
+
if body_node.begin_type?
|
96
|
+
body_node&.children&.select { |node| definition_node?(node) } || []
|
97
|
+
# block
|
98
|
+
elsif body_node.send_type? && definition_node?(body_node)
|
99
|
+
[body_node]
|
100
|
+
else
|
101
|
+
[]
|
102
|
+
end
|
87
103
|
end
|
88
104
|
|
105
|
+
RUBOCOP_HELPER_METHODS = %i[trait transient before after].freeze
|
106
|
+
|
89
107
|
private def definition_node?(node)
|
90
|
-
|
108
|
+
if node.send_type?
|
109
|
+
return !RUBOCOP_HELPER_METHODS.include?(node.method_name)
|
110
|
+
elsif node.block_type? && node.children.first.send_type?
|
111
|
+
return !RUBOCOP_HELPER_METHODS.include?(node.children.first.method_name)
|
112
|
+
end
|
113
|
+
|
114
|
+
return false
|
91
115
|
end
|
92
116
|
|
93
117
|
private def definition_type(node)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: momocop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- supermomonga
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.49.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.49.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubocop-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|