rubocop-grape 0.4.0 → 0.4.3

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: d1ddcfa8ca8f07c8b82d051f1b962d106b7e9390f505bce166901deb3d9421c4
4
- data.tar.gz: c7de3f5ff9600b83a730d347278e52d0f3f4553389c184b2c04be425193079b3
3
+ metadata.gz: 0a10e156b9a117d1d9bd4eb1e3d0c559268669f410d80c786d5c4b38ca79d508
4
+ data.tar.gz: '0287d909c47e61e540fcc98edf2303b97f43ebad7a6fc244fa14444661dbc77f'
5
5
  SHA512:
6
- metadata.gz: 204e3c444825e10ab0c90bdfbb3dac71db90d5aeb56a718a6124ef1b19a3883e93e5815131aefbc8bcc8ba5c20d46c2bdf987f145914167299a33f7cbf95fd44
7
- data.tar.gz: 02ebbff3326f417c71983683ed98aa7a414e9a2d3456b671b4a5fe7f19ae4cb84ccb42723f47ee1ed5085f359d6fb70557b1703045f053430e4726c32417f80a
6
+ metadata.gz: f01ca9109f953bc9f7f74bebad5a468004fb9db4b738b4d9e01ef0d9265325159e4d6397d16ca35453b3ae5784df27523e7ceea01413de9f030358b4101d9f4e
7
+ data.tar.gz: e1acec347d818fe04be34f01a012ebd7961730091b00cc370aa720e6097a783eb59b5de54bb2aada39f2f21d7b393b1e26e696d56298ce762ba43243fff3d3a3
data/config/default.yml CHANGED
@@ -19,6 +19,10 @@ Grape/FieldName:
19
19
  - snake_case
20
20
  - camelCase
21
21
 
22
+ Grape/RouteParamGrouping:
23
+ Enabled: true
24
+ VersionAdded: '0.4.3'
25
+
22
26
  Grape/RouteParamType:
23
27
  Enabled: true
24
28
  Safe: false
@@ -28,3 +32,9 @@ Grape/ParamsPosition:
28
32
  Enabled: true
29
33
  Safe: false
30
34
  VersionAdded: '0.1'
35
+
36
+ Grape/PresentWith:
37
+ Enabled: true
38
+ Safe: false
39
+ SafeAutoCorrect: false
40
+ VersionAdded: '0.4.2'
@@ -9,15 +9,12 @@ module RuboCop
9
9
  # and https://en.wikipedia.org/wiki/ABC_Software_Metric.
10
10
  class AbcSize < Base
11
11
  extend ExcludeLimit
12
+ include EndpointHelper
12
13
 
13
14
  exclude_limit 'Max'
14
15
 
15
16
  MSG = 'Assignment Branch Condition size is too high. [%<abc_vector>s %<complexity>d/%<max>d]'
16
17
 
17
- def_node_matcher :http_method_node?, <<~PATTERN
18
- (block (send _ {:get :post :put :patch :delete} ...) ...)
19
- PATTERN
20
-
21
18
  def on_block(node)
22
19
  return unless http_method_node?(node)
23
20
 
@@ -31,20 +31,16 @@ module RuboCop
31
31
  #
32
32
  class FieldName < Base
33
33
  include ConfigurableNaming
34
- include RangeHelp
34
+ include EndpointHelper
35
35
 
36
36
  MSG = 'Use %<style>s for field names.'
37
37
 
38
- def_node_matcher :params_block?, <<~PATTERN
39
- (block (send _ :params) _ $_)
40
- PATTERN
41
-
42
38
  def_node_matcher :field_name, <<~PATTERN
43
39
  (send _ {:requires :optional} (sym $_) ...)
44
40
  PATTERN
45
41
 
46
42
  def on_block(node)
47
- return unless (body = params_block?(node))
43
+ return unless (body = params_node?(node))
48
44
 
49
45
  find_field_node(body)
50
46
  end
@@ -20,15 +20,9 @@ module RuboCop
20
20
  # end
21
21
  #
22
22
  class ParamsPosition < Base
23
- MSG = "It's no sense to define params in HTTP method's scope"
24
-
25
- def_node_matcher :params_block?, <<~PATTERN
26
- (block (send _ :params) ...)
27
- PATTERN
23
+ include EndpointHelper
28
24
 
29
- def_node_matcher :http_method_node?, <<~PATTERN
30
- (block (send _ {:get :post :put :patch :delete} ...) ...)
31
- PATTERN
25
+ MSG = "It's no sense to define params in HTTP method's scope"
32
26
 
33
27
  def on_block(node)
34
28
  return unless http_method_node?(node)
@@ -37,7 +31,7 @@ module RuboCop
37
31
  end
38
32
 
