rubocop-magic_numbers 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12fab74132b62ca4cf123a33001e1eadc3f47b6a52c9599881b9b1cdf09861c0
4
- data.tar.gz: b9e7dfba1c5fca384d64a82f77ea220393613bd594db4e60e734de29d50a4c7d
3
+ metadata.gz: ea6ef829ef5402bdcd314250492b87a6f734d7633c54531cfa779689b690b851
4
+ data.tar.gz: b59bc49fb9783017ae9aa7999984d474779b215df32ac20da1bcafdcb60ade76
5
5
  SHA512:
6
- metadata.gz: 01fa64c0680e19aa431490ccc976574c56f30f5a26b20776d292e2ba01f22c481c6072e2a465dae1fccdc64d7c23653308dd550295607102160e9f4973d806cc
7
- data.tar.gz: 4f6875eb58bcfcde76128da2709d7f215e986ce8a9c0c6013dc10428e1eddec0b14060b7eb8207a8f3ff0cb5fb2423b07e4f51c32409e301ddef835830c92553
6
+ metadata.gz: 15ca87f92adc73951779988d2a75f06ed141fe15dbde2959cfb690a70dff4addc7e5839d68745f490d715fdd73ed581390c7121f599f8c22f00220aede4eecb3
7
+ data.tar.gz: 7559121922795e3c71a9db0b975b83267bbe16f2aac43d1d9cb79e112235fe4ef7ae3387dc5aea1690232efc17747e84ffe2a4be77d5feb058cb0fc546f5a5a2
data/README.md CHANGED
@@ -40,7 +40,74 @@ $ bundle install
40
40
 
41
41
  ## Usage
42
42
 
43
- After installing the gem, `rubocop` should automatically detect and raise offenses for magic numbers within your code. You can customize the behavior of the gem by adding configurations to a `.rubocop.yml` file in your project's root directory.
43
+ After installing the gem, `rubocop` should automatically detect and raise offenses for magic numbers within your code.
44
+
45
+ The gem will detect offenses of the following sorts:
46
+
47
+ ### MagicNumbers/NoArgument
48
+
49
+ Detects when magic numbers are used as method arguments.
50
+
51
+ ``` ruby
52
+ # BAD
53
+ @user.too_many_widgets?(20) # what does 20 mean?!
54
+
55
+ # GOOD
56
+ @user.too_many_widgets?(FREE_SUBSCRIPTION_WIDGET_MAX)
57
+
58
+ # BAD
59
+ monthly_average = total / 28 # why 28?
60
+
61
+ # GOOD
62
+ monthly_average = total / FOUR_WEEK_MONTH_IN_DAYS
63
+ ```
64
+
65
+ ### MagicNumbers/NoAssignment
66
+
67
+ ``` ruby
68
+ # BAD
69
+ total_widget_limit = 20 # why 20?
70
+
71
+ # GOOD
72
+ total_widget_limit = FREE_SUBSCRIPTION_WIDGET_MAX
73
+ ```
74
+
75
+ ### MagicNumbers/NoDefault
76
+
77
+
78
+ ``` ruby
79
+ # BAD
80
+ def over_widget_limit?(20)
81
+ # ...
82
+ end
83
+
84
+ # GOOD
85
+ def over_widget_limit?(FREE_SUBSCRIPTION_WIDGET_MAX)
86
+ # ...
87
+ end
88
+ ```
89
+
90
+
91
+ ### MagicNumbers/NoReturn
92
+
93
+
94
+ ``` ruby
95
+ # BAD
96
+ def widget_limit_for_user(user)
97
+ return 20 if user.subscription_free?
98
+
99
+ return 40
100
+ end
101
+
102
+ # GOOD
103
+ def widget_limit_for_user(user)
104
+ return FREE_SUBSCRIPTION_WIDGET_MAX if user.subscription_free?
105
+
106
+ PAID_SUBSCRIPTION_WIDGET_MAX
107
+ end
108
+ ```
109
+
110
+ You can customize the behavior of the gem by adding configurations to a `.rubocop.yml` file in your project's root directory.
44
111
 
