rubocop-rubomatic 1.0.0.pre.rc.1

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.
@@ -0,0 +1,120 @@
1
+ Metrics/AbcSize:
2
+ Description: >-
3
+ A calculated magnitude based on number of assignments,
4
+ branches, and conditions.
5
+ Reference:
6
+ - http://c2.com/cgi/wiki?AbcMetric
7
+ - https://en.wikipedia.org/wiki/ABC_Software_Metric
8
+ Enabled: true
9
+ VersionAdded: '0.27'
10
+ VersionChanged: '1.5'
11
+ # The ABC size is a calculated magnitude, so this number can be an Integer or
12
+ # a Float.
13
+ AllowedMethods: [ ]
14
+ AllowedPatterns: [ ]
15
+ CountRepeatedAttributes: false
16
+ Max: 250
17
+
18
+ Metrics/BlockLength:
19
+ Description: 'Avoid long blocks with many lines.'
20
+ Enabled: true
21
+ VersionAdded: '0.44'
22
+ VersionChanged: '1.5'
23
+ CountComments: false # count full line comments?
24
+ Max: 500
25
+ CountAsOne:
26
+ - 'array'
27
+ - 'heredoc'
28
+ - 'hash'
29
+ AllowedMethods:
30
+ # By default, exclude the `#refine` method, as it tends to have larger
31
+ # associated blocks.
32
+ - refine
33
+ AllowedPatterns: [ ]
34
+ Exclude:
35
+ - '**/*.gemspec'
36
+
37
+ Metrics/BlockNesting:
38
+ Description: 'Avoid excessive block nesting.'
39
+ StyleGuide: '#three-is-the-number-thou-shalt-count'
40
+ Enabled: true
41
+ VersionAdded: '0.25'
42
+ VersionChanged: '0.47'
43
+ CountBlocks: false
44
+ Max: 10
45
+
46
+ Metrics/ClassLength:
47
+ Description: 'Avoid classes longer than 100 lines of code.'
48
+ Enabled: false
49
+ VersionAdded: '0.25'
50
+ VersionChanged: '0.87'
51
+ CountComments: false # count full line comments?
52
+ Max: 100
53
+ CountAsOne: [ ]
54
+
55
+ <% if RuboCop::Version.document_version.to_f >= 1.47 %>
56
+ Metrics/CollectionLiteralLength:
57
+ Description: Checks for `Array` or `Hash` literals with many entries.
58
+ Enabled: true
59
+ VersionAdded: '1.47'
60
+ LengthThreshold: 250
61
+ Exclude:
62
+ - lib/tasks/seeds
63
+ <% end %>
64
+
65
+ # Avoid complex methods.
66
+ Metrics/CyclomaticComplexity:
67
+ Description: >-
68
+ A complexity metric that is strongly correlated to the number
69
+ of test cases needed to validate a method.
70
+ Enabled: true
71
+ VersionAdded: '0.25'
72
+ VersionChanged: '0.81'
73
+ AllowedMethods: [ ]
74
+ AllowedPatterns: [ ]
75
+ Max: 150
76
+
77
+ Metrics/MethodLength:
78
+ Description: 'Avoid methods longer than 10 lines of code.'
79
+ StyleGuide: '#short-methods'
80
+ Enabled: true
81
+ VersionAdded: '0.25'
82
+ VersionChanged: '1.5'
83
+ CountComments: false # count full line comments?
84
+ Max: 350
85
+ CountAsOne:
86
+ - 'array'
87
+ - 'hash'
88
+ - 'heredoc'
89
+ AllowedMethods: [ ]
90
+ AllowedPatterns: [ ]
91
+
92
+ Metrics/ModuleLength:
93
+ Description: 'Avoid modules longer than 100 lines of code.'
94
+ Enabled: false
95
+ VersionAdded: '0.31'
96
+ VersionChanged: '0.87'
97
+ CountComments: false # count full line comments?
98
+ Max: 100
99
+ CountAsOne: [ ]
100
+
101
+ Metrics/ParameterLists:
102
+ Description: 'Avoid parameter lists longer than three or four parameters.'
103
+ StyleGuide: '#too-many-params'
104
+ Enabled: true
105
+ VersionAdded: '0.25'
106
+ VersionChanged: '1.5'
107
+ Max: 5
108
+ CountKeywordArgs: false
109
+ MaxOptionalParameters: 3
110
+
111
+ Metrics/PerceivedComplexity:
112
+ Description: >-
113
+ A complexity metric geared towards measuring complexity for a
114
+ human reader.
115
+ Enabled: true
116
+ VersionAdded: '0.25'
117
+ VersionChanged: '0.81'
118
+ AllowedMethods: [ ]
119
+ AllowedPatterns: [ ]
120
+ Max: 75
@@ -0,0 +1,6 @@
1
+ Migration/DepartmentName:
2
+ Description: >-
3
+ Check that cop names in rubocop:disable (etc) comments are
4
+ given with department name.
5
+ Enabled: true
6
+ VersionAdded: '0.75'
data/config/naming.yml ADDED
@@ -0,0 +1,316 @@
1
+ Naming/AccessorMethodName:
2
+ Description: Check the naming of accessor methods for get_/set_.
3
+ StyleGuide: '#accessor_mutator_method_names'
4
+ Enabled: true
5
+ VersionAdded: '0.50'
6
+
7
+ Naming/AsciiIdentifiers:
8
+ Description: 'Use only ascii symbols in identifiers and constants.'
9
+ StyleGuide: '#english-identifiers'
10
+ Enabled: true
11
+ VersionAdded: '0.50'
12
+ VersionChanged: '0.87'
13
+ AsciiConstants: true
14
+
15
+ Naming/BinaryOperatorParameterName:
16
+ Description: 'When defining binary operators, name the argument other.'
17
+ StyleGuide: '#other-arg'
18
+ Enabled: true
19
+ VersionAdded: '0.50'
20
+ VersionChanged: '1.2'
21
+
22
+ Naming/BlockForwarding:
23
+ Description: 'Use anonymous block forwarding.'
24
+ StyleGuide: '#block-forwarding'
25
+ Enabled: <%= ENV['RUBY_MAJOR'].to_f >= 3.1 %>
26
+ VersionAdded: '1.24'
27
+ EnforcedStyle: anonymous
28
+ SupportedStyles:
29
+ - anonymous
30
+ - explicit
31
+ BlockForwardingName: block
32
+
33
+ Naming/BlockParameterName:
34
+ Description: >-
35
+ Checks for block parameter names that contain capital letters,
36
+ end in numbers, or do not meet a minimal length.
37
+ Enabled: true
38
+ VersionAdded: '0.53'
39
+ VersionChanged: '0.77'
40
+ # Parameter names may be equal to or greater than this value
41
+ MinNameLength: 1
42
+ AllowNamesEndingInNumbers: true
43
+ # Allowed names that will not register an offense
44
+ AllowedNames: [ ]
45
+ # Forbidden names that will register an offense
46
+ ForbiddenNames: [ ]
47
+
48
+ Naming/ClassAndModuleCamelCase:
49
+ Description: 'Use CamelCase for classes and modules.'
50
+ StyleGuide: '#camelcase-classes'
51
+ Enabled: true
52
+ VersionAdded: '0.50'
53
+ VersionChanged: '0.85'
54
+ # Allowed class/module names can be specified here.
55
+ # These can be full or part of the name.
56
+ AllowedNames:
57
+ - module_parent
58
+
59
+ Naming/ConstantName:
60
+ Description: 'Constants should use SCREAMING_SNAKE_CASE.'
61
+ StyleGuide: '#screaming-snake-case'
62
+ Enabled: true
63
+ VersionAdded: '0.50'
64
+
65
+ Naming/FileName:
66
+ Description: 'Use snake_case for source file names.'
67
+ StyleGuide: '#snake-case-files'
68
+ Enabled: true
69
+ VersionAdded: '0.50'
70
+ VersionChanged: '1.23'
71
+ # Camel case file names listed in `AllCops:Include` and all file names listed
72
+ # in `AllCops:Exclude` are excluded by default. Add extra excludes here.
73
+ Exclude: [ ]
74
+ # When `true`, requires that each source file should define a class or module
75
+ # with a name which matches the file name (converted to ... case).
76
+ # It further expects it to be nested inside modules which match the names
77
+ # of subdirectories in its path.
78
+ ExpectMatchingDefinition: false
79
+ # When `false`, changes the behavior of ExpectMatchingDefinition to match only
80
+ # whether each source file's class or module name matches the file name --
81
+ # not whether the nested module hierarchy matches the subdirectory path.
82
+ CheckDefinitionPathHierarchy: true
83
+ # paths that are considered root directories, for example "lib" in most ruby projects
84
+ # or "app/models" in rails projects
85
+ CheckDefinitionPathHierarchyRoots:
86
+ - lib
87
+ - spec
88
+ - test
89
+ - src
90
+ # If non-`nil`, expect all source file names to match the following regex.
91
+ # Only the file name itself is matched, not the entire file path.
92
+ # Use anchors as necessary if you want to match the entire name rather than
93
+ # just a part of it.
94
+ Regex: ~
95
+ # With `IgnoreExecutableScripts` set to `true`, this cop does not
96
+ # report offending filenames for executable scripts (i.e. source
97
+ # files with a shebang in the first line).
98
+ IgnoreExecutableScripts: true
99
+ AllowedAcronyms:
100
+ - CLI
101
+ - DSL
102
+ - ACL
103
+ - API
104
+ - ASCII
105
+ - CPU
106
+ - CSS
107
+ - DNS
108
+ - EOF
109
+ - GUID
110
+ - HTML
111
+ - HTTP
112
+ - HTTPS
113
+ - ID
114
+ - IP
115
+ - JSON
116
+ - LHS
117
+ - QPS
118
+ - RAM
119
+ - RHS
120
+ - RPC
121
+ - SLA
122
+ - SMTP
123
+ - SQL
124
+ - SSH
125
+ - TCP
126
+ - TLS
127
+ - TTL
128
+ - UDP
129
+ - UI
130
+ - UID
131
+ - UUID
132
+ - URI
133
+ - URL
134
+ - UTF8
135
+ - VM
136
+ - XML
137
+ - XMPP
138
+ - XSRF
139
+ - XSS
140
+
141
+ Naming/HeredocDelimiterCase:
142
+ Description: 'Use configured case for heredoc delimiters.'
143
+ StyleGuide: '#heredoc-delimiters'
144
+ Enabled: true
145
+ VersionAdded: '0.50'
146
+ VersionChanged: '1.2'
147
+ EnforcedStyle: uppercase
148
+ SupportedStyles:
149
+ - lowercase
150
+ - uppercase
151
+
152
+ Naming/HeredocDelimiterNaming:
153
+ Description: 'Use descriptive heredoc delimiters.'
154
+ StyleGuide: '#heredoc-delimiters'
155
+ Enabled: true
156
+ VersionAdded: '0.50'
157
+ ForbiddenDelimiters:
158
+ - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/'
159
+
160
+ Naming/InclusiveLanguage:
161
+ Description: 'Recommend the use of inclusive language instead of problematic terms.'
162
+ Enabled: false
163
+ VersionAdded: '1.18'
164
+ VersionChanged: '1.21'
165
+ CheckIdentifiers: true
166
+ CheckConstants: true
167
+ CheckVariables: true
168
+ CheckStrings: false
169
+ CheckSymbols: true
170
+ CheckComments: true
171
+ CheckFilepaths: true
172
+ FlaggedTerms:
173
+ whitelist:
174
+ Regex: !ruby/regexp '/white[-_\s]?list/'
175
+ Suggestions:
176
+ - allowlist
177
+ - permit
178
+ blacklist:
179
+ Regex: !ruby/regexp '/black[-_\s]?list/'
180
+ Suggestions:
181
+ - denylist
182
+ - block
183
+ slave:
184
+ WholeWord: true
185
+ Suggestions: [ 'replica', 'secondary', 'follower' ]
186
+
187
+ Naming/MemoizedInstanceVariableName:
188
+ Description: >-
189
+ Memoized method name should match memo instance variable name.
190
+ Enabled: true
191
+ VersionAdded: '0.53'
192
+ VersionChanged: '1.2'
193
+ EnforcedStyleForLeadingUnderscores: disallowed
194
+ SupportedStylesForLeadingUnderscores:
195
+ - disallowed
196
+ - required
197
+ - optional
198
+ Safe: false
199
+
200
+ Naming/MethodName:
201
+ Description: 'Use the configured style when naming methods.'
202
+ StyleGuide: '#snake-case-symbols-methods-vars'
203
+ Enabled: true
204
+ VersionAdded: '0.50'
205
+ EnforcedStyle: snake_case
206
+ SupportedStyles:
207
+ - snake_case
208
+ - camelCase
209
+ # Method names matching patterns are always allowed.
210
+ #
211
+ # AllowedPatterns:
212
+ # - '\A\s*onSelectionBulkChange\s*'
213
+ # - '\A\s*onSelectionCleared\s*'
214
+ #
215
+ AllowedPatterns: [ ]
216
+
217
+ Naming/MethodParameterName:
218
+ Description: >-
219
+ Checks for method parameter names that contain capital letters,
220
+ end in numbers, or do not meet a minimal length.
221
+ Enabled: true
222
+ VersionAdded: '0.53'
223
+ VersionChanged: '0.77'
224
+ # Parameter names may be equal to or greater than this value
225
+ MinNameLength: 1
226
+ AllowNamesEndingInNumbers: true
227
+ # Allowed names that will not register an offense
228
+ AllowedNames:
229
+ - as
230
+ - at
231
+ - by
232
+ - cc
233
+ - db
234
+ - id
235
+ - if
236
+ - in
237
+ - io
238
+ - ip
239
+ - of
240
+ - 'on'
241
+ - os
242
+ - pp
243
+ - to
244
+ # Forbidden names that will register an offense
245
+ ForbiddenNames: [ ]
246
+
247
+ Naming/PredicateName:
248
+ Description: 'Check the names of predicate methods.'
249
+ StyleGuide: '#bool-methods-qmark'
250
+ Enabled: true
251
+ VersionAdded: '0.50'
252
+ VersionChanged: '0.77'
253
+ # Predicate name prefixes.
254
+ NamePrefix:
255
+ - is_
256
+ - has_
257
+ - have_
258
+ # Predicate name prefixes that should be removed.
259
+ ForbiddenPrefixes:
260
+ - is_
261
+ - has_
262
+ - have_
263
+ # Predicate names which, despite having a forbidden prefix, or no `?`,
264
+ # should still be accepted
265
+ AllowedMethods:
266
+ - is_a?
267
+ # Method definition macros for dynamically generated methods.
268
+ MethodDefinitionMacros:
269
+ - define_method
270
+ - define_singleton_method
271
+ # Exclude Rspec specs because there is a strong convention to write spec
272
+ # helpers in the form of `have_something` or `be_something`.
273
+ Exclude:
274
+ - 'spec/**/*'
275
+
276
+ Naming/RescuedExceptionsVariableName:
277
+ Description: 'Use consistent rescued exceptions variables naming.'
278
+ Enabled: true
279
+ VersionAdded: '0.67'
280
+ VersionChanged: '0.68'
281
+ PreferredName: e
282
+
283
+ Naming/VariableName:
284
+ Description: 'Use the configured style when naming variables.'
285
+ StyleGuide: '#snake-case-symbols-methods-vars'
286
+ Enabled: true
287
+ VersionAdded: '0.50'
288
+ VersionChanged: '1.8'
289
+ EnforcedStyle: snake_case
290
+ SupportedStyles:
291
+ - snake_case
292
+ - camelCase
293
+ AllowedIdentifiers: [ ]
294
+ AllowedPatterns: [ ]
295
+
296
+ Naming/VariableNumber:
297
+ Description: 'Use the configured style when numbering symbols, methods and variables.'
298
+ StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
299
+ Enabled: true
300
+ VersionAdded: '0.50'
301
+ VersionChanged: '1.4'
302
+ EnforcedStyle: normalcase
303
+ SupportedStyles:
304
+ - snake_case
305
+ - normalcase
306
+ - non_integer
307
+ CheckMethodNames: true
308
+ CheckSymbols: true
309
+ AllowedIdentifiers:
310
+ - capture3 # Open3.capture3
311
+ - iso8601 # Time#iso8601
312
+ - rfc1123_date # CGI.rfc1123_date
313
+ - rfc822 # Time#rfc822
314
+ - rfc2822 # Time#rfc2822
315
+ - rfc3339 # DateTime.rfc3339
316
+ AllowedPatterns: [ ]
@@ -0,0 +1,266 @@
1
+ require: rubocop-performance
2
+
3
+ Performance:
4
+ Enabled: false
5
+
6
+ Performance/BigDecimalWithNumericArgument:
7
+ Description: Convert numeric literal to string and pass it to `BigDecimal`.
8
+ Enabled: true
9
+ VersionAdded: '1.7'
10
+
11
+ Performance/ChainArrayAllocation:
12
+ Description: Instead of chaining array methods that allocate new arrays, mutate an
13
+ existing array.
14
+ Reference: https://twitter.com/schneems/status/1034123879978029057
15
+ Enabled: true
16
+ VersionAdded: '0.59'
17
+
18
+ Performance/CollectionLiteralInLoop:
19
+ Description: Extract Array and Hash literals outside of loops into local variables
20
+ or constants.
21
+ Enabled: true
22
+ VersionAdded: '1.8'
23
+ MinSize: 1
24
+
25
+ Performance/CompareWithBlock:
26
+ Description: Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`.
27
+ Enabled: true
28
+ VersionAdded: '0.46'
29
+
30
+ Performance/ConstantRegexp:
31
+ Description: Finds regular expressions with dynamic components that are all constants.
32
+ Enabled: true
33
+ VersionAdded: '1.9'
34
+ VersionChanged: '1.10'
35
+
36
+ Performance/Count:
37
+ Description: Use `count` instead of `{select,find_all,filter,reject}...{size,count,length}`.
38
+ SafeAutoCorrect: false
39
+ Enabled: true
40
+ VersionAdded: '0.31'
41
+ VersionChanged: '1.8'
42
+
43
+ Performance/DeletePrefix:
44
+ Description: Use `delete_prefix` instead of `gsub`.
45
+ Enabled: true
46
+ Safe: false
47
+ SafeMultiline: false
48
+ VersionAdded: '1.6'
49
+ VersionChanged: '1.11'
50
+
51
+ Performance/DeleteSuffix:
52
+ Description: Use `delete_suffix` instead of `gsub`.
53
+ Enabled: true
54
+ Safe: false
55
+ SafeMultiline: false
56
+ VersionAdded: '1.6'
57
+ VersionChanged: '1.11'
58
+
59
+ Performance/Detect:
60
+ Description: Use `detect` instead of `select.first`, `find_all.first`, `filter.first`,
61
+ `select.last`, `find_all.last`, and `filter.last`.
62
+ Reference: https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code
63
+ SafeAutoCorrect: false
64
+ Enabled: true
65
+ VersionAdded: '0.30'
66
+ VersionChanged: '1.8'
67
+
68
+ Performance/DoubleStartEndWith:
69
+ Description: Use `str.{start,end}_with?(x, ..., y, ...)` instead of `str.{start,end}_with?(x,
70
+ ...) || str.{start,end}_with?(y, ...)`.
71
+ Enabled: true
72
+ VersionAdded: '0.36'
73
+ VersionChanged: '0.48'
74
+ IncludeActiveSupportAliases: true
75
+
76
+ Performance/EndWith:
77
+ Description: Use `end_with?` instead of a regex match anchored to the end of a string.
78
+ Reference: https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end
79
+ SafeAutoCorrect: false
80
+ Enabled: true
81
+ SafeMultiline: false
82
+ VersionAdded: '0.36'
83
+ VersionChanged: '1.10'
84
+
85
+ Performance/FixedSize:
86
+ Description: Do not compute the size of statically sized objects except in constants.
87
+ Enabled: true
88
+ VersionAdded: '0.35'
89
+
90
+ Performance/FlatMap:
91
+ Description: Use `Enumerable#flat_map` instead of `Enumerable#map...Array#flatten(1)`
92
+ or `Enumerable#collect..Array#flatten(1)`.
93
+ Reference: https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code
94
+ Enabled: true
95
+ VersionAdded: '0.30'
96
+ EnabledForFlattenWithoutParams: true
97
+
98
+ Performance/InefficientHashSearch:
99
+ Description: Use `key?` or `value?` instead of `keys.include?` or `values.include?`.
100
+ Reference: https://github.com/JuanitoFatas/fast-ruby#hashkey-instead-of-hashkeysinclude-code
101
+ Enabled: true
102
+ VersionAdded: '0.56'
103
+ Safe: false
104
+
105
+ Performance/IoReadlines:
106
+ Description: Use `IO.each_line` (`IO#each_line`) instead of `IO.readlines` (`IO#readlines`).
107
+ Reference: https://docs.gitlab.com/ee/development/performance.html#reading-from-files-and-other-data-sources
108
+ Enabled: true
109
+ VersionAdded: '1.7'
110
+
111
+ Performance/MapCompact:
112
+ Description: Use `filter_map` instead of `collection.map(&:do_something).compact`.
113
+ Enabled: true
114
+ SafeAutoCorrect: false
115
+ VersionAdded: '1.11'
116
+
117
+ Performance/MethodObjectAsBlock:
118
+ Description: Use block explicitly instead of block-passing a method object.
119
+ Reference: https://github.com/JuanitoFatas/fast-ruby#normal-way-to-apply-method-vs-method-code
120
+ Enabled: true
121
+ VersionAdded: '1.9'
122
+
123
+ Performance/OpenStruct:
124
+ Description: Use `Struct` instead of `OpenStruct`.
125
+ Enabled: true
126
+ VersionAdded: '0.61'
127
+ Safe: false
128
+
129
+ Performance/RangeInclude:
130
+ Description: Use `Range#cover?` instead of `Range#include?` (or `Range#member?`).
131
+ Reference: https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code
132
+ Enabled: true
133
+ VersionAdded: '0.36'
134
+ VersionChanged: '1.7'
135
+ Safe: false
136
+
137
+ Performance/RedundantBlockCall:
138
+ Description: Use `yield` instead of `block.call`.
139
+ Reference: https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode
140
+ Enabled: true
141
+ VersionAdded: '0.36'
142
+
143
+ Performance/RedundantEqualityComparisonBlock:
144
+ Description: Checks for uses `Enumerable#all?`, `Enumerable#any?`, `Enumerable#one?`,
145
+ or `Enumerable#none?` are compared with `===` or similar methods in block.
146
+ Reference: https://github.com/rails/rails/pull/41363
147
+ Enabled: true
148
+ Safe: false
149
+ VersionAdded: '1.10'
150
+
151
+ Performance/RedundantMatch:
152
+ Description: Use `=~` instead of `String#match` or `Regexp#match` in a context where
153
+ the returned `MatchData` is not needed.
154
+ Enabled: true
155
+ VersionAdded: '0.36'
156
+
157
+ Performance/RedundantMerge:
158
+ Description: Use Hash#[]=, rather than Hash#merge! with a single key-value pair.
159
+ Reference: https://github.com/JuanitoFatas/fast-ruby#hashmerge-vs-hash-code
160
+ Enabled: true
161
+ Safe: false
162
+ VersionAdded: '0.36'
163
+ VersionChanged: '1.11'
164
+ MaxKeyValuePairs: 2
165
+
166
+ Performance/RedundantSortBlock:
167
+ Description: Use `sort` instead of `sort { |a, b| a <=> b }`.
168
+ Enabled: true
169
+ VersionAdded: '1.7'
170
+
171
+ Performance/RedundantSplitRegexpArgument:
172
+ Description: Identifies places where `split` argument can be replaced from a deterministic
173
+ regexp to a string.
174
+ Enabled: true
175
+ VersionAdded: '1.10'
176
+
177
+ Performance/RedundantStringChars:
178
+ Description: Checks for redundant `String#chars`.
179
+ Enabled: true
180
+ VersionAdded: '1.7'
181
+
182
+ Performance/RegexpMatch:
183
+ Description: Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`,
184
+ `Regexp#===`, or `=~` when `MatchData` is not used.
185
+ Reference: https://github.com/JuanitoFatas/fast-ruby#regexp-vs-stringmatch-vs-string-vs-stringmatch-code-
186
+ Enabled: true
187
+ VersionAdded: '0.47'
188
+
189
+ Performance/ReverseEach:
190
+ Description: Use `reverse_each` instead of `reverse.each`.
191
+ Reference: https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code
192
+ Enabled: true
193
+ VersionAdded: '0.30'
194
+
195
+ Performance/ReverseFirst:
196
+ Description: Use `last(n).reverse` instead of `reverse.first(n)`.
197
+ Enabled: true
198
+ VersionAdded: '1.7'
199
+
200
+ Performance/SelectMap:
201
+ Description: Use `filter_map` instead of `ary.select(&:foo).map(&:bar)`.
202
+ Enabled: true
203
+ VersionAdded: '1.11'
204
+
205
+ Performance/Size:
206
+ Description: Use `size` instead of `count` for counting the number of elements in
207
+ `Array` and `Hash`.
208
+ Reference: https://github.com/JuanitoFatas/fast-ruby#arraylength-vs-arraysize-vs-arraycount-code
209
+ Enabled: true
210
+ VersionAdded: '0.30'
211
+
212
+ Performance/SortReverse:
213
+ Description: Use `sort.reverse` instead of `sort { |a, b| b <=> a }`.
214
+ Enabled: true
215
+ VersionAdded: '1.7'
216
+
217
+ Performance/Squeeze:
218
+ Description: Use `squeeze('a')` instead of `gsub(/a+/, 'a')`.
219
+ Reference: https://github.com/JuanitoFatas/fast-ruby#remove-extra-spaces-or-other-contiguous-characters-code
220
+ Enabled: true
221
+ VersionAdded: '1.7'
222
+
223
+ Performance/StartWith:
224
+ Description: Use `start_with?` instead of a regex match anchored to the beginning
225
+ of a string.
226
+ Reference: https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end
227
+ SafeAutoCorrect: false
228
+ Enabled: true
229
+ SafeMultiline: false
230
+ VersionAdded: '0.36'
231
+ VersionChanged: '1.10'
232
+
233
+ Performance/StringIdentifierArgument:
234
+ Description: Use symbol identifier argument instead of string identifier argument.
235
+ Enabled: true
236
+ VersionAdded: '1.13'
237
+
238
+ Performance/StringInclude:
239
+ Description: Use `String#include?` instead of a regex match with literal-only pattern.
240
+ Enabled: true
241
+ SafeAutoCorrect: false
242
+ VersionAdded: '1.7'
243
+ VersionChanged: '1.12'
244
+
245
+ Performance/StringReplacement:
246
+ Description: Use `tr` instead of `gsub` when you are replacing the same number of
247
+ characters. Use `delete` instead of `gsub` when you are deleting characters.
248
+ Reference: https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code
249
+ Enabled: true
250
+ VersionAdded: '0.33'
251
+
252
+ Performance/Sum:
253
+ Description: Use `sum` instead of a custom array summation.
254
+ SafeAutoCorrect: false
255
+ Reference: https://blog.bigbinary.com/2016/11/02/ruby-2-4-introduces-enumerable-sum.html
256
+ Enabled: true
257
+ VersionAdded: '1.8'
258
+ VersionChanged: '1.13'
259
+ OnlySumOrWithInitialValue: false
260
+
261
+ Performance/TimesMap:
262
+ Description: Checks for .times.map calls.
263
+ Enabled: true
264
+ SafeAutoCorrect: false
265
+ VersionAdded: '0.36'
266
+ VersionChanged: '1.13'