39
33
  def collect_violating_nodes(node, collector = [])
40
- collector.push(node) if node.type == :block && params_block?(node)
34
+ collector.push(node) if node.type == :block && params_node?(node)
41
35
 
42
36
  node.children.each do |descendant|
43
37
  collect_violating_nodes(descendant, collector) if descendant.is_a?(Parser::AST::Node)
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Grape
6
+ # @example
7
+ #
8
+ # # bad
9
+ # get do
10
+ # present users: users, with: API::Entities::User
11
+ # end
12
+ #
13
+ # # good
14
+ # get do
15
+ # present :users, users, with: API::Entities::User
16
+ # end
17
+ #
18
+ class PresentWith < Base
19
+ extend AutoCorrector
20
+ include EndpointHelper
21
+
22
+ MSG_TEMPLATE = 'Maybe you mistyped "`%<current>s`", it should be "`%<correct>s`"'
23
+
24
+ def_node_matcher :one_hash_arg_with_key_name_with?, <<~PATTERN
25
+ (send _ :present
26
+ (hash
27
+ (pair (sym $_key)
28
+ {(send _ $_val) (lvar $_val)})
29
+ (pair (sym :with) _)))
30
+ PATTERN
31
+
32
+ def on_send(present_node)
33
+ one_hash_arg_with_key_name_with?(present_node) do |key, val|
34
+ kwarg = present_node.children.last
35
+
36
+ add_offense(kwarg.children.first, message: message(key, val)) do |corrector|
37
+ corrector.remove(kwarg.children.first)
38
+ corrector.insert_before(kwarg, ":#{key}, #{val}")
39
+ end
40
+ end
41
+ end
42
+
43
+ def message(key, val)
44
+ format(MSG_TEMPLATE, current: "#{key}: #{val}", correct: ":#{key}, #{val}")
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Grape
6
+ #
7
+ # @example
8
+ #
9
+ # # bad
10
+ # get ':id' do
11
+ # end
12
+ #
13
+ # # good
14
+ # route_param :id, type: Integer do
15
+ # get do
16
+ # end
17
+ # end
18
+ #
19
+ class RouteParamGrouping < Base
20
+ include EndpointHelper
21
+
22
+ MSG = 'Use route_param for route parameter'
23
+
24
+ def on_block(node)
25
+ return unless (method_send_node = http_method_node?(node))
26
+ return unless (first_argument_node = method_send_node.arguments.first)
27
+ return unless first_argument_node.value.match?(/:\w/)
28
+
29
+ add_offense(first_argument_node)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'mixin/endpoint_helper'
4
+
3
5
  require_relative 'grape/abc_size'
4
6
  require_relative 'grape/field_name'
5
7
  require_relative 'grape/ivar'
6
8
  require_relative 'grape/params_position'
9
+ require_relative 'grape/present_with'
10
+ require_relative 'grape/route_param_grouping'
7
11
  require_relative 'grape/route_param_type'
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # EndpointHelper is a set of AST definitions for endpoint definition by Grape DSL
6
+ module EndpointHelper
7
+ extend NodePattern::Macros
8
+
9
+ def_node_matcher :http_method_node?, <<~PATTERN
10
+ (block $(send _ {:get :post :put :patch :delete} ...) ...)
11
+ PATTERN
12
+
13
+ def_node_matcher :params_node?, <<~PATTERN
14
+ (block (send _ :params) _ $_)
15
+ PATTERN
16
+ end
17
+ end
18
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Grape
5
- VERSION = '0.4.0'
5
+ VERSION = '0.4.3'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-grape
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akito Hikasa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-29 00:00:00.000000000 Z
11
+ date: 2024-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -48,8 +48,11 @@ files:
48
48
  - lib/rubocop/cop/grape/field_name.rb
49
49
  - lib/rubocop/cop/grape/ivar.rb
50
50
  - lib/rubocop/cop/grape/params_position.rb
51
+ - lib/rubocop/cop/grape/present_with.rb
52
+ - lib/rubocop/cop/grape/route_param_grouping.rb
51
53
  - lib/rubocop/cop/grape/route_param_type.rb
52
54
  - lib/rubocop/cop/grape_cops.rb
55
+ - lib/rubocop/cop/mixin/endpoint_helper.rb
53
56
  - lib/rubocop/grape.rb
54
57
  - lib/rubocop/grape/grape_files.rb
55
58
  - lib/rubocop/grape/inject.rb
@@ -77,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
80
  - !ruby/object:Gem::Version
78
81
  version: '0'
79
82
  requirements: []
80
- rubygems_version: 3.2.33
83
+ rubygems_version: 3.4.19
81
84
  signing_key:
82
85
  specification_version: 4
83
86
  summary: Automatice Grape code style checking tool.