rubocop-grape 0.3.0 → 0.4.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/config/default.yml +12 -0
- data/lib/rubocop/cop/grape/abc_size.rb +47 -0
- data/lib/rubocop/cop/grape_cops.rb +1 -0
- data/lib/rubocop/grape/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1ddcfa8ca8f07c8b82d051f1b962d106b7e9390f505bce166901deb3d9421c4
|
4
|
+
data.tar.gz: c7de3f5ff9600b83a730d347278e52d0f3f4553389c184b2c04be425193079b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 204e3c444825e10ab0c90bdfbb3dac71db90d5aeb56a718a6124ef1b19a3883e93e5815131aefbc8bcc8ba5c20d46c2bdf987f145914167299a33f7cbf95fd44
|
7
|
+
data.tar.gz: 02ebbff3326f417c71983683ed98aa7a414e9a2d3456b671b4a5fe7f19ae4cb84ccb42723f47ee1ed5085f359d6fb70557b1703045f053430e4726c32417f80a
|
data/config/default.yml
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
AllCops:
|
2
2
|
GrapeDir: 'app/api'
|
3
3
|
|
4
|
+
Grape/AbcSize:
|
5
|
+
Description: >-
|
6
|
+
A calculated magnitude based on number of assignments,
|
7
|
+
branches, and conditions.
|
8
|
+
Reference:
|
9
|
+
- http://c2.com/cgi/wiki?AbcMetric
|
10
|
+
- https://en.wikipedia.org/wiki/ABC_Software_Metric
|
11
|
+
- https://www.rubydoc.info/gems/rubocop/0.27.0/RuboCop/Cop/Metrics/AbcSize
|
12
|
+
Enabled: true
|
13
|
+
Max: 20
|
14
|
+
CountRepeatedAttributes: true
|
15
|
+
|
4
16
|
Grape/FieldName:
|
5
17
|
EnforcedStyle: snake_case
|
6
18
|
SupportedStyles:
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Grape
|
6
|
+
# Checks that the ABC size of endpoints is not higher than the
|
7
|
+
# configured maximum. The ABC size is based on assignments, branches
|
8
|
+
# (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric
|
9
|
+
# and https://en.wikipedia.org/wiki/ABC_Software_Metric.
|
10
|
+
class AbcSize < Base
|
11
|
+
extend ExcludeLimit
|
12
|
+
|
13
|
+
exclude_limit 'Max'
|
14
|
+
|
15
|
+
MSG = 'Assignment Branch Condition size is too high. [%<abc_vector>s %<complexity>d/%<max>d]'
|
16
|
+
|
17
|
+
def_node_matcher :http_method_node?, <<~PATTERN
|
18
|
+
(block (send _ {:get :post :put :patch :delete} ...) ...)
|
19
|
+
PATTERN
|
20
|
+
|
21
|
+
def on_block(node)
|
22
|
+
return unless http_method_node?(node)
|
23
|
+
|
24
|
+
check_complexity(node)
|
25
|
+
end
|
26
|
+
|
27
|
+
def check_complexity(node)
|
28
|
+
return unless node.body
|
29
|
+
|
30
|
+
max = cop_config['Max']
|
31
|
+
complexity, abc_vector = complexity(node.body)
|
32
|
+
return unless complexity > max
|
33
|
+
|
34
|
+
msg = format(self.class::MSG, abc_vector: abc_vector, complexity: complexity, max: max)
|
35
|
+
add_offense(node, message: msg) { self.max = complexity.ceil }
|
36
|
+
end
|
37
|
+
|
38
|
+
def complexity(node)
|
39
|
+
Metrics::Utils::AbcSizeCalculator.calculate(
|
40
|
+
node,
|
41
|
+
discount_repeated_attributes: !cop_config['CountRepeatedAttributes']
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
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
|
+
version: 0.4.0
|
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-
|
11
|
+
date: 2023-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- bin/console
|
45
45
|
- config/default.yml
|
46
46
|
- lib/rubocop-grape.rb
|
47
|
+
- lib/rubocop/cop/grape/abc_size.rb
|
47
48
|
- lib/rubocop/cop/grape/field_name.rb
|
48
49
|
- lib/rubocop/cop/grape/ivar.rb
|
49
50
|
- lib/rubocop/cop/grape/params_position.rb
|