rubocop 1.19.0 → 1.23.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/README.md +1 -1
- data/config/default.yml +129 -21
- data/lib/rubocop/config.rb +5 -0
- data/lib/rubocop/config_loader.rb +5 -3
- data/lib/rubocop/config_validator.rb +9 -1
- data/lib/rubocop/cop/base.rb +3 -3
- data/lib/rubocop/cop/bundler/gem_comment.rb +3 -3
- data/lib/rubocop/cop/bundler/gem_filename.rb +103 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +45 -21
- data/lib/rubocop/cop/bundler/ordered_gems.rb +3 -12
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +11 -10
- data/lib/rubocop/cop/documentation.rb +1 -1
- data/lib/rubocop/cop/gemspec/date_assignment.rb +2 -10
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -10
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +3 -12
- data/lib/rubocop/cop/gemspec/require_mfa.rb +146 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +31 -24
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -10
- data/lib/rubocop/cop/generator.rb +14 -8
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +60 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +2 -1
- data/lib/rubocop/cop/layout/dot_position.rb +34 -5
- data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +22 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +7 -4
- data/lib/rubocop/cop/layout/end_alignment.rb +2 -3
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -1
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +9 -7
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +3 -3
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +3 -0
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/redundant_line_break.rb +1 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +6 -5
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +15 -4
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -0
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +2 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +11 -5
- data/lib/rubocop/cop/layout/space_inside_parens.rb +74 -28
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +111 -0
- data/lib/rubocop/cop/lint/ambiguous_range.rb +11 -11
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -5
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +18 -5
- data/lib/rubocop/cop/lint/boolean_symbol.rb +5 -0
- data/lib/rubocop/cop/lint/debugger.rb +2 -4
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +4 -4
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -2
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +24 -1
- data/lib/rubocop/cop/lint/else_layout.rb +10 -6
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +12 -3
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +67 -0
- data/lib/rubocop/cop/lint/interpolation_check.rb +5 -0
- data/lib/rubocop/cop/lint/loop.rb +4 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +5 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +16 -2
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +4 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +17 -0
- data/lib/rubocop/cop/lint/percent_string_array.rb +10 -0
- data/lib/rubocop/cop/lint/raise_exception.rb +4 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +5 -4
- data/lib/rubocop/cop/lint/require_relative_self_path.rb +50 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -3
- data/lib/rubocop/cop/lint/useless_method_definition.rb +3 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +117 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +7 -4
- data/lib/rubocop/cop/lint/useless_times.rb +4 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +6 -0
- data/lib/rubocop/cop/metrics/parameter_lists.rb +5 -2
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -1
- data/lib/rubocop/cop/mixin/annotation_comment.rb +57 -34
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +5 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -2
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -1
- data/lib/rubocop/cop/mixin/gemspec_help.rb +30 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +3 -3
- data/lib/rubocop/cop/mixin/heredoc.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +2 -2
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +9 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +11 -3
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +9 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -1
- data/lib/rubocop/cop/mixin/trailing_body.rb +1 -1
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +0 -3
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +37 -4
- data/lib/rubocop/cop/naming/inclusive_language.rb +9 -9
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +5 -4
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +7 -0
- data/lib/rubocop/cop/security/io_methods.rb +49 -0
- data/lib/rubocop/cop/security/json_load.rb +8 -7
- data/lib/rubocop/cop/security/open.rb +4 -0
- data/lib/rubocop/cop/security/yaml_load.rb +4 -0
- data/lib/rubocop/cop/style/accessor_grouping.rb +2 -2
- data/lib/rubocop/cop/style/and_or.rb +5 -0
- data/lib/rubocop/cop/style/arguments_forwarding.rb +13 -2
- data/lib/rubocop/cop/style/array_coercion.rb +21 -3
- data/lib/rubocop/cop/style/ascii_comments.rb +0 -3
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -6
- data/lib/rubocop/cop/style/case_equality.rb +6 -9
- data/lib/rubocop/cop/style/case_like_if.rb +5 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +9 -0
- data/lib/rubocop/cop/style/collection_compact.rb +7 -5
- data/lib/rubocop/cop/style/collection_methods.rb +8 -6
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/comment_annotation.rb +25 -39
- data/lib/rubocop/cop/style/commented_keyword.rb +9 -4
- data/lib/rubocop/cop/style/date_time.rb +5 -0
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +1 -1
- data/lib/rubocop/cop/style/documentation.rb +23 -8
- data/lib/rubocop/cop/style/double_negation.rb +27 -6
- data/lib/rubocop/cop/style/empty_method.rb +2 -2
- data/lib/rubocop/cop/style/encoding.rb +26 -15
- data/lib/rubocop/cop/style/explicit_block_argument.rb +21 -11
- data/lib/rubocop/cop/style/float_division.rb +10 -2
- data/lib/rubocop/cop/style/format_string_token.rb +2 -1
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +7 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +4 -0
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +11 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -0
- data/lib/rubocop/cop/style/hash_except.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -6
- data/lib/rubocop/cop/style/hash_transform_values.rb +4 -6
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +18 -16
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +18 -4
- data/lib/rubocop/cop/style/infinite_loop.rb +4 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +9 -2
- data/lib/rubocop/cop/style/lambda_call.rb +1 -1
- data/lib/rubocop/cop/style/line_end_concatenation.rb +14 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +6 -6
- data/lib/rubocop/cop/style/module_function.rb +8 -9
- data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +73 -6
- data/lib/rubocop/cop/style/negated_if.rb +1 -1
- data/lib/rubocop/cop/style/negated_unless.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +2 -2
- data/lib/rubocop/cop/style/not.rb +2 -2
- data/lib/rubocop/cop/style/numbered_parameters.rb +46 -0
- data/lib/rubocop/cop/style/numbered_parameters_limit.rb +50 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +7 -8
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -0
- data/lib/rubocop/cop/style/open_struct_use.rb +69 -0
- data/lib/rubocop/cop/style/optional_arguments.rb +4 -0
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +14 -4
- data/lib/rubocop/cop/style/parallel_assignment.rb +1 -1
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +12 -2
- data/lib/rubocop/cop/style/percent_q_literals.rb +2 -2
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +9 -4
- data/lib/rubocop/cop/style/quoted_symbols.rb +21 -7
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +19 -9
- data/lib/rubocop/cop/style/redundant_begin.rb +25 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +2 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +4 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +12 -3
- data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -3
- data/lib/rubocop/cop/style/redundant_self.rb +10 -0
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +4 -3
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +23 -28
- data/lib/rubocop/cop/style/redundant_sort.rb +51 -18
- data/lib/rubocop/cop/style/regexp_literal.rb +3 -3
- data/lib/rubocop/cop/style/return_nil.rb +2 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +13 -2
- data/lib/rubocop/cop/style/select_by_regexp.rb +139 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +5 -0
- data/lib/rubocop/cop/style/slicing_with_range.rb +13 -0
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +4 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +4 -0
- data/lib/rubocop/cop/style/static_class.rb +5 -5
- data/lib/rubocop/cop/style/string_chars.rb +4 -2
- data/lib/rubocop/cop/style/string_concatenation.rb +5 -1
- data/lib/rubocop/cop/style/string_hash_keys.rb +4 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +4 -0
- data/lib/rubocop/cop/style/swap_values.rb +4 -2
- data/lib/rubocop/cop/style/symbol_array.rb +3 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +26 -0
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +19 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +3 -3
- data/lib/rubocop/cop/style/yoda_condition.rb +24 -7
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -0
- data/lib/rubocop/cop/util.rb +15 -4
- data/lib/rubocop/cops_documentation_generator.rb +17 -5
- data/lib/rubocop/formatter/html_formatter.rb +5 -2
- data/lib/rubocop/formatter/json_formatter.rb +4 -1
- data/lib/rubocop/magic_comment.rb +44 -15
- data/lib/rubocop/options.rb +126 -112
- data/lib/rubocop/rake_task.rb +1 -1
- data/lib/rubocop/remote_config.rb +1 -1
- data/lib/rubocop/result_cache.rb +3 -3
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +6 -2
- data/lib/rubocop/rspec/parallel_formatter.rb +90 -0
- data/lib/rubocop/rspec/support.rb +1 -0
- data/lib/rubocop/runner.rb +2 -3
- data/lib/rubocop/target_finder.rb +1 -1
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop/yaml_duplication_checker.rb +1 -1
- data/lib/rubocop.rb +14 -2
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf11fe2d8f8be8879d6afc63d6f3be50b970c7910c83f1d22847d1fc9654d4aa
|
4
|
+
data.tar.gz: fd4c7ef3838a286efe3d1729672cc7a0e72f47cfb4c8d815699d53d2a974a372
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4014183525b58378a0e628ae5136d17c148a41c6c25dd51eddc810ca08fbd89d652f6c715b58eef149005af1145469936416864869b6e63a4c9e521627ab1cb4
|
7
|
+
data.tar.gz: 6e0e2a9a9d6fae829b73bd49814965a28d447207aaf7d1dda073f34130343557df965c77cc998d6ddb0d59eca09f1307d6ca56cbd3fcade575ca52950d1a56d3
|
data/README.md
CHANGED
@@ -54,7 +54,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
|
|
54
54
|
in your `Gemfile`:
|
55
55
|
|
56
56
|
```rb
|
57
|
-
gem 'rubocop', '~> 1.
|
57
|
+
gem 'rubocop', '~> 1.23', require: false
|
58
58
|
```
|
59
59
|
|
60
60
|
See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
|
data/config/default.yml
CHANGED
@@ -130,7 +130,7 @@ AllCops:
|
|
130
130
|
# What MRI version of the Ruby interpreter is the inspected code intended to
|
131
131
|
# run on? (If there is more than one, set this to the lowest version.)
|
132
132
|
# If a value is specified for TargetRubyVersion then it is used. Acceptable
|
133
|
-
# values are
|
133
|
+
# values are specified as a float (i.e. 3.0); the teeny version of Ruby
|
134
134
|
# should not be included. If the project specifies a Ruby version in the
|
135
135
|
# .tool-versions or .ruby-version files, Gemfile or gems.rb file, RuboCop will
|
136
136
|
# try to determine the desired version of Ruby by inspecting the
|
@@ -150,6 +150,7 @@ AllCops:
|
|
150
150
|
rubocop-minitest: [minitest]
|
151
151
|
rubocop-sequel: [sequel]
|
152
152
|
rubocop-rake: [rake]
|
153
|
+
rubocop-graphql: [graphql]
|
153
154
|
|
154
155
|
#################### Bundler ###############################
|
155
156
|
|
@@ -174,6 +175,20 @@ Bundler/GemComment:
|
|
174
175
|
IgnoredGems: []
|
175
176
|
OnlyFor: []
|
176
177
|
|
178
|
+
Bundler/GemFilename:
|
179
|
+
Description: 'Enforces the filename for managing gems.'
|
180
|
+
Enabled: true
|
181
|
+
VersionAdded: '1.20'
|
182
|
+
EnforcedStyle: 'Gemfile'
|
183
|
+
SupportedStyles:
|
184
|
+
- 'Gemfile'
|
185
|
+
- 'gems.rb'
|
186
|
+
Include:
|
187
|
+
- '**/Gemfile'
|
188
|
+
- '**/gems.rb'
|
189
|
+
- '**/Gemfile.lock'
|
190
|
+
- '**/gems.locked'
|
191
|
+
|
177
192
|
Bundler/GemVersion:
|
178
193
|
Description: 'Requires or forbids specifying gem versions.'
|
179
194
|
Enabled: false
|
@@ -195,6 +210,7 @@ Bundler/InsecureProtocolSource:
|
|
195
210
|
'https://rubygems.org' if possible, or 'http://rubygems.org' if not.
|
196
211
|
Enabled: true
|
197
212
|
VersionAdded: '0.50'
|
213
|
+
AllowHttpProtocol: true
|
198
214
|
Include:
|
199
215
|
- '**/*.gemfile'
|
200
216
|
- '**/Gemfile'
|
@@ -243,11 +259,20 @@ Gemspec/OrderedDependencies:
|
|
243
259
|
Include:
|
244
260
|
- '**/*.gemspec'
|
245
261
|
|
262
|
+
Gemspec/RequireMFA:
|
263
|
+
Description: 'Checks that the gemspec has metadata to require MFA from RubyGems.'
|
264
|
+
Enabled: pending
|
265
|
+
VersionAdded: '1.23'
|
266
|
+
Reference:
|
267
|
+
- https://guides.rubygems.org/mfa-requirement-opt-in/
|
268
|
+
Include:
|
269
|
+
- '**/*.gemspec'
|
270
|
+
|
246
271
|
Gemspec/RequiredRubyVersion:
|
247
272
|
Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.'
|
248
273
|
Enabled: true
|
249
274
|
VersionAdded: '0.52'
|
250
|
-
VersionChanged: '
|
275
|
+
VersionChanged: '1.22'
|
251
276
|
Include:
|
252
277
|
- '**/*.gemspec'
|
253
278
|
|
@@ -496,13 +521,13 @@ Layout/EmptyLineBetweenDefs:
|
|
496
521
|
StyleGuide: '#empty-lines-between-methods'
|
497
522
|
Enabled: true
|
498
523
|
VersionAdded: '0.49'
|
499
|
-
VersionChanged: '1.
|
524
|
+
VersionChanged: '1.23'
|
500
525
|
EmptyLineBetweenMethodDefs: true
|
501
526
|
EmptyLineBetweenClassDefs: true
|
502
527
|
EmptyLineBetweenModuleDefs: true
|
503
|
-
#
|
504
|
-
# need an empty line between them.
|
505
|
-
AllowAdjacentOneLineDefs:
|
528
|
+
# `AllowAdjacentOneLineDefs` means that single line method definitions don't
|
529
|
+
# need an empty line between them. `true` by default.
|
530
|
+
AllowAdjacentOneLineDefs: true
|
506
531
|
# Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2]
|
507
532
|
NumberOfEmptyLines: 1
|
508
533
|
|
@@ -943,7 +968,6 @@ Layout/LineLength:
|
|
943
968
|
Enabled: true
|
944
969
|
VersionAdded: '0.25'
|
945
970
|
VersionChanged: '1.4'
|
946
|
-
AutoCorrect: true
|
947
971
|
Max: 120
|
948
972
|
# To make it possible to copy or click on URIs in the code, we allow lines
|
949
973
|
# containing a URI to be longer than Max.
|
@@ -1347,10 +1371,11 @@ Layout/SpaceInsideParens:
|
|
1347
1371
|
StyleGuide: '#spaces-braces'
|
1348
1372
|
Enabled: true
|
1349
1373
|
VersionAdded: '0.49'
|
1350
|
-
VersionChanged: '
|
1374
|
+
VersionChanged: '1.22'
|
1351
1375
|
EnforcedStyle: no_space
|
1352
1376
|
SupportedStyles:
|
1353
1377
|
- space
|
1378
|
+
- compact
|
1354
1379
|
- no_space
|
1355
1380
|
|
1356
1381
|
Layout/SpaceInsidePercentLiteralDelimiters:
|
@@ -1434,6 +1459,13 @@ Lint/AmbiguousOperator:
|
|
1434
1459
|
VersionAdded: '0.17'
|
1435
1460
|
VersionChanged: '0.83'
|
1436
1461
|
|
1462
|
+
Lint/AmbiguousOperatorPrecedence:
|
1463
|
+
Description: >-
|
1464
|
+
Checks for expressions containing multiple binary operations with
|
1465
|
+
ambiguous precedence.
|
1466
|
+
Enabled: pending
|
1467
|
+
VersionAdded: '1.21'
|
1468
|
+
|
1437
1469
|
Lint/AmbiguousRange:
|
1438
1470
|
Description: Checks for ranges with ambiguous boundaries.
|
1439
1471
|
Enabled: pending
|
@@ -1471,9 +1503,9 @@ Lint/BinaryOperatorWithIdenticalOperands:
|
|
1471
1503
|
Lint/BooleanSymbol:
|
1472
1504
|
Description: 'Check for `:true` and `:false` symbols.'
|
1473
1505
|
Enabled: true
|
1474
|
-
|
1506
|
+
SafeAutoCorrect: false
|
1475
1507
|
VersionAdded: '0.50'
|
1476
|
-
VersionChanged: '
|
1508
|
+
VersionChanged: '1.22'
|
1477
1509
|
|
1478
1510
|
Lint/CircularArgumentReference:
|
1479
1511
|
Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument."
|
@@ -1519,6 +1551,11 @@ Lint/Debugger:
|
|
1519
1551
|
Capybara:
|
1520
1552
|
- save_and_open_page
|
1521
1553
|
- save_and_open_screenshot
|
1554
|
+
debug.rb:
|
1555
|
+
- binding.b
|
1556
|
+
- binding.break
|
1557
|
+
- Kernel.binding.b
|
1558
|
+
- Kernel.binding.break
|
1522
1559
|
Pry:
|
1523
1560
|
- binding.pry
|
1524
1561
|
- binding.remote_pry
|
@@ -1527,6 +1564,8 @@ Lint/Debugger:
|
|
1527
1564
|
Rails:
|
1528
1565
|
- debugger
|
1529
1566
|
- Kernel.debugger
|
1567
|
+
RubyJard:
|
1568
|
+
- jard
|
1530
1569
|
WebConsole:
|
1531
1570
|
- binding.console
|
1532
1571
|
|
@@ -1539,6 +1578,7 @@ Lint/DeprecatedConstants:
|
|
1539
1578
|
Description: 'Checks for deprecated constants.'
|
1540
1579
|
Enabled: pending
|
1541
1580
|
VersionAdded: '1.8'
|
1581
|
+
VersionChanged: '1.22'
|
1542
1582
|
# You can configure deprecated constants.
|
1543
1583
|
# If there is an alternative method, you can set alternative value as `Alternative`.
|
1544
1584
|
# And you can set the deprecated version as `DeprecatedVersion`.
|
@@ -1559,6 +1599,9 @@ Lint/DeprecatedConstants:
|
|
1559
1599
|
'FALSE':
|
1560
1600
|
Alternative: 'false'
|
1561
1601
|
DeprecatedVersion: '2.4'
|
1602
|
+
'Net::HTTPServerException':
|
1603
|
+
Alternative: 'Net::HTTPClientException'
|
1604
|
+
DeprecatedVersion: '2.6'
|
1562
1605
|
'Random::DEFAULT':
|
1563
1606
|
Alternative: 'Random.new'
|
1564
1607
|
DeprecatedVersion: '3.0'
|
@@ -1750,6 +1793,11 @@ Lint/ImplicitStringConcatenation:
|
|
1750
1793
|
Enabled: true
|
1751
1794
|
VersionAdded: '0.36'
|
1752
1795
|
|
1796
|
+
Lint/IncompatibleIoSelectWithFiberScheduler:
|
1797
|
+
Description: 'Checks for `IO.select` that is incompatible with Fiber Scheduler.'
|
1798
|
+
Enabled: pending
|
1799
|
+
VersionAdded: '1.21'
|
1800
|
+
|
1753
1801
|
Lint/IneffectiveAccessModifier:
|
1754
1802
|
Description: >-
|
1755
1803
|
Checks for attempts to use `private` or `protected` to set
|
@@ -2013,6 +2061,11 @@ Lint/RequireParentheses:
|
|
2013
2061
|
Enabled: true
|
2014
2062
|
VersionAdded: '0.18'
|
2015
2063
|
|
2064
|
+
Lint/RequireRelativeSelfPath:
|
2065
|
+
Description: 'Checks for uses a file requiring itself with `require_relative`.'
|
2066
|
+
Enabled: pending
|
2067
|
+
VersionAdded: '1.22'
|
2068
|
+
|
2016
2069
|
Lint/RescueException:
|
2017
2070
|
Description: 'Avoid rescuing the Exception class.'
|
2018
2071
|
StyleGuide: '#no-blind-rescues'
|
@@ -2265,6 +2318,11 @@ Lint/UselessMethodDefinition:
|
|
2265
2318
|
Safe: false
|
2266
2319
|
AllowComments: true
|
2267
2320
|
|
2321
|
+
Lint/UselessRuby2Keywords:
|
2322
|
+
Description: 'Finds unnecessary uses of `ruby2_keywords`.'
|
2323
|
+
Enabled: pending
|
2324
|
+
VersionAdded: '1.23'
|
2325
|
+
|
2268
2326
|
Lint/UselessSetterCall:
|
2269
2327
|
Description: 'Checks for useless setter call to a local variable.'
|
2270
2328
|
Enabled: true
|
@@ -2458,6 +2516,7 @@ Naming/FileName:
|
|
2458
2516
|
StyleGuide: '#snake-case-files'
|
2459
2517
|
Enabled: true
|
2460
2518
|
VersionAdded: '0.50'
|
2519
|
+
VersionChanged: '1.23'
|
2461
2520
|
# Camel case file names listed in `AllCops:Include` and all file names listed
|
2462
2521
|
# in `AllCops:Exclude` are excluded by default. Add extra excludes here.
|
2463
2522
|
Exclude: []
|
@@ -2470,6 +2529,13 @@ Naming/FileName:
|
|
2470
2529
|
# whether each source file's class or module name matches the file name --
|
2471
2530
|
# not whether the nested module hierarchy matches the subdirectory path.
|
2472
2531
|
CheckDefinitionPathHierarchy: true
|
2532
|
+
# paths that are considered root directories, for example "lib" in most ruby projects
|
2533
|
+
# or "app/models" in rails projects
|
2534
|
+
CheckDefinitionPathHierarchyRoots:
|
2535
|
+
- lib
|
2536
|
+
- spec
|
2537
|
+
- test
|
2538
|
+
- src
|
2473
2539
|
# If non-`nil`, expect all source file names to match the following regex.
|
2474
2540
|
# Only the file name itself is matched, not the entire file path.
|
2475
2541
|
# Use anchors as necessary if you want to match the entire name rather than
|
@@ -2542,8 +2608,9 @@ Naming/HeredocDelimiterNaming:
|
|
2542
2608
|
|
2543
2609
|
Naming/InclusiveLanguage:
|
2544
2610
|
Description: 'Recommend the use of inclusive language instead of problematic terms.'
|
2545
|
-
Enabled:
|
2611
|
+
Enabled: false
|
2546
2612
|
VersionAdded: '1.18'
|
2613
|
+
VersionChanged: '1.21'
|
2547
2614
|
CheckIdentifiers: true
|
2548
2615
|
CheckConstants: true
|
2549
2616
|
CheckVariables: true
|
@@ -2699,6 +2766,14 @@ Security/Eval:
|
|
2699
2766
|
Enabled: true
|
2700
2767
|
VersionAdded: '0.47'
|
2701
2768
|
|
2769
|
+
Security/IoMethods:
|
2770
|
+
Description: >-
|
2771
|
+
Checks for the first argument to `IO.read`, `IO.binread`, `IO.write`, `IO.binwrite`,
|
2772
|
+
`IO.foreach`, and `IO.readlines`.
|
2773
|
+
Enabled: pending
|
2774
|
+
Safe: false
|
2775
|
+
VersionAdded: '1.22'
|
2776
|
+
|
2702
2777
|
Security/JSONLoad:
|
2703
2778
|
Description: >-
|
2704
2779
|
Prefer usage of `JSON.parse` over `JSON.load` due to potential
|
@@ -2706,10 +2781,9 @@ Security/JSONLoad:
|
|
2706
2781
|
Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load'
|
2707
2782
|
Enabled: true
|
2708
2783
|
VersionAdded: '0.43'
|
2709
|
-
VersionChanged: '
|
2784
|
+
VersionChanged: '1.22'
|
2710
2785
|
# Autocorrect here will change to a method that may cause crashes depending
|
2711
2786
|
# on the value of the argument.
|
2712
|
-
AutoCorrect: false
|
2713
2787
|
SafeAutoCorrect: false
|
2714
2788
|
|
2715
2789
|
Security/MarshalLoad:
|
@@ -2775,8 +2849,9 @@ Style/AndOr:
|
|
2775
2849
|
Description: 'Use &&/|| instead of and/or.'
|
2776
2850
|
StyleGuide: '#no-and-or-or'
|
2777
2851
|
Enabled: true
|
2852
|
+
SafeAutoCorrect: false
|
2778
2853
|
VersionAdded: '0.9'
|
2779
|
-
VersionChanged: '
|
2854
|
+
VersionChanged: '1.21'
|
2780
2855
|
# Whether `and` and `or` are banned only in conditionals (conditionals)
|
2781
2856
|
# or completely (always).
|
2782
2857
|
EnforcedStyle: conditionals
|
@@ -2810,9 +2885,9 @@ Style/ArrayJoin:
|
|
2810
2885
|
Style/AsciiComments:
|
2811
2886
|
Description: 'Use only ascii symbols in comments.'
|
2812
2887
|
StyleGuide: '#english-comments'
|
2813
|
-
Enabled:
|
2888
|
+
Enabled: false
|
2814
2889
|
VersionAdded: '0.9'
|
2815
|
-
VersionChanged: '
|
2890
|
+
VersionChanged: '1.21'
|
2816
2891
|
AllowedChars:
|
2817
2892
|
- ©
|
2818
2893
|
|
@@ -2974,7 +3049,7 @@ Style/CaseEquality:
|
|
2974
3049
|
Enabled: true
|
2975
3050
|
VersionAdded: '0.9'
|
2976
3051
|
VersionChanged: '0.89'
|
2977
|
-
# If AllowOnConstant is enabled, the cop will ignore violations when the receiver of
|
3052
|
+
# If `AllowOnConstant` option is enabled, the cop will ignore violations when the receiver of
|
2978
3053
|
# the case equality operator is a constant.
|
2979
3054
|
#
|
2980
3055
|
# # bad
|
@@ -3149,7 +3224,7 @@ Style/CommentAnnotation:
|
|
3149
3224
|
StyleGuide: '#annotate-keywords'
|
3150
3225
|
Enabled: true
|
3151
3226
|
VersionAdded: '0.10'
|
3152
|
-
VersionChanged: '1.
|
3227
|
+
VersionChanged: '1.20'
|
3153
3228
|
Keywords:
|
3154
3229
|
- TODO
|
3155
3230
|
- FIXME
|
@@ -3669,7 +3744,7 @@ Style/InPatternThen:
|
|
3669
3744
|
Style/InfiniteLoop:
|
3670
3745
|
Description: >-
|
3671
3746
|
Use Kernel#loop for infinite loops.
|
3672
|
-
This cop is unsafe
|
3747
|
+
This cop is unsafe if the body may raise a `StopIteration` exception.
|
3673
3748
|
Safe: false
|
3674
3749
|
StyleGuide: '#infinite-loop'
|
3675
3750
|
Enabled: true
|
@@ -4095,6 +4170,21 @@ Style/Not:
|
|
4095
4170
|
VersionAdded: '0.9'
|
4096
4171
|
VersionChanged: '0.20'
|
4097
4172
|
|
4173
|
+
Style/NumberedParameters:
|
4174
|
+
Description: 'Restrict the usage of numbered parameters.'
|
4175
|
+
Enabled: pending
|
4176
|
+
VersionAdded: '1.22'
|
4177
|
+
EnforcedStyle: allow_single_line
|
4178
|
+
SupportedStyles:
|
4179
|
+
- allow_single_line
|
4180
|
+
- disallow
|
4181
|
+
|
4182
|
+
Style/NumberedParametersLimit:
|
4183
|
+
Description: 'Avoid excessive numbered params in a single block.'
|
4184
|
+
Enabled: pending
|
4185
|
+
VersionAdded: '1.22'
|
4186
|
+
Max: 1
|
4187
|
+
|
4098
4188
|
Style/NumericLiteralPrefix:
|
4099
4189
|
Description: 'Use smallcase prefixes for numeric literals.'
|
4100
4190
|
StyleGuide: '#numeric-literal-prefixes'
|
@@ -4105,7 +4195,6 @@ Style/NumericLiteralPrefix:
|
|
4105
4195
|
- zero_with_o
|
4106
4196
|
- zero_only
|
4107
4197
|
|
4108
|
-
|
4109
4198
|
Style/NumericLiterals:
|
4110
4199
|
Description: >-
|
4111
4200
|
Add underscores to large numeric literals to improve their
|
@@ -4150,6 +4239,16 @@ Style/OneLineConditional:
|
|
4150
4239
|
VersionAdded: '0.9'
|
4151
4240
|
VersionChanged: '0.90'
|
4152
4241
|
|
4242
|
+
Style/OpenStructUse:
|
4243
|
+
Description: >-
|
4244
|
+
Avoid using OpenStruct. As of Ruby 3.0, use is officially discouraged due to performance,
|
4245
|
+
version compatibility, and potential security issues.
|
4246
|
+
Reference:
|
4247
|
+
- https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats
|
4248
|
+
|
4249
|
+
Enabled: pending
|
4250
|
+
VersionAdded: '1.23'
|
4251
|
+
|
4153
4252
|
Style/OptionHash:
|
4154
4253
|
Description: "Don't use option hashes when you can use keyword arguments."
|
4155
4254
|
Enabled: false
|
@@ -4426,6 +4525,8 @@ Style/RedundantSort:
|
|
4426
4525
|
`max_by` instead of `sort_by...last`, etc.
|
4427
4526
|
Enabled: true
|
4428
4527
|
VersionAdded: '0.76'
|
4528
|
+
VersionChanged: '1.22'
|
4529
|
+
Safe: false
|
4429
4530
|
|
4430
4531
|
Style/RedundantSortBy:
|
4431
4532
|
Description: 'Use `sort` instead of `sort_by { |x| x }`.'
|
@@ -4506,6 +4607,12 @@ Style/Sample:
|
|
4506
4607
|
Enabled: true
|
4507
4608
|
VersionAdded: '0.30'
|
4508
4609
|
|
4610
|
+
Style/SelectByRegexp:
|
4611
|
+
Description: 'Prefer grep/grep_v to select/reject with a regexp match.'
|
4612
|
+
Enabled: pending
|
4613
|
+
SafeAutoCorrect: false
|
4614
|
+
VersionAdded: '1.22'
|
4615
|
+
|
4509
4616
|
Style/SelfAssignment:
|
4510
4617
|
Description: >-
|
4511
4618
|
Checks for places where self-assignment shorthand should have
|
@@ -4692,8 +4799,9 @@ Style/StructInheritance:
|
|
4692
4799
|
Description: 'Checks for inheritance from Struct.new.'
|
4693
4800
|
StyleGuide: '#no-extend-struct-new'
|
4694
4801
|
Enabled: true
|
4802
|
+
SafeAutoCorrect: false
|
4695
4803
|
VersionAdded: '0.29'
|
4696
|
-
VersionChanged: '
|
4804
|
+
VersionChanged: '1.20'
|
4697
4805
|
|
4698
4806
|
Style/SwapValues:
|
4699
4807
|
Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
|
data/lib/rubocop/config.rb
CHANGED
@@ -51,6 +51,11 @@ module RuboCop
|
|
51
51
|
self
|
52
52
|
end
|
53
53
|
|
54
|
+
def validate_after_resolution
|
55
|
+
@validator.validate_after_resolution
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
54
59
|
def_delegators :@hash, :[], :[]=, :delete, :dig, :each, :key?, :keys, :each_key,
|
55
60
|
:fetch, :map, :merge, :replace, :to_h, :to_hash, :transform_values
|
56
61
|
def_delegators :@validator, :validate, :target_ruby_version
|
@@ -101,6 +101,8 @@ module RuboCop
|
|
101
101
|
return default_configuration if config_file == DEFAULT_FILE
|
102
102
|
|
103
103
|
config = load_file(config_file, check: check)
|
104
|
+
config.validate_after_resolution if check
|
105
|
+
|
104
106
|
if ignore_parent_exclusion?
|
105
107
|
print 'Ignoring AllCops/Exclude from parent folders' if debug?
|
106
108
|
else
|
@@ -134,7 +136,7 @@ module RuboCop
|
|
134
136
|
end
|
135
137
|
end
|
136
138
|
|
137
|
-
# Returns the path
|
139
|
+
# Returns the path RuboCop inferred as the root of the project. No file
|
138
140
|
# searches will go past this directory.
|
139
141
|
def project_root
|
140
142
|
@project_root ||= find_project_root
|
@@ -143,7 +145,7 @@ module RuboCop
|
|
143
145
|
PENDING_BANNER = <<~BANNER
|
144
146
|
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.
|
145
147
|
|
146
|
-
Please also note that can
|
148
|
+
Please also note that you can opt-in to new cops by default by adding this to your config:
|
147
149
|
AllCops:
|
148
150
|
NewCops: enable
|
149
151
|
BANNER
|
@@ -161,7 +163,7 @@ module RuboCop
|
|
161
163
|
def warn_pending_cop(cop)
|
162
164
|
version = cop.metadata['VersionAdded'] || 'N/A'
|
163
165
|
|
164
|
-
warn Rainbow("#{cop.name}: #
|
166
|
+
warn Rainbow("#{cop.name}: # new in #{version}").yellow
|
165
167
|
warn Rainbow(' Enabled: true').yellow
|
166
168
|
end
|
167
169
|
|
@@ -44,7 +44,6 @@ module RuboCop
|
|
44
44
|
check_obsoletions
|
45
45
|
|
46
46
|
alert_about_unrecognized_cops(invalid_cop_names)
|
47
|
-
check_target_ruby
|
48
47
|
validate_new_cops_parameter
|
49
48
|
validate_parameter_names(valid_cop_names)
|
50
49
|
validate_enforced_styles(valid_cop_names)
|
@@ -52,6 +51,15 @@ module RuboCop
|
|
52
51
|
reject_mutually_exclusive_defaults
|
53
52
|
end
|
54
53
|
|
54
|
+
# Validations that should only be run after all config resolving has
|
55
|
+
# taken place:
|
56
|
+
# * The target ruby version is only checked once the entire inheritance
|
57
|
+
# chain has been loaded so that only the final value is validated, and
|
58
|
+
# any obsolete but overridden values are ignored.
|
59
|
+
def validate_after_resolution
|
60
|
+
check_target_ruby
|
61
|
+
end
|
62
|
+
|
55
63
|
def target_ruby_version
|
56
64
|
target_ruby.version
|
57
65
|
end
|
data/lib/rubocop/cop/base.rb
CHANGED
@@ -24,7 +24,7 @@ module RuboCop
|
|
24
24
|
# `add_global_offense`. Use the `processed_source` method to
|
25
25
|
# get the currently processed source being investigated.
|
26
26
|
#
|
27
|
-
# In case of invalid syntax /
|
27
|
+
# In case of invalid syntax / unparsable content,
|
28
28
|
# the callback `on_other_file` is called instead of all the other
|
29
29
|
# `on_...` callbacks.
|
30
30
|
#
|
@@ -222,8 +222,8 @@ module RuboCop
|
|
222
222
|
|
223
223
|
def relevant_file?(file)
|
224
224
|
file == RuboCop::AST::ProcessedSource::STRING_SOURCE_NAME ||
|
225
|
-
file_name_matches_any?(file, 'Include', true) &&
|
226
|
-
!file_name_matches_any?(file, 'Exclude', false)
|
225
|
+
(file_name_matches_any?(file, 'Include', true) &&
|
226
|
+
!file_name_matches_any?(file, 'Exclude', false))
|
227
227
|
end
|
228
228
|
|
229
229
|
def excluded_file?(file)
|
@@ -88,7 +88,7 @@ module RuboCop
|
|
88
88
|
CHECKED_OPTIONS_CONFIG = 'OnlyFor'
|
89
89
|
VERSION_SPECIFIERS_OPTION = 'version_specifiers'
|
90
90
|
RESTRICTIVE_VERSION_SPECIFIERS_OPTION = 'restrictive_version_specifiers'
|
91
|
-
RESTRICTIVE_VERSION_PATTERN =
|
91
|
+
RESTRICTIVE_VERSION_PATTERN = /\A\s*(?:<|~>|\d|=)/.freeze
|
92
92
|
RESTRICT_ON_SEND = %i[gem].freeze
|
93
93
|
|
94
94
|
def on_send(node)
|
@@ -152,8 +152,8 @@ module RuboCop
|
|
152
152
|
def restrictive_version_specified_gem?(node)
|
153
153
|
return unless version_specified_gem?(node)
|
154
154
|
|
155
|
-
node.arguments
|
156
|
-
.any? { |arg| arg&.str_type? && RESTRICTIVE_VERSION_PATTERN.match?(arg.
|
155
|
+
node.arguments[1..-1]
|
156
|
+
.any? { |arg| arg&.str_type? && RESTRICTIVE_VERSION_PATTERN.match?(arg.value) }
|
157
157
|
end
|
158
158
|
|
159
159
|
def contains_checked_options?(node)
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Bundler
|
6
|
+
# This cop verifies that a project contains Gemfile or gems.rb file and correct
|
7
|
+
# associated lock file based on the configuration.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: Gemfile (default)
|
10
|
+
# # bad
|
11
|
+
# Project contains gems.rb and gems.locked files
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# Project contains Gemfile and gems.locked file
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# Project contains Gemfile and Gemfile.lock
|
18
|
+
#
|
19
|
+
# @example EnforcedStyle: gems.rb
|
20
|
+
# # bad
|
21
|
+
# Project contains Gemfile and Gemfile.lock files
|
22
|
+
#
|
23
|
+
# # bad
|
24
|
+
# Project contains gems.rb and Gemfile.lock file
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# Project contains gems.rb and gems.locked files
|
28
|
+
class GemFilename < Base
|
29
|
+
include ConfigurableEnforcedStyle
|
30
|
+
include RangeHelp
|
31
|
+
|
32
|
+
MSG_GEMFILE_REQUIRED = '`gems.rb` file was found but `Gemfile` is required '\
|
33
|
+
'(file path: %<file_path>s).'
|
34
|
+
MSG_GEMS_RB_REQUIRED = '`Gemfile` was found but `gems.rb` file is required '\
|
35
|
+
'(file path: %<file_path>s).'
|
36
|
+
MSG_GEMFILE_MISMATCHED = 'Expected a `Gemfile.lock` with `Gemfile` but found '\
|
37
|
+
'`gems.locked` file (file path: %<file_path>s).'
|
38
|
+
MSG_GEMS_RB_MISMATCHED = 'Expected a `gems.locked` file with `gems.rb` but found '\
|
39
|
+
'`Gemfile.lock` (file path: %<file_path>s).'
|
40
|
+
GEMFILE_FILES = %w[Gemfile Gemfile.lock].freeze
|
41
|
+
GEMS_RB_FILES = %w[gems.rb gems.locked].freeze
|
42
|
+
|
43
|
+
def on_new_investigation
|
44
|
+
file_path = processed_source.file_path
|
45
|
+
basename = File.basename(file_path)
|
46
|
+
return if expected_gemfile?(basename)
|
47
|
+
|
48
|
+
register_offense(file_path, basename)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def register_offense(file_path, basename)
|
54
|
+
register_gemfile_offense(file_path, basename) if gemfile_offense?(basename)
|
55
|
+
register_gems_rb_offense(file_path, basename) if gems_rb_offense?(basename)
|
56
|
+
end
|
57
|
+
|
58
|
+
def register_gemfile_offense(file_path, basename)
|
59
|
+
message = case basename
|
60
|
+
when 'gems.rb'
|
61
|
+
MSG_GEMFILE_REQUIRED
|
62
|
+
when 'gems.locked'
|
63
|
+
MSG_GEMFILE_MISMATCHED
|
64
|
+
end
|
65
|
+
|
66
|
+
add_global_offense(format(message, file_path: file_path))
|
67
|
+
end
|
68
|
+
|
69
|
+
def register_gems_rb_offense(file_path, basename)
|
70
|
+
message = case basename
|
71
|
+
when 'Gemfile'
|
72
|
+
MSG_GEMS_RB_REQUIRED
|
73
|
+
when 'Gemfile.lock'
|
74
|
+
MSG_GEMS_RB_MISMATCHED
|
75
|
+
end
|
76
|
+
|
77
|
+
add_global_offense(format(message, file_path: file_path))
|
78
|
+
end
|
79
|
+
|
80
|
+
def gemfile_offense?(basename)
|
81
|
+
gemfile_required? && GEMS_RB_FILES.include?(basename)
|
82
|
+
end
|
83
|
+
|
84
|
+
def gems_rb_offense?(basename)
|
85
|
+
gems_rb_required? && GEMFILE_FILES.include?(basename)
|
86
|
+
end
|
87
|
+
|
88
|
+
def expected_gemfile?(basename)
|
89
|
+
(gemfile_required? && GEMFILE_FILES.include?(basename)) ||
|
90
|
+
(gems_rb_required? && GEMS_RB_FILES.include?(basename))
|
91
|
+
end
|
92
|
+
|
93
|
+
def gemfile_required?
|
94
|
+
style == :Gemfile
|
95
|
+
end
|
96
|
+
|
97
|
+
def gems_rb_required?
|
98
|
+
style == :'gems.rb'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|