rubocop 1.66.1 → 1.69.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/config/default.yml +96 -12
- data/config/internal_affairs.yml +11 -0
- data/lib/rubocop/cached_data.rb +12 -4
- data/lib/rubocop/cli/command/auto_generate_config.rb +6 -7
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/lsp.rb +2 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_validator.rb +2 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +22 -2
- data/lib/rubocop/cop/base.rb +7 -3
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/gem_version.rb +1 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/cop.rb +8 -0
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -12
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +8 -1
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +0 -5
- data/lib/rubocop/cop/internal_affairs.rb +17 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/argument_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -3
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -4
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +3 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +11 -12
- data/lib/rubocop/cop/layout/leading_comment_space.rb +71 -1
- data/lib/rubocop/cop/layout/line_length.rb +118 -4
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +2 -3
- data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
- data/lib/rubocop/cop/layout/redundant_line_break.rb +3 -35
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +16 -17
- data/lib/rubocop/cop/layout/space_before_brackets.rb +5 -5
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +6 -0
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +4 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +4 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +4 -1
- data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +6 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -1
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +74 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -4
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +15 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -3
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +10 -4
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +8 -14
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -0
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +25 -2
- data/lib/rubocop/cop/lint/mixed_case_range.rb +2 -5
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -2
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +8 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +106 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +5 -6
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +13 -8
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +3 -7
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +9 -0
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
- data/lib/rubocop/cop/lint/self_assignment.rb +8 -10
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +91 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +51 -2
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
- data/lib/rubocop/cop/lint/void.rb +3 -2
- data/lib/rubocop/cop/metrics/class_length.rb +7 -7
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +2 -3
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +10 -0
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +5 -9
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +0 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +3 -2
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +6 -7
- data/lib/rubocop/cop/naming/file_name.rb +0 -2
- data/lib/rubocop/cop/naming/inclusive_language.rb +12 -3
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +11 -12
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +3 -11
- data/lib/rubocop/cop/naming/variable_name.rb +3 -4
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/offense.rb +4 -5
- data/lib/rubocop/cop/security/compound_hash.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +64 -25
- data/lib/rubocop/cop/style/accessor_grouping.rb +10 -2
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/arguments_forwarding.rb +46 -6
- data/lib/rubocop/cop/style/array_intersect.rb +5 -4
- data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +41 -5
- data/lib/rubocop/cop/style/case_like_if.rb +8 -11
- data/lib/rubocop/cop/style/collection_compact.rb +10 -10
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +7 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +17 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +20 -22
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/data_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/endless_method.rb +1 -14
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/fetch_env_var.rb +1 -0
- data/lib/rubocop/cop/style/file_null.rb +73 -0
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/for.rb +0 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +16 -3
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +6 -0
- data/lib/rubocop/cop/style/hash_except.rb +19 -7
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -2
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +1 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -7
- data/lib/rubocop/cop/style/inverse_methods.rb +0 -1
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
- data/lib/rubocop/cop/style/lambda.rb +1 -1
- data/lib/rubocop/cop/style/lambda_call.rb +3 -2
- data/lib/rubocop/cop/style/map_into_array.rb +59 -8
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +13 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +7 -11
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiple_comparison.rb +28 -39
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -5
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +6 -4
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +1 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +29 -4
- data/lib/rubocop/cop/style/operator_method_call.rb +25 -7
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +8 -13
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +3 -1
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +4 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +37 -22
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +24 -5
- data/lib/rubocop/cop/style/redundant_parentheses.rb +11 -13
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +1 -0
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +8 -15
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +7 -5
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
- data/lib/rubocop/cop/style/require_order.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +15 -4
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +54 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +104 -50
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +10 -7
- data/lib/rubocop/cop/style/self_assignment.rb +11 -17
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +13 -3
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +2 -3
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +13 -12
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/team.rb +8 -1
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/variable_force/assignment.rb +18 -3
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +5 -1
- data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
- data/lib/rubocop/cop/variable_force.rb +4 -10
- data/lib/rubocop/cops_documentation_generator.rb +90 -41
- data/lib/rubocop/file_finder.rb +9 -4
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/lsp/runtime.rb +2 -0
- data/lib/rubocop/lsp/server.rb +0 -1
- data/lib/rubocop/rspec/expect_offense.rb +1 -0
- data/lib/rubocop/runner.rb +17 -6
- data/lib/rubocop/server/cache.rb +6 -1
- data/lib/rubocop/server/core.rb +1 -0
- data/lib/rubocop/target_ruby.rb +13 -13
- data/lib/rubocop/version.rb +28 -7
- data/lib/rubocop/yaml_duplication_checker.rb +20 -27
- data/lib/rubocop.rb +18 -0
- metadata +32 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8ab30572529c057731f5ebd7548808a1aa9f588f75a45ec0d41ecec2dbbc8015
|
|
4
|
+
data.tar.gz: 9beff10b3b9361a9ffc58c0da4920c9c7c7d1caa09e813ea96c46cd7f01683a4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a1fdca8813de85e849ba3ff5266c589b74986984192247fc53c541c81475ae672788a663444070fc5428cbfd1024de7cccc9ac7924fe0dab8e138069b3f6b8f7
|
|
7
|
+
data.tar.gz: 7896834ccaa34e897da918b457b7ab2c738e21b474536144ddbaf71af2d5ae1e829fdeb699701323f6c67d85cb7b2fb1adcc21f3fde1683cb6273387cd390ba2
|
data/README.md
CHANGED
|
@@ -52,7 +52,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
|
|
|
52
52
|
in your `Gemfile`:
|
|
53
53
|
|
|
54
54
|
```rb
|
|
55
|
-
gem 'rubocop', '~> 1.
|
|
55
|
+
gem 'rubocop', '~> 1.69', require: false
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
|
data/config/default.yml
CHANGED
|
@@ -861,6 +861,7 @@ Layout/FirstMethodArgumentLineBreak:
|
|
|
861
861
|
Enabled: false
|
|
862
862
|
VersionAdded: '0.49'
|
|
863
863
|
AllowMultilineFinalElement: false
|
|
864
|
+
AllowedMethods: []
|
|
864
865
|
|
|
865
866
|
Layout/FirstMethodParameterLineBreak:
|
|
866
867
|
Description: >-
|
|
@@ -1036,6 +1037,8 @@ Layout/LeadingCommentSpace:
|
|
|
1036
1037
|
VersionChanged: '0.73'
|
|
1037
1038
|
AllowDoxygenCommentStyle: false
|
|
1038
1039
|
AllowGemfileRubyComment: false
|
|
1040
|
+
AllowRBSInlineAnnotation: false
|
|
1041
|
+
AllowSteepAnnotation: false
|
|
1039
1042
|
|
|
1040
1043
|
Layout/LeadingEmptyLines:
|
|
1041
1044
|
Description: Check for unnecessary blank lines at the beginning of a file.
|
|
@@ -1083,11 +1086,11 @@ Layout/LineLength:
|
|
|
1083
1086
|
StyleGuide: '#max-line-length'
|
|
1084
1087
|
Enabled: true
|
|
1085
1088
|
VersionAdded: '0.25'
|
|
1086
|
-
VersionChanged: '1.
|
|
1089
|
+
VersionChanged: '1.69'
|
|
1087
1090
|
Max: 120
|
|
1091
|
+
AllowHeredoc: true
|
|
1088
1092
|
# To make it possible to copy or click on URIs in the code, we allow lines
|
|
1089
1093
|
# containing a URI to be longer than Max.
|
|
1090
|
-
AllowHeredoc: true
|
|
1091
1094
|
AllowURI: true
|
|
1092
1095
|
URISchemes:
|
|
1093
1096
|
- http
|
|
@@ -1099,6 +1102,8 @@ Layout/LineLength:
|
|
|
1099
1102
|
# elements. Strings will be converted to Regexp objects. A line that matches
|
|
1100
1103
|
# any regular expression listed in this option will be ignored by LineLength.
|
|
1101
1104
|
AllowedPatterns: []
|
|
1105
|
+
# If SplitStrings is true, long strings will be split using continuations
|
|
1106
|
+
SplitStrings: false
|
|
1102
1107
|
|
|
1103
1108
|
Layout/MultilineArrayBraceLayout:
|
|
1104
1109
|
Description: >-
|
|
@@ -1496,7 +1501,6 @@ Layout/SpaceInsideHashLiteralBraces:
|
|
|
1496
1501
|
- space
|
|
1497
1502
|
- no_space
|
|
1498
1503
|
|
|
1499
|
-
|
|
1500
1504
|
Layout/SpaceInsideParens:
|
|
1501
1505
|
Description: 'No spaces after ( or before ).'
|
|
1502
1506
|
StyleGuide: '#spaces-braces'
|
|
@@ -1631,7 +1635,7 @@ Lint/BinaryOperatorWithIdenticalOperands:
|
|
|
1631
1635
|
Enabled: true
|
|
1632
1636
|
Safe: false
|
|
1633
1637
|
VersionAdded: '0.89'
|
|
1634
|
-
VersionChanged: '1.
|
|
1638
|
+
VersionChanged: '1.69'
|
|
1635
1639
|
|
|
1636
1640
|
Lint/BooleanSymbol:
|
|
1637
1641
|
Description: 'Check for `:true` and `:false` symbols.'
|
|
@@ -1783,6 +1787,7 @@ Lint/DuplicateBranch:
|
|
|
1783
1787
|
VersionChanged: '1.7'
|
|
1784
1788
|
IgnoreLiteralBranches: false
|
|
1785
1789
|
IgnoreConstantBranches: false
|
|
1790
|
+
IgnoreDuplicateElseBranch: false
|
|
1786
1791
|
|
|
1787
1792
|
Lint/DuplicateCaseCondition:
|
|
1788
1793
|
Description: 'Do not repeat values in case conditionals.'
|
|
@@ -1832,6 +1837,11 @@ Lint/DuplicateRescueException:
|
|
|
1832
1837
|
Enabled: true
|
|
1833
1838
|
VersionAdded: '0.89'
|
|
1834
1839
|
|
|
1840
|
+
Lint/DuplicateSetElement:
|
|
1841
|
+
Description: 'Checks for duplicate elements in Set.'
|
|
1842
|
+
Enabled: pending
|
|
1843
|
+
VersionAdded: '1.67'
|
|
1844
|
+
|
|
1835
1845
|
Lint/EachWithObjectArgument:
|
|
1836
1846
|
Description: 'Check for immutable argument given to each_with_object.'
|
|
1837
1847
|
Enabled: true
|
|
@@ -1947,6 +1957,11 @@ Lint/HashCompareByIdentity:
|
|
|
1947
1957
|
Safe: false
|
|
1948
1958
|
VersionAdded: '0.93'
|
|
1949
1959
|
|
|
1960
|
+
Lint/HashNewWithKeywordArgumentsAsDefault:
|
|
1961
|
+
Description: 'Checks for the deprecated use of keyword arguments for hash default in `Hash.new`.'
|
|
1962
|
+
Enabled: pending
|
|
1963
|
+
VersionAdded: '1.69'
|
|
1964
|
+
|
|
1950
1965
|
Lint/HeredocMethodCallPosition:
|
|
1951
1966
|
Description: >-
|
|
1952
1967
|
Checks for the ordering of a method call where
|
|
@@ -2137,6 +2152,11 @@ Lint/NumberedParameterAssignment:
|
|
|
2137
2152
|
Enabled: pending
|
|
2138
2153
|
VersionAdded: '1.9'
|
|
2139
2154
|
|
|
2155
|
+
Lint/NumericOperationWithConstantResult:
|
|
2156
|
+
Description: 'Checks for numeric operations with constant results.'
|
|
2157
|
+
Enabled: pending
|
|
2158
|
+
VersionAdded: '1.69'
|
|
2159
|
+
|
|
2140
2160
|
Lint/OrAssignmentToConstant:
|
|
2141
2161
|
Description: 'Checks unintended or-assignment to constant.'
|
|
2142
2162
|
Enabled: pending
|
|
@@ -2327,9 +2347,9 @@ Lint/SafeNavigationChain:
|
|
|
2327
2347
|
|
|
2328
2348
|
Lint/SafeNavigationConsistency:
|
|
2329
2349
|
Description: >-
|
|
2330
|
-
Check to make sure that if safe navigation is used
|
|
2331
|
-
|
|
2332
|
-
for all method calls on
|
|
2350
|
+
Check to make sure that if safe navigation is used in an `&&` or `||` condition,
|
|
2351
|
+
consistent and appropriate safe navigation, without excess or deficiency,
|
|
2352
|
+
is used for all method calls on the same object.
|
|
2333
2353
|
Enabled: true
|
|
2334
2354
|
VersionAdded: '0.55'
|
|
2335
2355
|
VersionChanged: '0.77'
|
|
@@ -2368,7 +2388,6 @@ Lint/ShadowedArgument:
|
|
|
2368
2388
|
VersionAdded: '0.52'
|
|
2369
2389
|
IgnoreImplicitReferences: false
|
|
2370
2390
|
|
|
2371
|
-
|
|
2372
2391
|
Lint/ShadowedException:
|
|
2373
2392
|
Description: >-
|
|
2374
2393
|
Avoid rescuing a higher level exception
|
|
@@ -2448,6 +2467,11 @@ Lint/UnderscorePrefixedVariableName:
|
|
|
2448
2467
|
VersionAdded: '0.21'
|
|
2449
2468
|
AllowKeywordBlockArguments: false
|
|
2450
2469
|
|
|
2470
|
+
Lint/UnescapedBracketInRegexp:
|
|
2471
|
+
Description: 'Checks for unescaped literal `]` in Regexp.'
|
|
2472
|
+
Enabled: pending
|
|
2473
|
+
VersionAdded: '1.68'
|
|
2474
|
+
|
|
2451
2475
|
Lint/UnexpectedBlockArity:
|
|
2452
2476
|
Description: 'Looks for blocks that have fewer arguments that the calling method expects.'
|
|
2453
2477
|
Enabled: pending
|
|
@@ -2507,10 +2531,12 @@ Lint/UnusedMethodArgument:
|
|
|
2507
2531
|
Enabled: true
|
|
2508
2532
|
AutoCorrect: contextual
|
|
2509
2533
|
VersionAdded: '0.21'
|
|
2510
|
-
VersionChanged: '1.
|
|
2534
|
+
VersionChanged: '1.69'
|
|
2511
2535
|
AllowUnusedKeywordArguments: false
|
|
2512
2536
|
IgnoreEmptyMethods: true
|
|
2513
2537
|
IgnoreNotImplementedMethods: true
|
|
2538
|
+
NotImplementedExceptions:
|
|
2539
|
+
- NotImplementedError
|
|
2514
2540
|
|
|
2515
2541
|
Lint/UriEscapeUnescape:
|
|
2516
2542
|
Description: >-
|
|
@@ -2545,6 +2571,11 @@ Lint/UselessAssignment:
|
|
|
2545
2571
|
VersionAdded: '0.11'
|
|
2546
2572
|
VersionChanged: '1.66'
|
|
2547
2573
|
|
|
2574
|
+
Lint/UselessDefined:
|
|
2575
|
+
Description: 'Checks for calls to `defined?` with strings and symbols. The result of such a call will always be truthy.'
|
|
2576
|
+
Enabled: pending
|
|
2577
|
+
VersionAdded: '1.69'
|
|
2578
|
+
|
|
2548
2579
|
Lint/UselessElseWithoutRescue:
|
|
2549
2580
|
Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
|
|
2550
2581
|
Enabled: true
|
|
@@ -3136,6 +3167,12 @@ Style/Alias:
|
|
|
3136
3167
|
- prefer_alias
|
|
3137
3168
|
- prefer_alias_method
|
|
3138
3169
|
|
|
3170
|
+
Style/AmbiguousEndlessMethodDefinition:
|
|
3171
|
+
Description: 'Checks for endless methods inside operators of lower precedence.'
|
|
3172
|
+
StyleGuide: '#ambiguous-endless-method-defintions'
|
|
3173
|
+
Enabled: pending
|
|
3174
|
+
VersionAdded: '1.68'
|
|
3175
|
+
|
|
3139
3176
|
Style/AndOr:
|
|
3140
3177
|
Description: 'Use &&/|| instead of and/or.'
|
|
3141
3178
|
StyleGuide: '#no-and-or-or'
|
|
@@ -3243,6 +3280,13 @@ Style/BisectedAttrAccessor:
|
|
|
3243
3280
|
Enabled: true
|
|
3244
3281
|
VersionAdded: '0.87'
|
|
3245
3282
|
|
|
3283
|
+
Style/BitwisePredicate:
|
|
3284
|
+
Description: 'Prefer bitwise predicate methods over direct comparison operations.'
|
|
3285
|
+
StyleGuide: '#bitwise-predicate-methods'
|
|
3286
|
+
Enabled: pending
|
|
3287
|
+
Safe: false
|
|
3288
|
+
VersionAdded: '1.68'
|
|
3289
|
+
|
|
3246
3290
|
Style/BlockComments:
|
|
3247
3291
|
Description: 'Do not use block comments.'
|
|
3248
3292
|
StyleGuide: '#no-block-comments'
|
|
@@ -3526,6 +3570,11 @@ Style/ColonMethodDefinition:
|
|
|
3526
3570
|
Enabled: true
|
|
3527
3571
|
VersionAdded: '0.52'
|
|
3528
3572
|
|
|
3573
|
+
Style/CombinableDefined:
|
|
3574
|
+
Description: 'Checks successive `defined?` calls that can be combined into a single call.'
|
|
3575
|
+
Enabled: pending
|
|
3576
|
+
VersionAdded: '1.68'
|
|
3577
|
+
|
|
3529
3578
|
Style/CombinableLoops:
|
|
3530
3579
|
Description: >-
|
|
3531
3580
|
Checks for places where multiple consecutive loops over the same data
|
|
@@ -3666,6 +3715,12 @@ Style/DefWithParentheses:
|
|
|
3666
3715
|
VersionAdded: '0.9'
|
|
3667
3716
|
VersionChanged: '0.12'
|
|
3668
3717
|
|
|
3718
|
+
Style/DigChain:
|
|
3719
|
+
Description: 'Use `dig` with multiple parameters instead of chaining multiple calls.'
|
|
3720
|
+
Enabled: pending
|
|
3721
|
+
Safe: false
|
|
3722
|
+
VersionAdded: '1.69'
|
|
3723
|
+
|
|
3669
3724
|
Style/Dir:
|
|
3670
3725
|
Description: >-
|
|
3671
3726
|
Use the `__dir__` method to retrieve the canonicalized
|
|
@@ -3892,12 +3947,24 @@ Style/FileEmpty:
|
|
|
3892
3947
|
Safe: false
|
|
3893
3948
|
VersionAdded: '1.48'
|
|
3894
3949
|
|
|
3950
|
+
Style/FileNull:
|
|
3951
|
+
Description: 'Use `File::NULL` instead of hardcoding "dev/null".'
|
|
3952
|
+
Enabled: pending
|
|
3953
|
+
SafeAutoCorrect: false
|
|
3954
|
+
VersionAdded: '1.69'
|
|
3955
|
+
|
|
3895
3956
|
Style/FileRead:
|
|
3896
3957
|
Description: 'Favor `File.(bin)read` convenience methods.'
|
|
3897
3958
|
StyleGuide: '#file-read'
|
|
3898
3959
|
Enabled: pending
|
|
3899
3960
|
VersionAdded: '1.24'
|
|
3900
3961
|
|
|
3962
|
+
Style/FileTouch:
|
|
3963
|
+
Description: 'Favor `FileUtils.touch` for touching files.'
|
|
3964
|
+
Enabled: pending
|
|
3965
|
+
VersionAdded: '1.69'
|
|
3966
|
+
SafeAutoCorrect: false
|
|
3967
|
+
|
|
3901
3968
|
Style/FileWrite:
|
|
3902
3969
|
Description: 'Favor `File.(bin)write` convenience methods.'
|
|
3903
3970
|
StyleGuide: '#file-write'
|
|
@@ -4069,7 +4136,7 @@ Style/HashSyntax:
|
|
|
4069
4136
|
StyleGuide: '#hash-literals'
|
|
4070
4137
|
Enabled: true
|
|
4071
4138
|
VersionAdded: '0.9'
|
|
4072
|
-
VersionChanged: '1.
|
|
4139
|
+
VersionChanged: '1.67'
|
|
4073
4140
|
EnforcedStyle: ruby19
|
|
4074
4141
|
SupportedStyles:
|
|
4075
4142
|
# checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys
|
|
@@ -4081,7 +4148,7 @@ Style/HashSyntax:
|
|
|
4081
4148
|
# enforces both ruby19 and no_mixed_keys styles
|
|
4082
4149
|
- ruby19_no_mixed_keys
|
|
4083
4150
|
# Force hashes that have a hash value omission
|
|
4084
|
-
EnforcedShorthandSyntax:
|
|
4151
|
+
EnforcedShorthandSyntax: either
|
|
4085
4152
|
SupportedShorthandSyntax:
|
|
4086
4153
|
# forces use of the 3.1 syntax (e.g. {foo:}) when the hash key and value are the same.
|
|
4087
4154
|
- always
|
|
@@ -4249,6 +4316,14 @@ Style/IpAddresses:
|
|
|
4249
4316
|
- '**/gems.rb'
|
|
4250
4317
|
- '**/*.gemspec'
|
|
4251
4318
|
|
|
4319
|
+
Style/KeywordArgumentsMerging:
|
|
4320
|
+
Description: >-
|
|
4321
|
+
When passing an existing hash as keyword arguments, provide additional arguments
|
|
4322
|
+
directly rather than using `merge`.
|
|
4323
|
+
StyleGuide: '#merging-keyword-arguments'
|
|
4324
|
+
Enabled: pending
|
|
4325
|
+
VersionAdded: '1.68'
|
|
4326
|
+
|
|
4252
4327
|
Style/KeywordParametersOrder:
|
|
4253
4328
|
Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
|
|
4254
4329
|
StyleGuide: '#keyword-parameters-order'
|
|
@@ -4318,6 +4393,7 @@ Style/MapIntoArray:
|
|
|
4318
4393
|
StyleGuide: '#functional-code'
|
|
4319
4394
|
Enabled: pending
|
|
4320
4395
|
VersionAdded: '1.63'
|
|
4396
|
+
VersionChanged: '1.67'
|
|
4321
4397
|
Safe: false
|
|
4322
4398
|
|
|
4323
4399
|
Style/MapToHash:
|
|
@@ -5208,6 +5284,7 @@ Style/ReturnNilInPredicateMethodDefinition:
|
|
|
5208
5284
|
AllowedMethods: []
|
|
5209
5285
|
AllowedPatterns: []
|
|
5210
5286
|
VersionAdded: '1.53'
|
|
5287
|
+
VersionChanged: '1.67'
|
|
5211
5288
|
|
|
5212
5289
|
Style/SafeNavigation:
|
|
5213
5290
|
Description: >-
|
|
@@ -5218,7 +5295,7 @@ Style/SafeNavigation:
|
|
|
5218
5295
|
be `nil` or truthy, but never `false`.
|
|
5219
5296
|
Enabled: true
|
|
5220
5297
|
VersionAdded: '0.43'
|
|
5221
|
-
VersionChanged: '1.
|
|
5298
|
+
VersionChanged: '1.67'
|
|
5222
5299
|
# Safe navigation may cause a statement to start returning `nil` in addition
|
|
5223
5300
|
# to whatever it used to return.
|
|
5224
5301
|
ConvertCodeThatCanStartToReturnNil: false
|
|
@@ -5232,6 +5309,13 @@ Style/SafeNavigation:
|
|
|
5232
5309
|
# Maximum length of method chains for register an offense.
|
|
5233
5310
|
MaxChainLength: 2
|
|
5234
5311
|
|
|
5312
|
+
Style/SafeNavigationChainLength:
|
|
5313
|
+
Description: 'Enforces safe navigation chains length to not exceed the configured maximum.'
|
|
5314
|
+
StyleGuide: '#safe-navigation'
|
|
5315
|
+
Enabled: pending
|
|
5316
|
+
VersionAdded: '1.68'
|
|
5317
|
+
Max: 2
|
|
5318
|
+
|
|
5235
5319
|
Style/Sample:
|
|
5236
5320
|
Description: >-
|
|
5237
5321
|
Use `sample` instead of `shuffle.first`,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Configuration for InternalAffairs cops. This file will be
|
|
2
|
+
# automatically loaded when `rubocop/cop/internal_affairs` is required.
|
|
3
|
+
# Only do this when developing custom cops or a RuboCop extension.
|
|
4
|
+
|
|
5
|
+
InternalAffairs/CopDescription:
|
|
6
|
+
Include:
|
|
7
|
+
- 'lib/rubocop/cop/**/*.rb'
|
|
8
|
+
|
|
9
|
+
InternalAffairs/UselessMessageAssertion:
|
|
10
|
+
Include:
|
|
11
|
+
- '**/*_spec.rb'
|
data/lib/rubocop/cached_data.rb
CHANGED
|
@@ -45,15 +45,13 @@ module RuboCop
|
|
|
45
45
|
|
|
46
46
|
# Restore an offense object loaded from a JSON file.
|
|
47
47
|
def deserialize_offenses(offenses)
|
|
48
|
-
source_buffer = Parser::Source::Buffer.new(@filename)
|
|
49
|
-
source_buffer.source = File.read(@filename, encoding: Encoding::UTF_8)
|
|
50
48
|
offenses.map! do |o|
|
|
51
|
-
location = location_from_source_buffer(o
|
|
49
|
+
location = location_from_source_buffer(o)
|
|
52
50
|
Cop::Offense.new(o['severity'], location, o['message'], o['cop_name'], o['status'].to_sym)
|
|
53
51
|
end
|
|
54
52
|
end
|
|
55
53
|
|
|
56
|
-
def location_from_source_buffer(offense
|
|
54
|
+
def location_from_source_buffer(offense)
|
|
57
55
|
begin_pos = offense['location']['begin_pos']
|
|
58
56
|
end_pos = offense['location']['end_pos']
|
|
59
57
|
if begin_pos.zero? && end_pos.zero?
|
|
@@ -62,5 +60,15 @@ module RuboCop
|
|
|
62
60
|
Parser::Source::Range.new(source_buffer, begin_pos, end_pos)
|
|
63
61
|
end
|
|
64
62
|
end
|
|
63
|
+
|
|
64
|
+
# Delay creation until needed. Some type of offenses will have no buffer associated with them
|
|
65
|
+
# and be global only. For these, trying to create the buffer will likely fail, for example
|
|
66
|
+
# because of unknown encoding comments.
|
|
67
|
+
def source_buffer
|
|
68
|
+
@source_buffer ||= begin
|
|
69
|
+
source = File.read(@filename, encoding: Encoding::UTF_8)
|
|
70
|
+
Parser::Source::Buffer.new(@filename, source: source)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
65
73
|
end
|
|
66
74
|
end
|
|
@@ -151,16 +151,15 @@ module RuboCop
|
|
|
151
151
|
end
|
|
152
152
|
|
|
153
153
|
def relative_path_to_todo_from_options_config
|
|
154
|
-
return AUTO_GENERATED_FILE
|
|
154
|
+
return AUTO_GENERATED_FILE unless @options[:config]
|
|
155
155
|
|
|
156
|
-
base = Pathname.new(
|
|
157
|
-
config_dir = Pathname.new(
|
|
156
|
+
base = Pathname.new(Dir.pwd)
|
|
157
|
+
config_dir = Pathname.new(@options[:config]).realpath.dirname
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
# Don't have the path start with `/`
|
|
160
|
+
return AUTO_GENERATED_FILE if config_dir == base
|
|
161
161
|
|
|
162
|
-
|
|
163
|
-
File.dirname(@options[:config]) == '.'
|
|
162
|
+
"#{base.relative_path_from(config_dir)}/#{AUTO_GENERATED_FILE}"
|
|
164
163
|
end
|
|
165
164
|
end
|
|
166
165
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../../lsp/server'
|
|
4
|
-
|
|
5
3
|
module RuboCop
|
|
6
4
|
class CLI
|
|
7
5
|
module Command
|
|
@@ -11,6 +9,8 @@ module RuboCop
|
|
|
11
9
|
self.command_name = :lsp
|
|
12
10
|
|
|
13
11
|
def run
|
|
12
|
+
# Load on demand, `languge-server-protocol` is heavy to require.
|
|
13
|
+
require_relative '../../lsp/server'
|
|
14
14
|
RuboCop::LSP::Server.new(@config_store).start
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -9,8 +9,8 @@ module RuboCop
|
|
|
9
9
|
self.command_name = :version
|
|
10
10
|
|
|
11
11
|
def run
|
|
12
|
-
puts RuboCop::Version
|
|
13
|
-
puts RuboCop::Version.
|
|
12
|
+
puts RuboCop::Version::STRING if @options[:version]
|
|
13
|
+
puts RuboCop::Version.verbose(env: env) if @options[:verbose_version]
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -166,7 +166,7 @@ module RuboCop
|
|
|
166
166
|
return unless duplicate_setting?(base_hash, derived_hash, key, opts[:inherited_file])
|
|
167
167
|
|
|
168
168
|
inherit_mode = opts[:inherit_mode]['merge'] || opts[:inherit_mode]['override']
|
|
169
|
-
return if base_hash[key].is_a?(Array) && inherit_mode
|
|
169
|
+
return if base_hash[key].is_a?(Array) && inherit_mode&.include?(key)
|
|
170
170
|
|
|
171
171
|
puts "#{PathUtil.smart_path(opts[:file])}: " \
|
|
172
172
|
"#{opts[:cop_name]}:#{key} overrides " \
|
|
@@ -194,11 +194,11 @@ module RuboCop
|
|
|
194
194
|
end
|
|
195
195
|
|
|
196
196
|
def should_merge?(mode, key)
|
|
197
|
-
mode && mode['merge']
|
|
197
|
+
mode && mode['merge']&.include?(key)
|
|
198
198
|
end
|
|
199
199
|
|
|
200
200
|
def should_override?(mode, key)
|
|
201
|
-
mode && mode['override']
|
|
201
|
+
mode && mode['override']&.include?(key)
|
|
202
202
|
end
|
|
203
203
|
|
|
204
204
|
def merge_hashes?(base_hash, derived_hash, key)
|
|
@@ -7,7 +7,8 @@ module RuboCop
|
|
|
7
7
|
extend SimpleForwardable
|
|
8
8
|
|
|
9
9
|
# @api private
|
|
10
|
-
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode AutoCorrect StyleGuide Details
|
|
10
|
+
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode AutoCorrect StyleGuide Details
|
|
11
|
+
Enabled].freeze
|
|
11
12
|
# @api private
|
|
12
13
|
INTERNAL_PARAMS = %w[Description StyleGuide
|
|
13
14
|
VersionAdded VersionChanged VersionRemoved
|
|
@@ -49,7 +49,9 @@ module RuboCop
|
|
|
49
49
|
private
|
|
50
50
|
|
|
51
51
|
def disable_offense(offense_range)
|
|
52
|
-
range = surrounding_heredoc(offense_range) ||
|
|
52
|
+
range = surrounding_heredoc(offense_range) ||
|
|
53
|
+
surrounding_percent_array(offense_range) ||
|
|
54
|
+
string_continuation(offense_range)
|
|
53
55
|
|
|
54
56
|
if range
|
|
55
57
|
disable_offense_before_and_after(range_by_lines(range))
|
|
@@ -88,10 +90,28 @@ module RuboCop
|
|
|
88
90
|
end
|
|
89
91
|
|
|
90
92
|
percent_array.map(&:source_range).find do |range|
|
|
91
|
-
offense_range
|
|
93
|
+
range_overlaps_offense?(offense_range, range)
|
|
92
94
|
end
|
|
93
95
|
end
|
|
94
96
|
|
|
97
|
+
def string_continuation(offense_range)
|
|
98
|
+
return nil if offense_range.empty?
|
|
99
|
+
|
|
100
|
+
string_continuation_nodes = processed_source.ast.each_descendant.filter_map do |node|
|
|
101
|
+
range_by_lines(node.source_range) if string_continuation?(node)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
string_continuation_nodes.find { |range| range_overlaps_offense?(offense_range, range) }
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def range_overlaps_offense?(offense_range, range)
|
|
108
|
+
offense_range.begin_pos > range.begin_pos && range.overlaps?(offense_range)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def string_continuation?(node)
|
|
112
|
+
(node.str_type? || node.dstr_type? || node.xstr_type?) && node.source.match?(/\\\s*$/)
|
|
113
|
+
end
|
|
114
|
+
|
|
95
115
|
def range_of_first_line(range)
|
|
96
116
|
begin_of_first_line = range.begin_pos - range.column
|
|
97
117
|
end_of_first_line = begin_of_first_line + range.source_line.length
|
data/lib/rubocop/cop/base.rb
CHANGED
|
@@ -60,7 +60,7 @@ module RuboCop
|
|
|
60
60
|
[]
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
# Returns
|
|
63
|
+
# Returns a url to view this cops documentation online.
|
|
64
64
|
# Requires 'DocumentationBaseURL' to be set for your department.
|
|
65
65
|
# Will follow the convention of RuboCops own documentation structure,
|
|
66
66
|
# overwrite this method to accommodate your custom layout.
|
|
@@ -322,8 +322,12 @@ module RuboCop
|
|
|
322
322
|
# @api private
|
|
323
323
|
def self.callbacks_needed
|
|
324
324
|
@callbacks_needed ||= public_instance_methods.select do |m|
|
|
325
|
-
|
|
326
|
-
|
|
325
|
+
# OPTIMIZE: Check method existence first to make fewer `start_with?` calls.
|
|
326
|
+
# At the time of writing this comment, this excludes 98 of ~104 methods.
|
|
327
|
+
# `start_with?` with two string arguments instead of a regex is faster
|
|
328
|
+
# in this specific case as well.
|
|
329
|
+
!Base.method_defined?(m) && # exclude standard "callbacks" like 'on_begin_investigation'
|
|
330
|
+
m.start_with?('on_', 'after_')
|
|
327
331
|
end
|
|
328
332
|
end
|
|
329
333
|
# rubocop:enable Layout/ClassStructure
|
|
@@ -27,7 +27,6 @@ module RuboCop
|
|
|
27
27
|
# Project contains gems.rb and gems.locked files
|
|
28
28
|
class GemFilename < Base
|
|
29
29
|
include ConfigurableEnforcedStyle
|
|
30
|
-
include RangeHelp
|
|
31
30
|
|
|
32
31
|
MSG_GEMFILE_REQUIRED = '`gems.rb` file was found but `Gemfile` is required ' \
|
|
33
32
|
'(file path: %<file_path>s).'
|
|
@@ -56,6 +56,7 @@ module RuboCop
|
|
|
56
56
|
|
|
57
57
|
REQUIRED_MSG = 'Gem version specification is required.'
|
|
58
58
|
FORBIDDEN_MSG = 'Gem version specification is forbidden.'
|
|
59
|
+
RESTRICT_ON_SEND = %i[gem].freeze
|
|
59
60
|
VERSION_SPECIFICATION_REGEX = /^\s*[~<>=]*\s*[0-9.]+/.freeze
|
|
60
61
|
|
|
61
62
|
# @!method includes_version_specification?(node)
|
data/lib/rubocop/cop/cop.rb
CHANGED
|
@@ -22,6 +22,14 @@ module RuboCop
|
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
def self.inherited(_subclass)
|
|
26
|
+
super
|
|
27
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
|
28
|
+
Inheriting from `RuboCop::Cop::Cop` is deprecated. Use `RuboCop::Cop::Base` instead.
|
|
29
|
+
For more information, see https://docs.rubocop.org/rubocop/v1_upgrade_notes.html.
|
|
30
|
+
WARNING
|
|
31
|
+
end
|
|
32
|
+
|
|
25
33
|
def self.support_autocorrect?
|
|
26
34
|
method_defined?(:autocorrect)
|
|
27
35
|
end
|
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
|
47
47
|
if column_delta.positive? && range.resize(1).source != "\n"
|
|
48
48
|
corrector.insert_before(range, ' ' * column_delta)
|
|
49
49
|
elsif /\A[ \t]+\z/.match?(range.source)
|
|
50
|
-
remove(range
|
|
50
|
+
corrector.remove(range)
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -96,17 +96,6 @@ module RuboCop
|
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
-
def remove(range, corrector)
|
|
100
|
-
original_stderr = $stderr
|
|
101
|
-
$stderr = StringIO.new # Avoid error messages on console
|
|
102
|
-
corrector.remove(range)
|
|
103
|
-
rescue RuntimeError
|
|
104
|
-
range = range_between(range.begin_pos + 1, range.end_pos + 1)
|
|
105
|
-
retry if /^ +$/.match?(range.source)
|
|
106
|
-
ensure
|
|
107
|
-
$stderr = original_stderr
|
|
108
|
-
end
|
|
109
|
-
|
|
110
99
|
def each_line(expr)
|
|
111
100
|
line_begin_pos = expr.begin_pos
|
|
112
101
|
expr.source.each_line do |line|
|
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
|
39
39
|
def requires_parentheses?
|
|
40
40
|
return true if collection_node.send_type? && collection_node.operator_method?
|
|
41
41
|
|
|
42
|
-
collection_node.range_type? || collection_node.
|
|
42
|
+
collection_node.range_type? || collection_node.operator_keyword?
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def end_range
|
|
@@ -94,6 +94,16 @@ module RuboCop
|
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def substitute_escaped_delimiters(content, delimiters)
|
|
97
|
+
if delimiters.first != delimiters.last
|
|
98
|
+
# With different delimiters (eg. `[]`, `()`), if there are the same
|
|
99
|
+
# number of each, escaping is not necessary
|
|
100
|
+
delimiter_counts = delimiters.each_with_object({}) do |delimiter, counts|
|
|
101
|
+
counts[delimiter] = content.count(delimiter)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
return content if delimiter_counts[delimiters.first] == delimiter_counts[delimiters.last]
|
|
105
|
+
end
|
|
106
|
+
|
|
97
107
|
delimiters.each { |delim| content.gsub!(delim, "\\#{delim}") }
|
|
98
108
|
end
|
|
99
109
|
|
|
@@ -53,8 +53,6 @@ module RuboCop
|
|
|
53
53
|
# spec.required_ruby_version = '~> 2.5'
|
|
54
54
|
# end
|
|
55
55
|
class RequiredRubyVersion < Base
|
|
56
|
-
include RangeHelp
|
|
57
|
-
|
|
58
56
|
RESTRICT_ON_SEND = %i[required_ruby_version=].freeze
|
|
59
57
|
NOT_EQUAL_MSG = '`required_ruby_version` and `TargetRubyVersion` ' \
|
|
60
58
|
'(%<target_ruby_version>s, which may be specified in ' \
|