rubocop 1.9.0 → 1.12.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 +14 -14
- data/assets/output.html.erb +1 -1
- data/config/default.yml +70 -17
- data/config/obsoletion.yml +4 -0
- data/lib/rubocop.rb +5 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/suggest_extensions.rb +3 -2
- data/lib/rubocop/comment_config.rb +43 -94
- data/lib/rubocop/config.rb +4 -1
- data/lib/rubocop/cop/base.rb +1 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -1
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -0
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
- data/lib/rubocop/cop/exclude_limit.rb +26 -0
- data/lib/rubocop/cop/gemspec/date_assignment.rb +57 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
- data/lib/rubocop/cop/generator.rb +2 -2
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +2 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +2 -0
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +4 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +11 -8
- data/lib/rubocop/cop/layout/argument_alignment.rb +6 -5
- data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
- data/lib/rubocop/cop/layout/assignment_indentation.rb +6 -3
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -0
- data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
- data/lib/rubocop/cop/layout/class_structure.rb +1 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +14 -15
- data/lib/rubocop/cop/layout/comment_indentation.rb +16 -16
- data/lib/rubocop/cop/layout/else_alignment.rb +9 -6
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +20 -3
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +37 -17
- data/lib/rubocop/cop/layout/extra_spacing.rb +2 -2
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +27 -7
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +9 -6
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +22 -15
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -5
- data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +27 -30
- data/lib/rubocop/cop/layout/indentation_width.rb +20 -9
- data/lib/rubocop/cop/layout/line_length.rb +2 -1
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +26 -0
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18 -5
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
- data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_brackets.rb +9 -4
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -0
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -0
- data/lib/rubocop/cop/lint/debugger.rb +60 -14
- data/lib/rubocop/cop/lint/deprecated_constants.rb +5 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +14 -4
- data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -0
- data/lib/rubocop/cop/lint/duplicate_require.rb +3 -2
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -0
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -0
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +1 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -0
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -0
- data/lib/rubocop/cop/lint/multiple_comparison.rb +5 -4
- data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +7 -0
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +11 -2
- data/lib/rubocop/cop/lint/raise_exception.rb +2 -0
- data/lib/rubocop/cop/lint/rand_one.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +7 -3
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -0
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -0
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -0
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -0
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -3
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +3 -0
- data/lib/rubocop/cop/lint/unified_integer.rb +1 -0
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -0
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -0
- data/lib/rubocop/cop/lint/useless_times.rb +3 -0
- data/lib/rubocop/cop/message_annotator.rb +4 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +1 -0
- data/lib/rubocop/cop/metrics/parameter_lists.rb +6 -2
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +6 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -0
- data/lib/rubocop/cop/mixin/alignment.rb +10 -3
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +3 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
- data/lib/rubocop/cop/mixin/configurable_max.rb +1 -0
- data/lib/rubocop/cop/mixin/def_node.rb +1 -0
- data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -0
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -0
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +1 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +11 -6
- data/lib/rubocop/cop/mixin/method_complexity.rb +4 -1
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +4 -23
- data/lib/rubocop/cop/mixin/negative_conditional.rb +3 -0
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -3
- data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +5 -0
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +4 -6
- data/lib/rubocop/cop/mixin/visibility_help.rb +1 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -0
- data/lib/rubocop/cop/naming/constant_name.rb +2 -0
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +6 -0
- data/lib/rubocop/cop/naming/method_name.rb +3 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
- data/lib/rubocop/cop/registry.rb +10 -1
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +3 -2
- data/lib/rubocop/cop/style/alias.rb +1 -0
- data/lib/rubocop/cop/style/and_or.rb +3 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +3 -0
- data/lib/rubocop/cop/style/array_coercion.rb +2 -0
- data/lib/rubocop/cop/style/array_join.rb +1 -0
- data/lib/rubocop/cop/style/attr.rb +1 -0
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +62 -0
- data/lib/rubocop/cop/style/case_equality.rb +2 -1
- data/lib/rubocop/cop/style/case_like_if.rb +15 -4
- data/lib/rubocop/cop/style/class_equality_comparison.rb +3 -0
- data/lib/rubocop/cop/style/collection_compact.rb +2 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -0
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +10 -10
- data/lib/rubocop/cop/style/conditional_assignment.rb +2 -0
- data/lib/rubocop/cop/style/constant_visibility.rb +28 -0
- data/lib/rubocop/cop/style/date_time.rb +3 -0
- data/lib/rubocop/cop/style/dir.rb +1 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +30 -3
- data/lib/rubocop/cop/style/documentation_method.rb +1 -0
- data/lib/rubocop/cop/style/double_negation.rb +3 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -0
- data/lib/rubocop/cop/style/each_with_object.rb +1 -0
- data/lib/rubocop/cop/style/empty_literal.rb +9 -0
- data/lib/rubocop/cop/style/endless_method.rb +1 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +90 -28
- data/lib/rubocop/cop/style/even_odd.rb +1 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -0
- data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -1
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -7
- data/lib/rubocop/cop/style/float_division.rb +4 -0
- data/lib/rubocop/cop/style/format_string.rb +2 -0
- data/lib/rubocop/cop/style/format_string_token.rb +1 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +0 -3
- data/lib/rubocop/cop/style/global_std_stream.rb +1 -0
- data/lib/rubocop/cop/style/hash_conversion.rb +108 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -0
- data/lib/rubocop/cop/style/hash_except.rb +1 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +16 -15
- data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +4 -0
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +37 -11
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +46 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +19 -3
- data/lib/rubocop/cop/style/min_max.rb +1 -0
- data/lib/rubocop/cop/style/mixin_usage.rb +2 -0
- data/lib/rubocop/cop/style/module_function.rb +5 -0
- data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -3
- data/lib/rubocop/cop/style/multiple_comparison.rb +21 -2
- data/lib/rubocop/cop/style/mutable_constant.rb +3 -0
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +16 -2
- data/lib/rubocop/cop/style/nil_comparison.rb +6 -1
- data/lib/rubocop/cop/style/nil_lambda.rb +1 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +7 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +6 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -1
- data/lib/rubocop/cop/style/option_hash.rb +1 -0
- data/lib/rubocop/cop/style/or_assignment.rb +2 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +6 -0
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
- data/lib/rubocop/cop/style/proc.rb +1 -0
- data/lib/rubocop/cop/style/random_with_offset.rb +5 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +44 -4
- data/lib/rubocop/cop/style/redundant_conditional.rb +2 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -0
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +13 -0
- data/lib/rubocop/cop/style/redundant_return.rb +4 -0
- data/lib/rubocop/cop/style/redundant_self.rb +7 -3
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +1 -0
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +17 -14
- data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -0
- data/lib/rubocop/cop/style/return_nil.rb +6 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +2 -0
- data/lib/rubocop/cop/style/sample.rb +1 -0
- data/lib/rubocop/cop/style/signal_exception.rb +3 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +4 -1
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -0
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +20 -4
- data/lib/rubocop/cop/style/special_global_vars.rb +3 -3
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -0
- data/lib/rubocop/cop/style/string_chars.rb +38 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +1 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -0
- data/lib/rubocop/cop/style/strip.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -0
- data/lib/rubocop/cop/style/symbol_proc.rb +25 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +5 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -0
- data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
- data/lib/rubocop/cop/style/unpack_first.rb +1 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +1 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +5 -0
- data/lib/rubocop/cop/util.rb +4 -1
- data/lib/rubocop/directive_comment.rb +69 -9
- data/lib/rubocop/ext/regexp_parser.rb +3 -6
- data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +2 -1
- data/lib/rubocop/formatter/tap_formatter.rb +4 -2
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -1
- data/lib/rubocop/target_finder.rb +1 -0
- data/lib/rubocop/target_ruby.rb +21 -13
- data/lib/rubocop/version.rb +1 -1
- metadata +14 -7
@@ -42,16 +42,18 @@ module RuboCop
|
|
42
42
|
# end
|
43
43
|
# end
|
44
44
|
# end
|
45
|
-
class IndentationWidth <
|
45
|
+
class IndentationWidth < Base # rubocop:disable Metrics/ClassLength
|
46
46
|
include EndKeywordAlignment
|
47
47
|
include Alignment
|
48
48
|
include CheckAssignment
|
49
49
|
include IgnoredPattern
|
50
50
|
include RangeHelp
|
51
|
+
extend AutoCorrector
|
51
52
|
|
52
53
|
MSG = 'Use %<configured_indentation_width>d (not %<indentation>d) ' \
|
53
54
|
'spaces for%<name>s indentation.'
|
54
55
|
|
56
|
+
# @!method access_modifier?(node)
|
55
57
|
def_node_matcher :access_modifier?, <<~PATTERN
|
56
58
|
[(send ...) access_modifier?]
|
57
59
|
PATTERN
|
@@ -144,12 +146,12 @@ module RuboCop
|
|
144
146
|
check_if(node, node.body, node.else_branch, base.loc)
|
145
147
|
end
|
146
148
|
|
147
|
-
def autocorrect(node)
|
148
|
-
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
149
|
-
end
|
150
|
-
|
151
149
|
private
|
152
150
|
|
151
|
+
def autocorrect(corrector, node)
|
152
|
+
AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
|
153
|
+
end
|
154
|
+
|
153
155
|
def check_members(base, members)
|
154
156
|
check_indentation(base, select_check_member(members.first))
|
155
157
|
|
@@ -279,8 +281,9 @@ module RuboCop
|
|
279
281
|
name = style == 'normal' ? '' : " #{style}"
|
280
282
|
message = message(configured_indentation_width, indentation, name)
|
281
283
|
|
282
|
-
add_offense(
|
283
|
-
|
284
|
+
add_offense(offending_range(body_node, indentation), message: message) do |corrector|
|
285
|
+
autocorrect(corrector, node)
|
286
|
+
end
|
284
287
|
end
|
285
288
|
|
286
289
|
def message(configured_indentation_width, indentation, name)
|
@@ -307,12 +310,20 @@ module RuboCop
|
|
307
310
|
def indentation_to_check?(base_loc, body_node)
|
308
311
|
return false if skip_check?(base_loc, body_node)
|
309
312
|
|
310
|
-
if
|
313
|
+
if body_node.rescue_type?
|
314
|
+
check_rescue?(body_node)
|
315
|
+
elsif body_node.ensure_type?
|
311
316
|
block_body, = *body_node
|
312
317
|
return unless block_body
|
318
|
+
|
319
|
+
check_rescue?(block_body) if block_body.rescue_type?
|
320
|
+
else
|
321
|
+
true
|
313
322
|
end
|
323
|
+
end
|
314
324
|
|
315
|
-
|
325
|
+
def check_rescue?(rescue_node)
|
326
|
+
rescue_node.body
|
316
327
|
end
|
317
328
|
|
318
329
|
def skip_check?(base_loc, body_node)
|
@@ -60,12 +60,13 @@ module RuboCop
|
|
60
60
|
# }
|
61
61
|
class LineLength < Base
|
62
62
|
include CheckLineBreakable
|
63
|
-
include ConfigurableMax
|
64
63
|
include IgnoredPattern
|
65
64
|
include RangeHelp
|
66
65
|
include LineLengthHelp
|
67
66
|
extend AutoCorrector
|
68
67
|
|
68
|
+
exclude_limit 'Max'
|
69
|
+
|
69
70
|
MSG = 'Line is too long. [%<length>d/%<max>d]'
|
70
71
|
|
71
72
|
def on_block(node)
|
@@ -31,6 +31,32 @@ module RuboCop
|
|
31
31
|
# foo = if expression
|
32
32
|
# 'bar'
|
33
33
|
# end
|
34
|
+
#
|
35
|
+
# @example SupportedTypes: ['block', 'case', 'class', 'if', 'kwbegin', 'module'] (default)
|
36
|
+
# # good
|
37
|
+
# foo =
|
38
|
+
# if expression
|
39
|
+
# 'bar'
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# # good
|
43
|
+
# foo =
|
44
|
+
# [1].map do |i|
|
45
|
+
# i + 1
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# @example SupportedTypes: ['block']
|
49
|
+
# # good
|
50
|
+
# foo = if expression
|
51
|
+
# 'bar'
|
52
|
+
# end
|
53
|
+
#
|
54
|
+
# # good
|
55
|
+
# foo =
|
56
|
+
# [1].map do |i|
|
57
|
+
# 'bar' * i
|
58
|
+
# end
|
59
|
+
#
|
34
60
|
class MultilineAssignmentLayout < Base
|
35
61
|
include CheckAssignment
|
36
62
|
include ConfigurableEnforcedStyle
|
@@ -46,10 +46,11 @@ module RuboCop
|
|
46
46
|
# .a
|
47
47
|
# .b
|
48
48
|
# .c
|
49
|
-
class MultilineMethodCallIndentation <
|
49
|
+
class MultilineMethodCallIndentation < Base
|
50
50
|
include ConfigurableEnforcedStyle
|
51
51
|
include Alignment
|
52
52
|
include MultilineExpressionIndentation
|
53
|
+
extend AutoCorrector
|
53
54
|
|
54
55
|
def validate_config
|
55
56
|
return unless style == :aligned && cop_config['IndentationWidth']
|
@@ -61,16 +62,28 @@ module RuboCop
|
|
61
62
|
'`EnforcedStyle` is `indented`.'
|
62
63
|
end
|
63
64
|
|
64
|
-
def autocorrect(node)
|
65
|
-
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
66
|
-
end
|
67
|
-
|
68
65
|
private
|
69
66
|
|
67
|
+
def autocorrect(corrector, node)
|
68
|
+
AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
|
69
|
+
end
|
70
|
+
|
70
71
|
def relevant_node?(send_node)
|
71
72
|
send_node.loc.dot # Only check method calls with dot operator
|
72
73
|
end
|
73
74
|
|
75
|
+
def right_hand_side(send_node)
|
76
|
+
dot = send_node.loc.dot
|
77
|
+
selector = send_node.loc.selector
|
78
|
+
if send_node.dot? && selector && dot.line == selector.line
|
79
|
+
dot.join(selector)
|
80
|
+
elsif selector
|
81
|
+
selector
|
82
|
+
elsif send_node.implicit_call?
|
83
|
+
dot.join(send_node.loc.begin)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
74
87
|
def offending_range(node, lhs, rhs, given_style)
|
75
88
|
return false unless begins_its_line?(rhs)
|
76
89
|
return false if not_for_this_cop?(node)
|
@@ -41,10 +41,11 @@ module RuboCop
|
|
41
41
|
# something_else
|
42
42
|
# end
|
43
43
|
#
|
44
|
-
class MultilineOperationIndentation <
|
44
|
+
class MultilineOperationIndentation < Base
|
45
45
|
include ConfigurableEnforcedStyle
|
46
46
|
include Alignment
|
47
47
|
include MultilineExpressionIndentation
|
48
|
+
extend AutoCorrector
|
48
49
|
|
49
50
|
def on_and(node)
|
50
51
|
check_and_or(node)
|
@@ -63,12 +64,12 @@ module RuboCop
|
|
63
64
|
'`EnforcedStyle` is `indented`.'
|
64
65
|
end
|
65
66
|
|
66
|
-
def autocorrect(node)
|
67
|
-
AlignmentCorrector.correct(processed_source, node, @column_delta)
|
68
|
-
end
|
69
|
-
|
70
67
|
private
|
71
68
|
|
69
|
+
def autocorrect(corrector, node)
|
70
|
+
AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
|
71
|
+
end
|
72
|
+
|
72
73
|
def relevant_node?(node)
|
73
74
|
return false if node.send_type? && node.unary_operation?
|
74
75
|
|
@@ -117,6 +118,10 @@ module RuboCop
|
|
117
118
|
"spaces for indenting #{what} spanning multiple lines."
|
118
119
|
end
|
119
120
|
end
|
121
|
+
|
122
|
+
def right_hand_side(send_node)
|
123
|
+
send_node.first_argument.source_range
|
124
|
+
end
|
120
125
|
end
|
121
126
|
end
|
122
127
|
end
|
@@ -68,8 +68,9 @@ module RuboCop
|
|
68
68
|
# baz)
|
69
69
|
# 123
|
70
70
|
# end
|
71
|
-
class ParameterAlignment <
|
71
|
+
class ParameterAlignment < Base
|
72
72
|
include Alignment
|
73
|
+
extend AutoCorrector
|
73
74
|
|
74
75
|
ALIGN_PARAMS_MSG = 'Align the parameters of a method definition if ' \
|
75
76
|
'they span more than one line.'
|
@@ -84,12 +85,12 @@ module RuboCop
|
|
84
85
|
end
|
85
86
|
alias on_defs on_def
|
86
87
|
|
87
|
-
def autocorrect(node)
|
88
|
-
AlignmentCorrector.correct(processed_source, node, column_delta)
|
89
|
-
end
|
90
|
-
|
91
88
|
private
|
92
89
|
|
90
|
+
def autocorrect(corrector, node)
|
91
|
+
AlignmentCorrector.correct(corrector, processed_source, node, column_delta)
|
92
|
+
end
|
93
|
+
|
93
94
|
def message(_node)
|
94
95
|
fixed_indentation? ? FIXED_INDENT_MSG : ALIGN_PARAMS_MSG
|
95
96
|
end
|
@@ -61,7 +61,7 @@ module RuboCop
|
|
61
61
|
# by `EnforcedStyle: line_count_based` of `Style/BlockDelimiters` cop.
|
62
62
|
# That means preventing auto-correction to incorrect auto-corrected
|
63
63
|
# code.
|
64
|
-
# See: https://github.com/rubocop
|
64
|
+
# See: https://github.com/rubocop/rubocop/issues/7534
|
65
65
|
return if conflict_with_block_delimiters?(node)
|
66
66
|
|
67
67
|
left_brace = node.loc.begin
|
@@ -39,12 +39,17 @@ module RuboCop
|
|
39
39
|
|
40
40
|
range_between(receiver_end_pos, selector_begin_pos)
|
41
41
|
elsif node.method?(:[]=)
|
42
|
-
|
42
|
+
offense_range_for_assignment(node, begin_pos)
|
43
|
+
end
|
44
|
+
end
|
43
45
|
|
44
|
-
|
46
|
+
def offense_range_for_assignment(node, begin_pos)
|
47
|
+
end_pos = node.receiver.source_range.end_pos
|
45
48
|
|
46
|
-
|
47
|
-
|
49
|
+
return if begin_pos - end_pos == 1 ||
|
50
|
+
(range = range_between(end_pos, begin_pos - 1)).source.start_with?('[')
|
51
|
+
|
52
|
+
range
|
48
53
|
end
|
49
54
|
|
50
55
|
def register_offense(range)
|
@@ -89,7 +89,7 @@ module RuboCop
|
|
89
89
|
# preventing auto-correction to single-line empty braces. It will
|
90
90
|
# conflict with auto-correction by `Layout/SpaceInsideBlockBraces` cop
|
91
91
|
# if auto-corrected to a single-line empty braces.
|
92
|
-
# See: https://github.com/rubocop
|
92
|
+
# See: https://github.com/rubocop/rubocop/issues/7363
|
93
93
|
return if node.body.nil? && node.multiline?
|
94
94
|
|
95
95
|
left_brace = node.loc.begin
|
@@ -66,10 +66,12 @@ module RuboCop
|
|
66
66
|
|
67
67
|
MSG = 'Do not define constants this way within a block.'
|
68
68
|
|
69
|
+
# @!method constant_assigned_in_block?(node)
|
69
70
|
def_node_matcher :constant_assigned_in_block?, <<~PATTERN
|
70
71
|
({^block_type? [^begin_type? ^^block_type?]} nil? ...)
|
71
72
|
PATTERN
|
72
73
|
|
74
|
+
# @!method module_defined_in_block?(node)
|
73
75
|
def_node_matcher :module_defined_in_block?, <<~PATTERN
|
74
76
|
({^block_type? [^begin_type? ^^block_type?]} ...)
|
75
77
|
PATTERN
|
@@ -58,6 +58,7 @@ module RuboCop
|
|
58
58
|
class ConstantResolution < Base
|
59
59
|
MSG = 'Fully qualify this constant to avoid possibly ambiguous resolution.'
|
60
60
|
|
61
|
+
# @!method unqualified_const?(node)
|
61
62
|
def_node_matcher :unqualified_const?, <<~PATTERN
|
62
63
|
(const nil? #const_name?)
|
63
64
|
PATTERN
|
@@ -3,8 +3,21 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Lint
|
6
|
-
# This cop checks for calls
|
7
|
-
#
|
6
|
+
# This cop checks for debug calls (such as `debugger` or `binding.pry`) that should
|
7
|
+
# not be kept for production code.
|
8
|
+
#
|
9
|
+
# The cop can be configured using `DebuggerMethods`. By default, a number of gems
|
10
|
+
# debug entrypoints are configured (`Kernel`, `Byebug`, `Capybara`, `Pry`, `Rails`,
|
11
|
+
# and `WebConsole`). Additional methods can be added.
|
12
|
+
#
|
13
|
+
# Specific default groups can be disabled if necessary:
|
14
|
+
#
|
15
|
+
# [source,yaml]
|
16
|
+
# ----
|
17
|
+
# Lint/Debugger:
|
18
|
+
# WebConsole: ~
|
19
|
+
# ----
|
20
|
+
#
|
8
21
|
#
|
9
22
|
# @example
|
10
23
|
#
|
@@ -33,14 +46,34 @@ module RuboCop
|
|
33
46
|
# def some_method
|
34
47
|
# do_something
|
35
48
|
# end
|
49
|
+
#
|
50
|
+
# @example DebuggerMethods: [my_debugger]
|
51
|
+
#
|
52
|
+
# # bad (ok during development)
|
53
|
+
#
|
54
|
+
# def some_method
|
55
|
+
# my_debugger
|
56
|
+
# end
|
36
57
|
class Debugger < Base
|
37
58
|
MSG = 'Remove debugger entry point `%<source>s`.'
|
38
59
|
|
39
60
|
RESTRICT_ON_SEND = [].freeze
|
40
61
|
|
62
|
+
# @!method kernel?(node)
|
63
|
+
def_node_matcher :kernel?, <<~PATTERN
|
64
|
+
(const {nil? cbase} :Kernel)
|
65
|
+
PATTERN
|
66
|
+
|
67
|
+
# @!method valid_receiver?(node, arg1)
|
68
|
+
def_node_matcher :valid_receiver?, <<~PATTERN
|
69
|
+
{
|
70
|
+
(const {nil? cbase} %1)
|
71
|
+
(send {nil? #kernel?} %1)
|
72
|
+
}
|
73
|
+
PATTERN
|
74
|
+
|
41
75
|
def on_send(node)
|
42
|
-
return unless debugger_method?(node
|
43
|
-
return if !node.receiver.nil? && !debugger_receiver?(node)
|
76
|
+
return unless debugger_method?(node)
|
44
77
|
|
45
78
|
add_offense(node)
|
46
79
|
end
|
@@ -51,19 +84,32 @@ module RuboCop
|
|
51
84
|
format(MSG, source: node.source)
|
52
85
|
end
|
53
86
|
|
54
|
-
def
|
55
|
-
|
87
|
+
def debugger_methods
|
88
|
+
@debugger_methods ||= begin
|
89
|
+
config = cop_config.fetch('DebuggerMethods', [])
|
90
|
+
values = config.is_a?(Array) ? config : config.values.flatten
|
91
|
+
values.map do |v|
|
92
|
+
next unless v
|
93
|
+
|
94
|
+
*receiver, method_name = v.split('.')
|
95
|
+
{
|
96
|
+
receiver: receiver.empty? ? nil : receiver.join.to_sym,
|
97
|
+
method_name: method_name.to_sym
|
98
|
+
}
|
99
|
+
end.compact
|
100
|
+
end
|
56
101
|
end
|
57
102
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
node.receiver.method_name
|
62
|
-
when RuboCop::AST::ConstNode
|
63
|
-
node.receiver.const_name
|
64
|
-
end
|
103
|
+
def debugger_method?(send_node)
|
104
|
+
debugger_methods.any? do |method|
|
105
|
+
next unless method[:method_name] == send_node.method_name
|
65
106
|
|
66
|
-
|
107
|
+
if method[:receiver].nil?
|
108
|
+
send_node.receiver.nil?
|
109
|
+
else
|
110
|
+
valid_receiver?(send_node.receiver, method[:receiver])
|
111
|
+
end
|
112
|
+
end
|
67
113
|
end
|
68
114
|
end
|
69
115
|
end
|
@@ -37,6 +37,11 @@ module RuboCop
|
|
37
37
|
DO_NOT_USE_MSG = 'Do not use `%<bad>s`%<deprecated_message>s.'
|
38
38
|
|
39
39
|
def on_const(node)
|
40
|
+
# FIXME: Workaround for "`undefined method `expression' for nil:NilClass`" when processing
|
41
|
+
# `__ENCODING__`. It is better to be able to work without this condition.
|
42
|
+
# Maybe further investigation of RuboCop AST will lead to an essential solution.
|
43
|
+
return unless node.loc
|
44
|
+
|
40
45
|
constant = node.absolute? ? consntant_name(node, node.short_name.to_s) : node.source
|
41
46
|
return unless (deprecated_constant = deprecated_constants[constant])
|
42
47
|
|
@@ -44,6 +44,9 @@ module RuboCop
|
|
44
44
|
MSG = 'Use `%<constant>s.%<method>s(%<replacement_args>s)`' \
|
45
45
|
' instead of `%<original>s`.'
|
46
46
|
|
47
|
+
NO_ARG_ALGORITHM = %w[BF DES IDEA RC4].freeze
|
48
|
+
|
49
|
+
# @!method algorithm_const(node)
|
47
50
|
def_node_matcher :algorithm_const, <<~PATTERN
|
48
51
|
(send
|
49
52
|
$(const
|
@@ -104,7 +107,7 @@ module RuboCop
|
|
104
107
|
def algorithm_name(node)
|
105
108
|
name = node.loc.name.source
|
106
109
|
|
107
|
-
if openssl_class(node) == 'OpenSSL::Cipher'
|
110
|
+
if openssl_class(node) == 'OpenSSL::Cipher' && !NO_ARG_ALGORITHM.include?(name)
|
108
111
|
name.scan(/.{3}/).join('-')
|
109
112
|
else
|
110
113
|
name
|
@@ -124,16 +127,23 @@ module RuboCop
|
|
124
127
|
algorithm_name = algorithm_name(algorithm_constant)
|
125
128
|
|
126
129
|
if openssl_class(algorithm_constant) == 'OpenSSL::Cipher'
|
127
|
-
build_cipher_arguments(node, algorithm_name)
|
130
|
+
build_cipher_arguments(node, algorithm_name, node.arguments.empty?)
|
128
131
|
else
|
129
132
|
(["'#{algorithm_name}'"] + node.arguments.map(&:source)).join(', ')
|
130
133
|
end
|
131
134
|
end
|
132
135
|
|
133
|
-
def build_cipher_arguments(node, algorithm_name)
|
136
|
+
def build_cipher_arguments(node, algorithm_name, no_arguments)
|
134
137
|
algorithm_parts = algorithm_name.downcase.split('-')
|
135
138
|
size_and_mode = sanitize_arguments(node.arguments).map(&:downcase)
|
136
|
-
|
139
|
+
|
140
|
+
if NO_ARG_ALGORITHM.include?(algorithm_parts.first.upcase) && no_arguments
|
141
|
+
"'#{algorithm_parts.first}'"
|
142
|
+
else
|
143
|
+
mode = 'cbc' unless size_and_mode == ['cbc']
|
144
|
+
|
145
|
+
"'#{(algorithm_parts + size_and_mode + [mode]).compact.take(3).join('-')}'"
|
146
|
+
end
|
137
147
|
end
|
138
148
|
end
|
139
149
|
end
|