rubocop-petal 0.2.1 → 0.3.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/CHANGELOG.md +9 -1
- data/Gemfile.lock +2 -2
- data/config/default.yml +19 -6
- data/lib/rubocop/cop/grape/prefer_namespace.rb +47 -0
- data/lib/rubocop/cop/migration/foreign_key_option.rb +46 -0
- data/lib/rubocop/cop/migration/schema_statements_methods.rb +46 -0
- data/lib/rubocop/petal/version.rb +1 -1
- metadata +5 -3
- data/lib/rubocop/cop/migration/use_change_table_bulk.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9c488168be9965605cec779d3496901a44c339bfab481d46b6bfd5a766584aa
|
4
|
+
data.tar.gz: 4aa0a079fc001b2f42f8b7920a43353ae217dbc5c0dc6154c020604c3e9928ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcbdc1f68ee6438939a848094d048e44da32aec786622dfcee20579e961c85eaf0aea1d88782eee2d85f8c1cc2304977e497e7be0a67e59e5e62d9d12ad0707b
|
7
|
+
data.tar.gz: c512bcd9560851dfaa04dab391b6fb2e760247af631ab6cc73d5cb411c166c4cfb2bda90f83bb93c32c485357ba3f132ffbaba76806621accea024ae8b845cbb
|
data/CHANGELOG.md
CHANGED
@@ -2,9 +2,17 @@
|
|
2
2
|
|
3
3
|
# main
|
4
4
|
|
5
|
+
# v0.3.0
|
6
|
+
|
7
|
+
* Added cop `Added Migration/ForeignKeyOption` ([#11](https://github.com/petalmd/rubocop-petal/pull/11))
|
8
|
+
* Added cop `Added Grape/PreferNamespace` ([#6](https://github.com/petalmd/rubocop-petal/pull/6))
|
9
|
+
* Added cop `Added Migration/SchemaStatementsMethods` ([#14](https://github.com/petalmd/rubocop-petal/pull/14))
|
10
|
+
* Remove cop `Added Migration/UseChangeTableBulk` ([#15](https://github.com/petalmd/rubocop-petal/pull/15))
|
11
|
+
* Update cop `Grape/PreferNamespace` ([#16](https://github.com/petalmd/rubocop-petal/pull/16))
|
12
|
+
|
5
13
|
# v0.2.1
|
6
14
|
|
7
|
-
Update lock dependencies `rubocop-rails` ([#9](https://github.com/petalmd/rubocop-petal/pull/9))
|
15
|
+
* Update lock dependencies `rubocop-rails` ([#9](https://github.com/petalmd/rubocop-petal/pull/9))
|
8
16
|
|
9
17
|
# v0.2.0
|
10
18
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rubocop-petal (0.
|
4
|
+
rubocop-petal (0.3.0)
|
5
5
|
rubocop (>= 1.7.0, < 2.0)
|
6
6
|
rubocop-rails (~> 2.10)
|
7
7
|
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
unicode-display_width (>= 1.4.0, < 3.0)
|
52
52
|
rubocop-ast (1.15.0)
|
53
53
|
parser (>= 3.0.1.1)
|
54
|
-
rubocop-rails (2.
|
54
|
+
rubocop-rails (2.13.2)
|
55
55
|
activesupport (>= 4.2.0)
|
56
56
|
rack (>= 1.1)
|
57
57
|
rubocop (>= 1.7.0, < 2.0)
|
data/config/default.yml
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
Grape/PreferNamespace:
|
2
|
+
Description: 'Prevent usage of namespace aliases.'
|
3
|
+
Enabled: true
|
4
|
+
StyleGuide: https://github.com/ruby-grape/grape#namespace-validation-and-coercion
|
5
|
+
Include:
|
6
|
+
- app/api/**/*
|
7
|
+
|
8
|
+
Migration/ForeignKeyOption:
|
9
|
+
Description: 'Specify the foreign key option to create the constraint.'
|
10
|
+
Enabled: true
|
11
|
+
Include:
|
12
|
+
- db/migrate/**
|
13
|
+
|
14
|
+
Migration/SchemaStatementsConnection:
|
15
|
+
Description: 'Suggest to use SchemaStatements methods already defined in a migration class.'
|
16
|
+
Enabled: true
|
17
|
+
Include:
|
18
|
+
- db/migrate/**
|
19
|
+
|
1
20
|
RSpec/AuthenticatedAs:
|
2
21
|
Description: 'Suggest to use authenticated_as instead of legacy api_key.'
|
3
22
|
Enabled: true
|
@@ -11,12 +30,6 @@ RSpec/CreateListMax:
|
|
11
30
|
Include:
|
12
31
|
- spec/**/*
|
13
32
|
|
14
|
-
Migration/UseChangeTableBulk:
|
15
|
-
Description: 'Enforces the use of option `bulk: true` with `change_table`'
|
16
|
-
Enabled: true
|
17
|
-
Include:
|
18
|
-
- db/migrate/**
|
19
|
-
|
20
33
|
Grape/HelpersIncludeModule:
|
21
34
|
Description: 'Prevent using helpers with block to include module'
|
22
35
|
Enabled: true
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Grape
|
6
|
+
# Prevent usage of `namespace` aliases
|
7
|
+
#
|
8
|
+
# # bad:
|
9
|
+
#
|
10
|
+
# group :my_group do ... end
|
11
|
+
# resource :my_resource do ... end
|
12
|
+
# resources :my_resources do ... end
|
13
|
+
# segment :my_segment do ... end
|
14
|
+
#
|
15
|
+
# # good:
|
16
|
+
#
|
17
|
+
# namespace :my_namespace do ... end
|
18
|
+
#
|
19
|
+
class PreferNamespace < Base
|
20
|
+
extend AutoCorrector
|
21
|
+
|
22
|
+
MSG = 'Prefer using `namespace` over its aliases.'
|
23
|
+
|
24
|
+
NAMESPACE_ALIASES = %i[resource resources group segment].freeze
|
25
|
+
RESTRICT_ON_SEND = NAMESPACE_ALIASES
|
26
|
+
|
27
|
+
def_node_matcher :using_alias_on_api?, <<~PATTERN
|
28
|
+
(send nil? ...)
|
29
|
+
PATTERN
|
30
|
+
|
31
|
+
def_node_matcher :namespace_alias, <<~PATTERN
|
32
|
+
(send nil? $_ ...)
|
33
|
+
PATTERN
|
34
|
+
|
35
|
+
def on_send(node)
|
36
|
+
return unless using_alias_on_api? node
|
37
|
+
# Check if use block
|
38
|
+
return unless node.block_node&.children&.last
|
39
|
+
|
40
|
+
add_offense(node) do |corrector|
|
41
|
+
corrector.replace(node, node.source.gsub(/^#{namespace_alias(node)}/, 'namespace'))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Migration
|
6
|
+
# Specify the foreign key option to create the constraint.
|
7
|
+
#
|
8
|
+
# # bad
|
9
|
+
# add_reference(:products, :user)
|
10
|
+
# add_reference(:products, :user, foreign_key: false)
|
11
|
+
# add_belongs_to(:products, :user)
|
12
|
+
# t.references(:user)
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# add_reference(:products, :user, foreign_key: true)
|
16
|
+
# add_reference(:products, :user, foreign_key: { to_table: users })
|
17
|
+
# add_belongs_to(:products, :user, foreign_key: true)
|
18
|
+
# t.references(:user, foreign_key: true)
|
19
|
+
#
|
20
|
+
class ForeignKeyOption < Base
|
21
|
+
MSG = 'Add `foreign_key: true` or `foreign_key: { to_table: :some_table }`'
|
22
|
+
|
23
|
+
ADDING_REFERENCES_METHODS = Set.new(%i[add_reference add_belongs_to references belongs_to]).freeze
|
24
|
+
|
25
|
+
def_node_matcher :adding_reference?, <<~PATTERN
|
26
|
+
(send _ ADDING_REFERENCES_METHODS ...)
|
27
|
+
PATTERN
|
28
|
+
|
29
|
+
def_node_matcher :foreign_key_option?, <<~PATTERN
|
30
|
+
(send _ ADDING_REFERENCES_METHODS ... (hash <(pair (sym :foreign_key) {true hash}) ...>))
|
31
|
+
PATTERN
|
32
|
+
|
33
|
+
def_node_matcher :polymorphic_reference?, <<~PATTERN
|
34
|
+
(... (hash <(pair (sym :polymorphic) true) ... >))
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def on_send(node)
|
38
|
+
return unless adding_reference?(node)
|
39
|
+
return if polymorphic_reference?(node)
|
40
|
+
|
41
|
+
add_offense(node) unless foreign_key_option?(node)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Migration
|
6
|
+
# Use SchemaStatements methods already defined in a migration class.
|
7
|
+
# Using already defined method is sorter and will be log during migration.
|
8
|
+
#
|
9
|
+
# # bad
|
10
|
+
# ActiveRecord::Base.connection.table_exists? 'users'
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# ActiveRecord::Base.connection.column_exists? 'users', 'first_name'
|
14
|
+
#
|
15
|
+
# # bad
|
16
|
+
# ApplicationRecord.connection.execute('SELECT COUNT(*) FROM `users`')
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# table_exists? 'users'
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# column_exists? 'users', 'first_name'
|
23
|
+
#
|
24
|
+
# # good
|
25
|
+
# execute('SELECT COUNT(*) FROM `users`')
|
26
|
+
#
|
27
|
+
class SchemaStatementsMethods < Base
|
28
|
+
extend AutoCorrector
|
29
|
+
|
30
|
+
MSG = 'Use already defined methods. Remove `ActiveRecord::Base.connection`.'
|
31
|
+
|
32
|
+
def_node_matcher :use_connection, <<~PATTERN
|
33
|
+
(:send (... (:const ...) :connection) ...)
|
34
|
+
PATTERN
|
35
|
+
|
36
|
+
def on_send(node)
|
37
|
+
return unless use_connection(node)
|
38
|
+
|
39
|
+
add_offense(node.children[0]) do |corrector|
|
40
|
+
corrector.replace(node, node.source.gsub("#{node.children[0].source}.", ''))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-petal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean-Francis Bastien
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -67,8 +67,10 @@ files:
|
|
67
67
|
- lib/rubocop-petal.rb
|
68
68
|
- lib/rubocop/cop/chewy/reset_on_type.rb
|
69
69
|
- lib/rubocop/cop/grape/helpers_include_module.rb
|
70
|
+
- lib/rubocop/cop/grape/prefer_namespace.rb
|
70
71
|
- lib/rubocop/cop/grape/unnecessary_namespace.rb
|
71
|
-
- lib/rubocop/cop/migration/
|
72
|
+
- lib/rubocop/cop/migration/foreign_key_option.rb
|
73
|
+
- lib/rubocop/cop/migration/schema_statements_methods.rb
|
72
74
|
- lib/rubocop/cop/petal_cops.rb
|
73
75
|
- lib/rubocop/cop/rails/enum_prefix.rb
|
74
76
|
- lib/rubocop/cop/rails/risky_activerecord_invocation.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module Migration
|
6
|
-
# Use `bulk: true` with `change_table`.
|
7
|
-
# # bad
|
8
|
-
#
|
9
|
-
# change_table :my_table
|
10
|
-
#
|
11
|
-
# # good
|
12
|
-
#
|
13
|
-
# change_table :my_table, bulk: true
|
14
|
-
class UseChangeTableBulk < Base
|
15
|
-
MSG = 'Use `change_table` with `bulk: true`.'
|
16
|
-
RESTRICT_ON_SEND = %i[change_table].freeze
|
17
|
-
|
18
|
-
def_node_matcher :use_bulk?, <<~PATTERN
|
19
|
-
(send nil? :change_table _ (hash <(pair (sym :bulk) true) ...>) ...)
|
20
|
-
PATTERN
|
21
|
-
|
22
|
-
def on_send(node)
|
23
|
-
return if use_bulk?(node)
|
24
|
-
|
25
|
-
add_offense(node)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|