45
112
  Here are some examples of configurations you can use:
46
113
 
@@ -48,8 +115,22 @@ Here are some examples of configurations you can use:
48
115
  require:
49
116
  - rubocop-magic_numbers
50
117
 
51
- # TODO
52
- # define configs here
118
+ MagicNumbers/NoArgument:
119
+ ForbiddenNumerics: All/Float/Integer # default All
120
+ IgnoredMethods:
121
+ - '[]' # defaults to just the #[] method
122
+ PermittedValues: # defaults to []
123
+ - -1
124
+ - 1
125
+ MagicNumbers/NoAssignment:
126
+ ForbiddenNumerics: All/Float/Integer # default All
127
+
128
+ MagicNumbers/Default:
129
+ ForbiddenNumerics: All/Float/Integer # default All
130
+
131
+ MagicNumbers/NoReturn:
132
+ AllowedReturns: Implicit/Explicit/None # default None
133
+ ForbiddenNumerics: All/Float/Integer # default All
53
134
  ```
54
135
 
55
136
  For more information on configuring `rubocop`, please refer to the [official documentation](https://docs.rubocop.org/rubocop/configuration.html).
@@ -2,16 +2,17 @@
2
2
 
3
3
  require 'rubocop'
4
4
  require 'rubocop/cop/cop'
5
+ # rubocop:disable Lint/SuppressedException
6
+ # This is only available in newer versions of the RuboCop gem
5
7
  begin
6
8
  require 'rubocop/cop/base'
7
9
  rescue LoadError
8
10
  end
11
+ # rubocop:enable Lint/SuppressedException
9
12
 
10
13
  module RuboCop
11
14
  module Cop
12
- module MagicNumbers
13
- # Base class for all shared behaviour between these cops
14
-
15
+ module MagicNumbers # rubocop:disable Style/Documentation
15
16
  def self.best_base_class
16
17
  if ::RuboCop::Cop.const_defined?('Base')
17
18
  ::RuboCop::Cop::Base
@@ -20,6 +21,7 @@ module RuboCop
20
21
  end
21
22
  end
22
23
 
24
+ # Base class for all shared behaviour between these cops
23
25
  class Base < best_base_class
24
26
  CONFIG_ALL = 'All'
25
27
  CONFIG_FLOAT = 'Float'
@@ -18,9 +18,9 @@ module RuboCop
18
18
  {
19
19
  _
20
20
  _
21
- (%<illegal_scalar_pattern>s _)
21
+ (%<illegal_scalar_pattern>s $_)
22
22
  | # This is a union of lhs and rhs literal
23
- (%<illegal_scalar_pattern>s _)
23
+ (%<illegal_scalar_pattern>s $_)
24
24
  _
25
25
  _
26
26
  }
@@ -62,13 +62,18 @@ module RuboCop
62
62
  end
63
63
 
64
64
  def illegal_argument?(node)
65
- node_matches_pattern?(
65
+ captured_value = node_matches_pattern?(
66
66
  node:,
67
67
  pattern: format(
68
68
  MAGIC_NUMBER_ARGUMENT_PATTERN,
69
69
  illegal_scalar_pattern:
70
70
  )
71
71
  )
72
+ captured_value && !permitted_values.include?(captured_value)
73
+ end
74
+
75
+ def permitted_values
76
+ Array(cop_config['PermittedValues'])
72
77
  end
73
78
  end
74
79
  end
@@ -35,7 +35,6 @@ module RuboCop
35
35
 
36
36
  add_offense(
37
37
  node,
38
-
39
38
  message: DEFAULT_OPTIONAL_ARGUMENT_MSG
40
39
  )
41
40
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module MagicNumbers
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
@@ -1 +1,3 @@
1
- require 'rubocop/magic_numbers'
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop/magic_numbers'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-magic_numbers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Morrice
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-06-19 00:00:00.000000000 Z
12
+ date: 2023-06-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parser