rubocop 0.51.0 → 0.87.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 +5 -5
- data/LICENSE.txt +1 -1
- data/README.md +53 -42
- data/assets/output.html.erb +1 -1
- data/bin/console +10 -0
- data/bin/setup +7 -0
- data/config/default.yml +3137 -552
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cached_data.rb +2 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +140 -0
- data/lib/rubocop/cli/command/base.rb +33 -0
- data/lib/rubocop/cli/command/execute_runner.rb +76 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
- data/lib/rubocop/cli/command/show_cops.rb +76 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/cli.rb +58 -131
- data/lib/rubocop/comment_config.rb +65 -14
- data/lib/rubocop/config.rb +106 -342
- data/lib/rubocop/config_loader.rb +122 -153
- data/lib/rubocop/config_loader_resolver.rb +198 -8
- data/lib/rubocop/config_obsoletion.rb +277 -0
- data/lib/rubocop/config_store.rb +12 -2
- data/lib/rubocop/config_validator.rb +223 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +73 -4
- data/lib/rubocop/cop/badge.rb +6 -6
- data/lib/rubocop/cop/base.rb +399 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +12 -10
- data/lib/rubocop/cop/bundler/gem_comment.rb +133 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +21 -28
- data/lib/rubocop/cop/bundler/ordered_gems.rb +16 -5
- data/lib/rubocop/cop/commissioner.rb +68 -67
- data/lib/rubocop/cop/cop.rb +101 -208
- data/lib/rubocop/cop/corrector.rb +82 -98
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +142 -0
- data/lib/rubocop/cop/correctors/condition_corrector.rb +27 -0
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +53 -0
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +73 -0
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +136 -0
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +61 -0
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +68 -0
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +117 -0
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
- data/lib/rubocop/cop/correctors/space_corrector.rb +46 -0
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +43 -0
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +16 -8
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +85 -0
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
- data/lib/rubocop/cop/generator/configuration_injector.rb +66 -0
- data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
- data/lib/rubocop/cop/generator.rb +81 -99
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +13 -16
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +11 -10
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +7 -18
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -4
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
- data/lib/rubocop/cop/internal_affairs.rb +2 -1
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +22 -33
- data/lib/rubocop/cop/layout/{align_parameters.rb → argument_alignment.rb} +26 -24
- data/lib/rubocop/cop/layout/array_alignment.rb +82 -0
- data/lib/rubocop/cop/layout/{indent_assignment.rb → assignment_indentation.rb} +18 -5
- data/lib/rubocop/cop/{lint → layout}/block_alignment.rb +38 -32
- data/lib/rubocop/cop/layout/block_end_newline.rb +16 -13
- data/lib/rubocop/cop/layout/case_indentation.rb +26 -29
- data/lib/rubocop/cop/layout/class_structure.rb +343 -0
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +145 -30
- data/lib/rubocop/cop/layout/comment_indentation.rb +76 -8
- data/lib/rubocop/cop/{lint → layout}/condition_position.rb +15 -5
- data/lib/rubocop/cop/{lint → layout}/def_end_alignment.rb +10 -14
- data/lib/rubocop/cop/layout/dot_position.rb +34 -22
- data/lib/rubocop/cop/layout/else_alignment.rb +37 -20
- data/lib/rubocop/cop/layout/empty_comment.rb +151 -0
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +157 -0
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +6 -5
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +30 -25
- data/lib/rubocop/cop/layout/empty_lines.rb +20 -4
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +138 -33
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -0
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +121 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +8 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +13 -11
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +60 -11
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +13 -4
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +8 -4
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +29 -11
- data/lib/rubocop/cop/{lint → layout}/end_alignment.rb +53 -21
- data/lib/rubocop/cop/layout/end_of_line.rb +48 -8
- data/lib/rubocop/cop/layout/extra_spacing.rb +66 -102
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +251 -0
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +171 -0
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +6 -2
- data/lib/rubocop/cop/layout/{indent_hash.rb → first_hash_element_indentation.rb} +83 -33
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +5 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -4
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +5 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +61 -73
- data/lib/rubocop/cop/layout/hash_alignment.rb +365 -0
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +285 -0
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +173 -0
- data/lib/rubocop/cop/layout/indentation_consistency.rb +160 -8
- data/lib/rubocop/cop/layout/indentation_style.rb +117 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +100 -45
- data/lib/rubocop/cop/layout/initial_indentation.rb +24 -8
- data/lib/rubocop/cop/layout/leading_comment_space.rb +67 -6
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +53 -0
- data/lib/rubocop/cop/layout/line_length.rb +280 -0
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +61 -24
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +21 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +63 -28
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +54 -21
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +50 -0
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +52 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +70 -33
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +20 -18
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +82 -33
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +34 -6
- data/lib/rubocop/cop/layout/parameter_alignment.rb +118 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +125 -22
- data/lib/rubocop/cop/layout/space_after_colon.rb +6 -6
- data/lib/rubocop/cop/layout/space_after_comma.rb +7 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +10 -7
- data/lib/rubocop/cop/layout/space_after_not.rb +4 -2
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +12 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +74 -49
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +41 -17
- data/lib/rubocop/cop/layout/space_around_keyword.rb +36 -20
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +142 -46
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +54 -11
- data/lib/rubocop/cop/layout/space_before_comma.rb +16 -1
- data/lib/rubocop/cop/layout/space_before_comment.rb +6 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +15 -4
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +5 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +30 -39
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +229 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +5 -5
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +110 -19
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +93 -46
- data/lib/rubocop/cop/layout/space_inside_parens.rb +92 -4
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +3 -3
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +17 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +148 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +37 -41
- data/lib/rubocop/cop/layout/{trailing_blank_lines.rb → trailing_empty_lines.rb} +54 -21
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +51 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +16 -22
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +42 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +15 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +29 -26
- data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +14 -2
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +2 -2
- data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/debugger.rb +8 -10
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +34 -13
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +81 -0
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/{duplicated_key.rb → duplicate_hash_key.rb} +2 -2
- data/lib/rubocop/cop/lint/duplicate_methods.rb +38 -25
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +5 -2
- data/lib/rubocop/cop/lint/else_layout.rb +4 -3
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -5
- data/lib/rubocop/cop/lint/empty_when.rb +30 -7
- data/lib/rubocop/cop/lint/ensure_return.rb +23 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +162 -0
- data/lib/rubocop/cop/lint/flip_flop.rb +32 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +62 -44
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +21 -15
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +37 -59
- data/lib/rubocop/cop/lint/inherit_exception.rb +32 -16
- data/lib/rubocop/cop/lint/interpolation_check.rb +19 -3
- data/lib/rubocop/cop/lint/literal_as_condition.rb +16 -22
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +33 -11
- data/lib/rubocop/cop/lint/loop.rb +8 -6
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
- data/lib/rubocop/cop/lint/{multiple_compare.rb → multiple_comparison.rb} +4 -4
- data/lib/rubocop/cop/lint/nested_method_definition.rb +8 -7
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -2
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +14 -16
- data/lib/rubocop/cop/lint/number_conversion.rb +81 -0
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +86 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +45 -15
- data/lib/rubocop/cop/lint/percent_string_array.rb +18 -22
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +18 -15
- data/lib/rubocop/cop/lint/raise_exception.rb +83 -0
- data/lib/rubocop/cop/lint/rand_one.rb +5 -5
- data/lib/rubocop/cop/lint/{unneeded_disable.rb → redundant_cop_disable_directive.rb} +87 -61
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +119 -0
- data/lib/rubocop/cop/lint/{unneeded_require_statement.rb → redundant_require_statement.rb} +10 -10
- data/lib/rubocop/cop/lint/{unneeded_splat_expansion.rb → redundant_splat_expansion.rb} +58 -27
- data/lib/rubocop/cop/lint/{string_conversion_in_interpolation.rb → redundant_string_coercion.rb} +18 -17
- data/lib/rubocop/cop/lint/redundant_with_index.rb +13 -8
- data/lib/rubocop/cop/lint/redundant_with_object.rb +9 -7
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +7 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +7 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +3 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +10 -6
- data/lib/rubocop/cop/lint/return_in_void_context.rb +3 -3
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +23 -28
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +46 -0
- data/lib/rubocop/cop/lint/script_permission.rb +33 -11
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
- data/lib/rubocop/cop/lint/shadowed_argument.rb +182 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +42 -23
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +2 -2
- data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +92 -0
- data/lib/rubocop/cop/lint/syntax.rb +12 -28
- data/lib/rubocop/cop/lint/to_json.rb +41 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +26 -6
- data/lib/rubocop/cop/lint/unified_integer.rb +3 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +9 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +26 -6
- data/lib/rubocop/cop/lint/unused_method_argument.rb +62 -12
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +17 -15
- data/lib/rubocop/cop/lint/uri_regexp.rb +7 -7
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +96 -37
- data/lib/rubocop/cop/lint/useless_assignment.rb +8 -10
- data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +9 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -11
- data/lib/rubocop/cop/lint/void.rb +62 -30
- data/lib/rubocop/cop/message_annotator.rb +26 -13
- data/lib/rubocop/cop/metrics/abc_size.rb +4 -19
- data/lib/rubocop/cop/metrics/block_length.rb +42 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -1
- data/lib/rubocop/cop/metrics/class_length.rb +37 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +37 -4
- data/lib/rubocop/cop/metrics/method_length.rb +29 -2
- data/lib/rubocop/cop/metrics/module_length.rb +37 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +9 -2
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +5 -5
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +84 -0
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
- data/lib/rubocop/cop/migration/department_name.rb +85 -0
- data/lib/rubocop/cop/mixin/alignment.rb +72 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
- data/lib/rubocop/cop/mixin/array_syntax.rb +3 -1
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_assignment.rb +13 -9
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +184 -0
- data/lib/rubocop/cop/mixin/code_length.rb +11 -1
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +8 -5
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +4 -7
- data/lib/rubocop/cop/mixin/configurable_max.rb +6 -2
- data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +8 -2
- data/lib/rubocop/cop/mixin/documentation_comment.rb +13 -7
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +34 -28
- data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +19 -32
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +6 -10
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +6 -10
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +32 -7
- data/lib/rubocop/cop/mixin/{hash_alignment.rb → hash_alignment_styles.rb} +38 -7
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +178 -0
- data/lib/rubocop/cop/mixin/heredoc.rb +22 -18
- data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +3 -1
- data/lib/rubocop/cop/mixin/integer_node.rb +3 -1
- data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +89 -0
- data/lib/rubocop/cop/mixin/match_range.rb +4 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +38 -8
- data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
- data/lib/rubocop/cop/mixin/min_body_length.rb +3 -1
- data/lib/rubocop/cop/mixin/{array_hash_indentation.rb → multiline_element_indentation.rb} +5 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +50 -15
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +15 -50
- data/lib/rubocop/cop/mixin/negative_conditional.rb +5 -16
- data/lib/rubocop/cop/mixin/nil_methods.rb +23 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +30 -32
- data/lib/rubocop/cop/mixin/parentheses.rb +3 -9
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_literal.rb +3 -65
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +98 -6
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +53 -0
- data/lib/rubocop/cop/mixin/range_help.rb +117 -0
- data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +43 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -3
- data/lib/rubocop/cop/mixin/safe_assignment.rb +4 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +13 -14
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +16 -16
- data/lib/rubocop/cop/mixin/statement_modifier.rb +20 -33
- data/lib/rubocop/cop/mixin/string_help.rb +2 -0
- data/lib/rubocop/cop/mixin/string_literals_help.rb +4 -14
- data/lib/rubocop/cop/mixin/surrounding_space.rb +120 -9
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
- data/lib/rubocop/cop/mixin/too_many_lines.rb +5 -19
- data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +96 -45
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +113 -0
- data/lib/rubocop/cop/mixin/unused_argument.rb +3 -53
- data/lib/rubocop/cop/naming/accessor_method_name.rb +20 -10
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +64 -5
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +11 -9
- data/lib/rubocop/cop/naming/block_parameter_name.rb +49 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +28 -14
- data/lib/rubocop/cop/naming/constant_name.rb +59 -6
- data/lib/rubocop/cop/naming/file_name.rb +72 -36
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +10 -16
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +8 -12
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
- data/lib/rubocop/cop/naming/method_name.rb +58 -13
- data/lib/rubocop/cop/naming/method_parameter_name.rb +58 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +22 -13
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
- data/lib/rubocop/cop/naming/variable_name.rb +20 -3
- data/lib/rubocop/cop/naming/variable_number.rb +12 -29
- data/lib/rubocop/cop/offense.rb +55 -13
- data/lib/rubocop/cop/registry.rb +118 -14
- data/lib/rubocop/cop/security/eval.rb +3 -2
- data/lib/rubocop/cop/security/json_load.rb +7 -5
- data/lib/rubocop/cop/security/marshal_load.rb +5 -3
- data/lib/rubocop/cop/security/open.rb +71 -0
- data/lib/rubocop/cop/security/yaml_load.rb +2 -2
- data/lib/rubocop/cop/severity.rb +2 -3
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +132 -0
- data/lib/rubocop/cop/style/accessor_grouping.rb +136 -0
- data/lib/rubocop/cop/style/alias.rb +41 -37
- data/lib/rubocop/cop/style/and_or.rb +44 -38
- data/lib/rubocop/cop/style/array_join.rb +12 -3
- data/lib/rubocop/cop/style/ascii_comments.rb +29 -6
- data/lib/rubocop/cop/style/attr.rb +26 -8
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +14 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +34 -13
- data/lib/rubocop/cop/style/begin_block.rb +7 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +121 -0
- data/lib/rubocop/cop/style/block_comments.rb +27 -5
- data/lib/rubocop/cop/style/block_delimiters.rb +189 -30
- data/lib/rubocop/cop/style/case_equality.rb +37 -2
- data/lib/rubocop/cop/style/character_literal.rb +13 -3
- data/lib/rubocop/cop/style/class_and_module_children.rb +92 -10
- data/lib/rubocop/cop/style/class_check.rb +28 -9
- data/lib/rubocop/cop/style/class_methods.rb +20 -28
- data/lib/rubocop/cop/style/class_vars.rb +49 -3
- data/lib/rubocop/cop/style/collection_methods.rb +32 -2
- data/lib/rubocop/cop/style/colon_method_call.rb +19 -4
- data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
- data/lib/rubocop/cop/style/command_literal.rb +85 -28
- data/lib/rubocop/cop/style/comment_annotation.rb +51 -19
- data/lib/rubocop/cop/style/commented_keyword.rb +22 -30
- data/lib/rubocop/cop/style/conditional_assignment.rb +62 -92
- data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
- data/lib/rubocop/cop/style/copyright.rb +39 -29
- data/lib/rubocop/cop/style/date_time.rb +44 -11
- data/lib/rubocop/cop/style/def_with_parentheses.rb +28 -3
- data/lib/rubocop/cop/style/dir.rb +7 -7
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
- data/lib/rubocop/cop/style/documentation.rb +72 -16
- data/lib/rubocop/cop/style/documentation_method.rb +51 -2
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
- data/lib/rubocop/cop/style/double_negation.rb +43 -6
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +9 -9
- data/lib/rubocop/cop/style/each_with_object.rb +25 -11
- data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +30 -5
- data/lib/rubocop/cop/style/empty_else.rb +62 -26
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
- data/lib/rubocop/cop/style/empty_literal.rb +32 -18
- data/lib/rubocop/cop/style/empty_method.rb +14 -21
- data/lib/rubocop/cop/style/encoding.rb +13 -5
- data/lib/rubocop/cop/style/end_block.rb +15 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
- data/lib/rubocop/cop/style/even_odd.rb +9 -7
- data/lib/rubocop/cop/style/expand_path_arguments.rb +194 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
- data/lib/rubocop/cop/style/float_division.rb +94 -0
- data/lib/rubocop/cop/style/for.rb +54 -19
- data/lib/rubocop/cop/style/format_string.rb +63 -32
- data/lib/rubocop/cop/style/format_string_token.rb +45 -67
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +170 -32
- data/lib/rubocop/cop/style/global_vars.rb +14 -4
- data/lib/rubocop/cop/style/guard_clause.rb +66 -13
- data/lib/rubocop/cop/style/hash_each_methods.rb +89 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +69 -61
- data/lib/rubocop/cop/style/hash_transform_keys.rb +83 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +80 -0
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +17 -21
- data/lib/rubocop/cop/style/if_inside_else.rb +52 -10
- data/lib/rubocop/cop/style/if_unless_modifier.rb +132 -24
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +14 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +28 -2
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +5 -5
- data/lib/rubocop/cop/style/infinite_loop.rb +51 -14
- data/lib/rubocop/cop/style/inline_comment.rb +5 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +70 -22
- data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
- data/lib/rubocop/cop/style/lambda.rb +25 -112
- data/lib/rubocop/cop/style/lambda_call.rb +13 -27
- data/lib/rubocop/cop/style/line_end_concatenation.rb +22 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +169 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +52 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +134 -34
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +12 -14
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +5 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +102 -13
- data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
- data/lib/rubocop/cop/style/min_max.rb +14 -14
- data/lib/rubocop/cop/style/missing_else.rb +79 -12
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
- data/lib/rubocop/cop/style/mixin_grouping.rb +46 -33
- data/lib/rubocop/cop/style/mixin_usage.rb +32 -15
- data/lib/rubocop/cop/style/module_function.rb +102 -20
- data/lib/rubocop/cop/style/multiline_block_chain.rb +14 -3
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +7 -7
- data/lib/rubocop/cop/style/multiline_if_then.rb +16 -14
- data/lib/rubocop/cop/style/multiline_memoization.rb +12 -17
- data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +31 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +74 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +19 -4
- data/lib/rubocop/cop/style/mutable_constant.rb +123 -15
- data/lib/rubocop/cop/style/negated_if.rb +26 -34
- data/lib/rubocop/cop/style/negated_unless.rb +89 -0
- data/lib/rubocop/cop/style/negated_while.rb +22 -6
- data/lib/rubocop/cop/style/nested_modifier.rb +28 -8
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +25 -24
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +39 -1
- data/lib/rubocop/cop/style/next.rb +64 -35
- data/lib/rubocop/cop/style/nil_comparison.rb +51 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +42 -27
- data/lib/rubocop/cop/style/not.rb +21 -8
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +46 -23
- data/lib/rubocop/cop/style/numeric_literals.rb +31 -18
- data/lib/rubocop/cop/style/numeric_predicate.rb +26 -32
- data/lib/rubocop/cop/style/one_line_conditional.rb +36 -18
- data/lib/rubocop/cop/style/option_hash.rb +22 -14
- data/lib/rubocop/cop/style/optional_arguments.rb +3 -6
- data/lib/rubocop/cop/style/or_assignment.rb +17 -9
- data/lib/rubocop/cop/style/parallel_assignment.rb +16 -16
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +65 -5
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +33 -6
- data/lib/rubocop/cop/style/percent_q_literals.rb +29 -8
- data/lib/rubocop/cop/style/perl_backrefs.rb +10 -3
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +7 -10
- data/lib/rubocop/cop/style/proc.rb +12 -4
- data/lib/rubocop/cop/style/raise_args.rb +27 -21
- data/lib/rubocop/cop/style/random_with_offset.rb +152 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +48 -5
- data/lib/rubocop/cop/style/{unneeded_capital_w.rb → redundant_capital_w.rb} +19 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +124 -0
- data/lib/rubocop/cop/style/redundant_conditional.rb +17 -14
- data/lib/rubocop/cop/style/redundant_exception.rb +26 -17
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +24 -2
- data/lib/rubocop/cop/style/{unneeded_interpolation.rb → redundant_interpolation.rb} +20 -24
- data/lib/rubocop/cop/style/redundant_parentheses.rb +59 -27
- data/lib/rubocop/cop/style/{unneeded_percent_q.rb → redundant_percent_q.rb} +40 -24
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +90 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +121 -0
- data/lib/rubocop/cop/style/redundant_return.rb +87 -51
- data/lib/rubocop/cop/style/redundant_self.rb +56 -41
- data/lib/rubocop/cop/style/redundant_sort.rb +165 -0
- data/lib/rubocop/cop/{performance → style}/redundant_sort_by.rb +9 -7
- data/lib/rubocop/cop/style/regexp_literal.rb +126 -20
- data/lib/rubocop/cop/style/rescue_modifier.rb +39 -3
- data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
- data/lib/rubocop/cop/style/return_nil.rb +8 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +123 -31
- data/lib/rubocop/cop/{performance → style}/sample.rb +17 -13
- data/lib/rubocop/cop/style/self_assignment.rb +14 -14
- data/lib/rubocop/cop/style/semicolon.rb +45 -14
- data/lib/rubocop/cop/style/send.rb +12 -2
- data/lib/rubocop/cop/style/signal_exception.rb +104 -3
- data/lib/rubocop/cop/style/single_line_block_params.rb +22 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +41 -31
- data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +75 -24
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +13 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +14 -5
- data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
- data/lib/rubocop/cop/style/string_literals.rb +29 -3
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +7 -9
- data/lib/rubocop/cop/style/string_methods.rb +19 -7
- data/lib/rubocop/cop/{performance/lstrip_rstrip.rb → style/strip.rb} +10 -7
- data/lib/rubocop/cop/style/struct_inheritance.rb +36 -8
- data/lib/rubocop/cop/style/symbol_array.rb +51 -17
- data/lib/rubocop/cop/style/symbol_literal.rb +3 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +32 -54
- data/lib/rubocop/cop/style/ternary_parentheses.rb +69 -53
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +43 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +54 -0
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +43 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +69 -24
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +99 -0
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +100 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +19 -9
- data/lib/rubocop/cop/style/trivial_accessors.rb +51 -20
- data/lib/rubocop/cop/style/unless_else.rb +21 -5
- data/lib/rubocop/cop/style/unpack_first.rb +61 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +22 -21
- data/lib/rubocop/cop/style/when_then.rb +15 -2
- data/lib/rubocop/cop/style/while_until_do.rb +26 -4
- data/lib/rubocop/cop/style/while_until_modifier.rb +26 -7
- data/lib/rubocop/cop/style/word_array.rb +22 -18
- data/lib/rubocop/cop/style/yoda_condition.rb +96 -36
- data/lib/rubocop/cop/style/zero_length_predicate.rb +40 -20
- data/lib/rubocop/cop/team.rb +159 -91
- data/lib/rubocop/cop/util.rb +51 -209
- data/lib/rubocop/cop/utils/format_string.rb +137 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +9 -2
- data/lib/rubocop/cop/variable_force/branch.rb +5 -3
- data/lib/rubocop/cop/variable_force/branchable.rb +2 -0
- data/lib/rubocop/cop/variable_force/scope.rb +8 -5
- data/lib/rubocop/cop/variable_force/variable.rb +21 -10
- data/lib/rubocop/cop/variable_force/variable_table.rb +4 -3
- data/lib/rubocop/cop/variable_force.rb +41 -36
- data/lib/rubocop/core_ext/string.rb +23 -0
- data/lib/rubocop/error.rb +23 -0
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/file_finder.rb +42 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
- data/lib/rubocop/formatter/base_formatter.rb +3 -7
- data/lib/rubocop/formatter/clang_style_formatter.rb +9 -6
- data/lib/rubocop/formatter/disabled_config_formatter.rb +84 -49
- data/lib/rubocop/formatter/emacs_style_formatter.rb +22 -9
- data/lib/rubocop/formatter/file_list_formatter.rb +2 -1
- data/lib/rubocop/formatter/formatter_set.rb +17 -16
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +2 -2
- data/lib/rubocop/formatter/html_formatter.rb +13 -6
- data/lib/rubocop/formatter/json_formatter.rb +16 -9
- data/lib/rubocop/formatter/junit_formatter.rb +84 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +17 -0
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/progress_formatter.rb +1 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +18 -5
- data/lib/rubocop/formatter/tap_formatter.rb +17 -6
- data/lib/rubocop/magic_comment.rb +15 -11
- data/lib/rubocop/name_similarity.rb +17 -10
- data/lib/rubocop/options.rb +267 -139
- data/lib/rubocop/path_util.rb +45 -7
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/rake_task.rb +7 -9
- data/lib/rubocop/remote_config.rb +23 -9
- data/lib/rubocop/result_cache.rb +50 -23
- data/lib/rubocop/rspec/cop_helper.rb +10 -37
- data/lib/rubocop/rspec/expect_offense.rb +124 -12
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +1 -5
- data/lib/rubocop/rspec/shared_contexts.rb +78 -39
- data/lib/rubocop/rspec/support.rb +5 -1
- data/lib/rubocop/runner.rb +109 -59
- data/lib/rubocop/string_interpreter.rb +8 -8
- data/lib/rubocop/target_finder.rb +62 -68
- data/lib/rubocop/target_ruby.rb +154 -0
- data/lib/rubocop/version.rb +8 -4
- data/lib/rubocop/yaml_duplication_checker.rb +39 -0
- data/lib/rubocop.rb +188 -149
- metadata +257 -182
- data/config/disabled.yml +0 -118
- data/config/enabled.yml +0 -1892
- data/lib/rubocop/ast/builder.rb +0 -70
- data/lib/rubocop/ast/node/and_node.rb +0 -37
- data/lib/rubocop/ast/node/args_node.rb +0 -12
- data/lib/rubocop/ast/node/array_node.rb +0 -57
- data/lib/rubocop/ast/node/block_node.rb +0 -116
- data/lib/rubocop/ast/node/case_node.rb +0 -64
- data/lib/rubocop/ast/node/def_node.rb +0 -71
- data/lib/rubocop/ast/node/ensure_node.rb +0 -25
- data/lib/rubocop/ast/node/for_node.rb +0 -61
- data/lib/rubocop/ast/node/hash_node.rb +0 -109
- data/lib/rubocop/ast/node/if_node.rb +0 -146
- data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -23
- data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -174
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -89
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
- data/lib/rubocop/ast/node/or_node.rb +0 -37
- data/lib/rubocop/ast/node/pair_node.rb +0 -64
- data/lib/rubocop/ast/node/regexp_node.rb +0 -35
- data/lib/rubocop/ast/node/resbody_node.rb +0 -25
- data/lib/rubocop/ast/node/send_node.rb +0 -25
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/until_node.rb +0 -43
- data/lib/rubocop/ast/node/when_node.rb +0 -61
- data/lib/rubocop/ast/node/while_node.rb +0 -43
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/node.rb +0 -604
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -171
- data/lib/rubocop/cop/internal_affairs/deprecated_positional_arguments.rb +0 -81
- data/lib/rubocop/cop/layout/align_array.rb +0 -35
- data/lib/rubocop/cop/layout/align_hash.rb +0 -235
- data/lib/rubocop/cop/layout/indent_array.rb +0 -114
- data/lib/rubocop/cop/layout/indent_heredoc.rb +0 -168
- data/lib/rubocop/cop/layout/space_inside_brackets.rb +0 -20
- data/lib/rubocop/cop/layout/tab.rb +0 -60
- data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
- data/lib/rubocop/cop/lint/handle_exceptions.rb +0 -56
- data/lib/rubocop/cop/lint/rescue_without_error_class.rb +0 -41
- data/lib/rubocop/cop/metrics/line_length.rb +0 -171
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -149
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -36
- data/lib/rubocop/cop/mixin/safe_mode.rb +0 -22
- data/lib/rubocop/cop/mixin/space_inside.rb +0 -76
- data/lib/rubocop/cop/mixin/target_rails_version.rb +0 -16
- data/lib/rubocop/cop/performance/caller.rb +0 -69
- data/lib/rubocop/cop/performance/case_when_splat.rb +0 -176
- data/lib/rubocop/cop/performance/casecmp.rb +0 -107
- data/lib/rubocop/cop/performance/compare_with_block.rb +0 -111
- data/lib/rubocop/cop/performance/count.rb +0 -100
- data/lib/rubocop/cop/performance/detect.rb +0 -107
- data/lib/rubocop/cop/performance/double_start_end_with.rb +0 -99
- data/lib/rubocop/cop/performance/end_with.rb +0 -55
- data/lib/rubocop/cop/performance/fixed_size.rb +0 -56
- data/lib/rubocop/cop/performance/flat_map.rb +0 -75
- data/lib/rubocop/cop/performance/hash_each_methods.rb +0 -128
- data/lib/rubocop/cop/performance/range_include.rb +0 -41
- data/lib/rubocop/cop/performance/redundant_block_call.rb +0 -93
- data/lib/rubocop/cop/performance/redundant_match.rb +0 -56
- data/lib/rubocop/cop/performance/redundant_merge.rb +0 -167
- data/lib/rubocop/cop/performance/regexp_match.rb +0 -223
- data/lib/rubocop/cop/performance/reverse_each.rb +0 -40
- data/lib/rubocop/cop/performance/size.rb +0 -71
- data/lib/rubocop/cop/performance/start_with.rb +0 -58
- data/lib/rubocop/cop/performance/string_replacement.rb +0 -170
- data/lib/rubocop/cop/performance/times_map.rb +0 -72
- data/lib/rubocop/cop/performance/unfreeze_string.rb +0 -50
- data/lib/rubocop/cop/performance/uri_default_parser.rb +0 -47
- data/lib/rubocop/cop/rails/action_filter.rb +0 -94
- data/lib/rubocop/cop/rails/active_support_aliases.rb +0 -67
- data/lib/rubocop/cop/rails/application_job.rb +0 -32
- data/lib/rubocop/cop/rails/application_record.rb +0 -32
- data/lib/rubocop/cop/rails/blank.rb +0 -141
- data/lib/rubocop/cop/rails/date.rb +0 -128
- data/lib/rubocop/cop/rails/delegate.rb +0 -135
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +0 -51
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +0 -81
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +0 -43
- data/lib/rubocop/cop/rails/exit.rb +0 -61
- data/lib/rubocop/cop/rails/file_path.rb +0 -72
- data/lib/rubocop/cop/rails/find_by.rb +0 -52
- data/lib/rubocop/cop/rails/find_each.rb +0 -47
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +0 -18
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +0 -72
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +0 -107
- data/lib/rubocop/cop/rails/not_null_column.rb +0 -67
- data/lib/rubocop/cop/rails/output.rb +0 -23
- data/lib/rubocop/cop/rails/output_safety.rb +0 -99
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +0 -106
- data/lib/rubocop/cop/rails/present.rb +0 -140
- data/lib/rubocop/cop/rails/read_write_attribute.rb +0 -65
- data/lib/rubocop/cop/rails/relative_date_constant.rb +0 -88
- data/lib/rubocop/cop/rails/request_referer.rb +0 -56
- data/lib/rubocop/cop/rails/reversible_migration.rb +0 -282
- data/lib/rubocop/cop/rails/safe_navigation.rb +0 -91
- data/lib/rubocop/cop/rails/save_bang.rb +0 -162
- data/lib/rubocop/cop/rails/scope_args.rb +0 -29
- data/lib/rubocop/cop/rails/skips_model_validations.rb +0 -70
- data/lib/rubocop/cop/rails/time_zone.rb +0 -198
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +0 -95
- data/lib/rubocop/cop/rails/unknown_env.rb +0 -63
- data/lib/rubocop/cop/rails/validation.rb +0 -64
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +0 -141
- data/lib/rubocop/cop/style/flip_flop.rb +0 -20
- data/lib/rubocop/cop/style/method_missing.rb +0 -68
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +0 -56
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
- data/lib/rubocop/node_pattern.rb +0 -561
- data/lib/rubocop/processed_source.rb +0 -147
- data/lib/rubocop/rspec/shared_examples.rb +0 -92
- data/lib/rubocop/string_util.rb +0 -158
- data/lib/rubocop/token.rb +0 -25
- /data/{bin → exe}/rubocop +0 -0
|
@@ -6,27 +6,39 @@ module RuboCop
|
|
|
6
6
|
# Check that a copyright notice was given in each source file.
|
|
7
7
|
#
|
|
8
8
|
# The default regexp for an acceptable copyright notice can be found in
|
|
9
|
-
# config/default.yml.
|
|
9
|
+
# config/default.yml. The default can be changed as follows:
|
|
10
10
|
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
11
|
+
# Style/Copyright:
|
|
12
|
+
# Notice: '^Copyright (\(c\) )?2\d{3} Acme Inc'
|
|
13
13
|
#
|
|
14
|
-
# This regex string is treated as an unanchored regex.
|
|
14
|
+
# This regex string is treated as an unanchored regex. For each file
|
|
15
15
|
# that RuboCop scans, a comment that matches this regex must be found or
|
|
16
16
|
# an offense is reported.
|
|
17
17
|
#
|
|
18
18
|
class Copyright < Cop
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
include RangeHelp
|
|
20
|
+
|
|
21
|
+
MSG = 'Include a copyright notice matching /%<notice>s/ before ' \
|
|
22
|
+
'any code.'
|
|
23
|
+
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in ' \
|
|
24
|
+
'your RuboCop config'
|
|
23
25
|
|
|
24
26
|
def investigate(processed_source)
|
|
25
27
|
return if notice.empty?
|
|
26
28
|
return if notice_found?(processed_source)
|
|
29
|
+
|
|
27
30
|
range = source_range(processed_source.buffer, 1, 0)
|
|
28
31
|
add_offense(insert_notice_before(processed_source),
|
|
29
|
-
location: range, message: MSG
|
|
32
|
+
location: range, message: format(MSG, notice: notice))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def autocorrect(token)
|
|
36
|
+
verify_autocorrect_notice!
|
|
37
|
+
|
|
38
|
+
lambda do |corrector|
|
|
39
|
+
range = token.nil? ? range_between(0, 0) : token.pos
|
|
40
|
+
corrector.insert_before(range, "#{autocorrect_notice}\n")
|
|
41
|
+
end
|
|
30
42
|
end
|
|
31
43
|
|
|
32
44
|
private
|
|
@@ -39,6 +51,16 @@ module RuboCop
|
|
|
39
51
|
cop_config['AutocorrectNotice']
|
|
40
52
|
end
|
|
41
53
|
|
|
54
|
+
def verify_autocorrect_notice!
|
|
55
|
+
raise Warning, AUTOCORRECT_EMPTY_WARNING if autocorrect_notice.empty?
|
|
56
|
+
|
|
57
|
+
regex = Regexp.new(notice)
|
|
58
|
+
return if autocorrect_notice&.match?(regex)
|
|
59
|
+
|
|
60
|
+
raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must " \
|
|
61
|
+
"match Notice /#{notice}/"
|
|
62
|
+
end
|
|
63
|
+
|
|
42
64
|
def insert_notice_before(processed_source)
|
|
43
65
|
token_index = 0
|
|
44
66
|
token_index += 1 if shebang_token?(processed_source, token_index)
|
|
@@ -48,41 +70,29 @@ module RuboCop
|
|
|
48
70
|
|
|
49
71
|
def shebang_token?(processed_source, token_index)
|
|
50
72
|
return false if token_index >= processed_source.tokens.size
|
|
73
|
+
|
|
51
74
|
token = processed_source.tokens[token_index]
|
|
52
|
-
token.
|
|
75
|
+
token.comment? && /^#!.*$/.match?(token.text)
|
|
53
76
|
end
|
|
54
77
|
|
|
55
78
|
def encoding_token?(processed_source, token_index)
|
|
56
79
|
return false if token_index >= processed_source.tokens.size
|
|
80
|
+
|
|
57
81
|
token = processed_source.tokens[token_index]
|
|
58
|
-
token.
|
|
59
|
-
token.text =~ /^#.*coding\s?[:=]\s?(?:UTF|utf)-8/
|
|
82
|
+
token.comment? && /^#.*coding\s?[:=]\s?(?:UTF|utf)-8/.match?(token.text)
|
|
60
83
|
end
|
|
61
84
|
|
|
62
85
|
def notice_found?(processed_source)
|
|
63
86
|
notice_found = false
|
|
64
87
|
notice_regexp = Regexp.new(notice)
|
|
65
|
-
processed_source.
|
|
66
|
-
break unless token.
|
|
67
|
-
|
|
88
|
+
processed_source.each_token do |token|
|
|
89
|
+
break unless token.comment?
|
|
90
|
+
|
|
91
|
+
notice_found = notice_regexp.match?(token.text)
|
|
68
92
|
break if notice_found
|
|
69
93
|
end
|
|
70
94
|
notice_found
|
|
71
95
|
end
|
|
72
|
-
|
|
73
|
-
def autocorrect(token)
|
|
74
|
-
raise Warning, AUTOCORRECT_EMPTY_WARNING if autocorrect_notice.empty?
|
|
75
|
-
regex = Regexp.new(notice)
|
|
76
|
-
unless autocorrect_notice =~ regex
|
|
77
|
-
raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must " \
|
|
78
|
-
"match Notice /#{notice}/"
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
lambda do |corrector|
|
|
82
|
-
range = token.nil? ? range_between(0, 0) : token.pos
|
|
83
|
-
corrector.insert_before(range, "#{autocorrect_notice}\n")
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
96
|
end
|
|
87
97
|
end
|
|
88
98
|
end
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# This cop checks for
|
|
7
|
-
# `
|
|
6
|
+
# This cop checks for consistent usage of the `DateTime` class over the
|
|
7
|
+
# `Time` class. This cop is disabled by default since these classes,
|
|
8
|
+
# although highly overlapping, have particularities that make them not
|
|
9
|
+
# replaceable in certain situations when dealing with multiple timezones
|
|
10
|
+
# and/or DST.
|
|
8
11
|
#
|
|
9
12
|
# @example
|
|
10
13
|
#
|
|
@@ -17,26 +20,56 @@ module RuboCop
|
|
|
17
20
|
# # bad - uses `DateTime` for modern date
|
|
18
21
|
# DateTime.iso8601('2016-06-29')
|
|
19
22
|
#
|
|
20
|
-
# # good - uses `
|
|
21
|
-
#
|
|
23
|
+
# # good - uses `Time` for modern date
|
|
24
|
+
# Time.iso8601('2016-06-29')
|
|
22
25
|
#
|
|
23
26
|
# # good - uses `DateTime` with start argument for historical date
|
|
24
27
|
# DateTime.iso8601('1751-04-23', Date::ENGLAND)
|
|
28
|
+
#
|
|
29
|
+
# @example AllowCoercion: false (default)
|
|
30
|
+
#
|
|
31
|
+
# # bad - coerces to `DateTime`
|
|
32
|
+
# something.to_datetime
|
|
33
|
+
#
|
|
34
|
+
# # good - coerces to `Time`
|
|
35
|
+
# something.to_time
|
|
36
|
+
#
|
|
37
|
+
# @example AllowCoercion: true
|
|
38
|
+
#
|
|
39
|
+
# # good
|
|
40
|
+
# something.to_datetime
|
|
41
|
+
#
|
|
42
|
+
# # good
|
|
43
|
+
# something.to_time
|
|
25
44
|
class DateTime < Cop
|
|
26
|
-
|
|
45
|
+
CLASS_MSG = 'Prefer Time over DateTime.'
|
|
46
|
+
COERCION_MSG = 'Do not use #to_datetime.'
|
|
27
47
|
|
|
28
|
-
def_node_matcher :date_time?,
|
|
29
|
-
(send (const
|
|
48
|
+
def_node_matcher :date_time?, <<~PATTERN
|
|
49
|
+
(send (const {nil? (cbase)} :DateTime) ...)
|
|
30
50
|
PATTERN
|
|
31
51
|
|
|
32
|
-
def_node_matcher :historic_date?,
|
|
33
|
-
(send _ _ _ (const (const
|
|
52
|
+
def_node_matcher :historic_date?, <<~PATTERN
|
|
53
|
+
(send _ _ _ (const (const {nil? (cbase)} :Date) _))
|
|
54
|
+
PATTERN
|
|
55
|
+
|
|
56
|
+
def_node_matcher :to_datetime?, <<~PATTERN
|
|
57
|
+
(send _ :to_datetime)
|
|
34
58
|
PATTERN
|
|
35
59
|
|
|
36
60
|
def on_send(node)
|
|
37
|
-
return unless date_time?(node)
|
|
61
|
+
return unless date_time?(node) ||
|
|
62
|
+
(to_datetime?(node) && disallow_coercion?)
|
|
38
63
|
return if historic_date?(node)
|
|
39
|
-
|
|
64
|
+
|
|
65
|
+
message = to_datetime?(node) ? COERCION_MSG : CLASS_MSG
|
|
66
|
+
add_offense(node, message: message)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
def disallow_coercion?
|
|
72
|
+
!cop_config['AllowCoercion']
|
|
40
73
|
end
|
|
41
74
|
end
|
|
42
75
|
end
|
|
@@ -6,9 +6,36 @@ module RuboCop
|
|
|
6
6
|
# This cop checks for parentheses in the definition of a method,
|
|
7
7
|
# that does not take any arguments. Both instance and
|
|
8
8
|
# class/singleton methods are checked.
|
|
9
|
+
#
|
|
10
|
+
# @example
|
|
11
|
+
#
|
|
12
|
+
# # bad
|
|
13
|
+
# def foo()
|
|
14
|
+
# # does a thing
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# # good
|
|
18
|
+
# def foo
|
|
19
|
+
# # does a thing
|
|
20
|
+
# end
|
|
21
|
+
#
|
|
22
|
+
# # also good
|
|
23
|
+
# def foo() does_a_thing end
|
|
24
|
+
#
|
|
25
|
+
# @example
|
|
26
|
+
#
|
|
27
|
+
# # bad
|
|
28
|
+
# def Baz.foo()
|
|
29
|
+
# # does a thing
|
|
30
|
+
# end
|
|
31
|
+
#
|
|
32
|
+
# # good
|
|
33
|
+
# def Baz.foo
|
|
34
|
+
# # does a thing
|
|
35
|
+
# end
|
|
9
36
|
class DefWithParentheses < Cop
|
|
10
37
|
MSG = "Omit the parentheses in defs when the method doesn't accept " \
|
|
11
|
-
'any arguments.'
|
|
38
|
+
'any arguments.'
|
|
12
39
|
|
|
13
40
|
def on_def(node)
|
|
14
41
|
return if node.single_line?
|
|
@@ -18,8 +45,6 @@ module RuboCop
|
|
|
18
45
|
end
|
|
19
46
|
alias on_defs on_def
|
|
20
47
|
|
|
21
|
-
private
|
|
22
|
-
|
|
23
48
|
def autocorrect(node)
|
|
24
49
|
lambda do |corrector|
|
|
25
50
|
corrector.remove(node.loc.begin)
|
|
@@ -18,11 +18,11 @@ module RuboCop
|
|
|
18
18
|
# path = __dir__
|
|
19
19
|
class Dir < Cop
|
|
20
20
|
MSG = 'Use `__dir__` to get an absolute path to the current ' \
|
|
21
|
-
"file's directory."
|
|
21
|
+
"file's directory."
|
|
22
22
|
|
|
23
|
-
def_node_matcher :dir_replacement?,
|
|
24
|
-
{(send (const nil? :File) :expand_path (send (const nil? :File) :dirname #file_keyword?))
|
|
25
|
-
(send (const nil? :File) :dirname (send (const nil? :File) :realpath #file_keyword?))}
|
|
23
|
+
def_node_matcher :dir_replacement?, <<~PATTERN
|
|
24
|
+
{(send (const {nil? cbase} :File) :expand_path (send (const {nil? cbase} :File) :dirname #file_keyword?))
|
|
25
|
+
(send (const {nil? cbase} :File) :dirname (send (const {nil? cbase} :File) :realpath #file_keyword?))}
|
|
26
26
|
PATTERN
|
|
27
27
|
|
|
28
28
|
def on_send(node)
|
|
@@ -31,14 +31,14 @@ module RuboCop
|
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
private
|
|
35
|
-
|
|
36
34
|
def autocorrect(node)
|
|
37
35
|
lambda do |corrector|
|
|
38
|
-
corrector.replace(node
|
|
36
|
+
corrector.replace(node, '__dir__')
|
|
39
37
|
end
|
|
40
38
|
end
|
|
41
39
|
|
|
40
|
+
private
|
|
41
|
+
|
|
42
42
|
def file_keyword?(node)
|
|
43
43
|
node.str_type? && node.source_range.is?('__FILE__')
|
|
44
44
|
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rubocop:disable Lint/RedundantCopDisableDirective
|
|
4
|
+
|
|
5
|
+
module RuboCop
|
|
6
|
+
module Cop
|
|
7
|
+
module Style
|
|
8
|
+
# Detects comments to enable/disable RuboCop.
|
|
9
|
+
# This is useful if want to make sure that every RuboCop error gets fixed
|
|
10
|
+
# and not quickly disabled with a comment.
|
|
11
|
+
#
|
|
12
|
+
# @example
|
|
13
|
+
# # bad
|
|
14
|
+
# # rubocop:disable Metrics/AbcSize
|
|
15
|
+
# def f
|
|
16
|
+
# end
|
|
17
|
+
# # rubocop:enable Metrics/AbcSize
|
|
18
|
+
#
|
|
19
|
+
# # good
|
|
20
|
+
# def fixed_method_name_and_no_rubocop_comments
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
class DisableCopsWithinSourceCodeDirective < Cop
|
|
24
|
+
# rubocop:enable Lint/RedundantCopDisableDirective
|
|
25
|
+
MSG = 'Comment to disable/enable RuboCop.'
|
|
26
|
+
|
|
27
|
+
def investigate(processed_source)
|
|
28
|
+
processed_source.comments.each do |comment|
|
|
29
|
+
next unless rubocop_directive_comment?(comment)
|
|
30
|
+
|
|
31
|
+
add_offense(comment)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def autocorrect(comment)
|
|
36
|
+
lambda do |corrector|
|
|
37
|
+
corrector.replace(comment, '')
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def rubocop_directive_comment?(comment)
|
|
44
|
+
CommentConfig::COMMENT_DIRECTIVE_REGEXP.match?(comment.text)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -3,33 +3,77 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# This cop checks for missing top-level documentation of
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
6
|
+
# This cop checks for missing top-level documentation of classes and
|
|
7
|
+
# modules. Classes with no body are exempt from the check and so are
|
|
8
|
+
# namespace modules - modules that have nothing in their bodies except
|
|
9
|
+
# classes, other modules, constant definitions or constant visibility
|
|
10
|
+
# declarations.
|
|
10
11
|
#
|
|
11
12
|
# The documentation requirement is annulled if the class or module has
|
|
12
13
|
# a "#:nodoc:" comment next to it. Likewise, "#:nodoc: all" does the
|
|
13
14
|
# same for all its children.
|
|
15
|
+
#
|
|
16
|
+
# @example
|
|
17
|
+
# # bad
|
|
18
|
+
# class Person
|
|
19
|
+
# # ...
|
|
20
|
+
# end
|
|
21
|
+
#
|
|
22
|
+
# module Math
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# # good
|
|
26
|
+
# # Description/Explanation of Person class
|
|
27
|
+
# class Person
|
|
28
|
+
# # ...
|
|
29
|
+
# end
|
|
30
|
+
#
|
|
31
|
+
# # allowed
|
|
32
|
+
# # Class without body
|
|
33
|
+
# class Person
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
# # Namespace - A namespace can be a class or a module
|
|
37
|
+
# # Containing a class
|
|
38
|
+
# module Namespace
|
|
39
|
+
# # Description/Explanation of Person class
|
|
40
|
+
# class Person
|
|
41
|
+
# # ...
|
|
42
|
+
# end
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# # Containing constant visibility declaration
|
|
46
|
+
# module Namespace
|
|
47
|
+
# class Private
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
# private_constant :Private
|
|
51
|
+
# end
|
|
52
|
+
#
|
|
53
|
+
# # Containing constant definition
|
|
54
|
+
# module Namespace
|
|
55
|
+
# Public = Class.new
|
|
56
|
+
# end
|
|
57
|
+
#
|
|
14
58
|
class Documentation < Cop
|
|
15
59
|
include DocumentationComment
|
|
16
60
|
|
|
17
|
-
MSG = 'Missing top-level
|
|
61
|
+
MSG = 'Missing top-level %<type>s documentation comment.'
|
|
18
62
|
|
|
19
63
|
def_node_matcher :constant_definition?, '{class module casgn}'
|
|
64
|
+
def_node_search :outer_module, '(const (const nil? _) _)'
|
|
65
|
+
def_node_matcher :constant_visibility_declaration?, <<~PATTERN
|
|
66
|
+
(send nil? {:public_constant :private_constant} ({sym str} _))
|
|
67
|
+
PATTERN
|
|
20
68
|
|
|
21
69
|
def on_class(node)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return unless body
|
|
70
|
+
return unless node.body
|
|
25
71
|
|
|
26
|
-
check(node, body, :class)
|
|
72
|
+
check(node, node.body, :class)
|
|
27
73
|
end
|
|
28
74
|
|
|
29
75
|
def on_module(node)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
check(node, body, :module)
|
|
76
|
+
check(node, node.body, :module)
|
|
33
77
|
end
|
|
34
78
|
|
|
35
79
|
private
|
|
@@ -37,27 +81,39 @@ module RuboCop
|
|
|
37
81
|
def check(node, body, type)
|
|
38
82
|
return if namespace?(body)
|
|
39
83
|
return if documentation_comment?(node) || nodoc_comment?(node)
|
|
84
|
+
return if compact_namespace?(node) &&
|
|
85
|
+
nodoc_comment?(outer_module(node).first)
|
|
40
86
|
|
|
41
|
-
add_offense(node,
|
|
87
|
+
add_offense(node,
|
|
88
|
+
location: :keyword,
|
|
89
|
+
message: format(MSG, type: type))
|
|
42
90
|
end
|
|
43
91
|
|
|
44
92
|
def namespace?(node)
|
|
45
93
|
return false unless node
|
|
46
94
|
|
|
47
95
|
if node.begin_type?
|
|
48
|
-
node.children.all?
|
|
96
|
+
node.children.all?(&method(:constant_declaration?))
|
|
49
97
|
else
|
|
50
98
|
constant_definition?(node)
|
|
51
99
|
end
|
|
52
100
|
end
|
|
53
101
|
|
|
102
|
+
def constant_declaration?(node)
|
|
103
|
+
constant_definition?(node) || constant_visibility_declaration?(node)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def compact_namespace?(node)
|
|
107
|
+
/::/.match?(node.loc.name.source)
|
|
108
|
+
end
|
|
109
|
+
|
|
54
110
|
# First checks if the :nodoc: comment is associated with the
|
|
55
111
|
# class/module. Unless the element is tagged with :nodoc:, the search
|
|
56
112
|
# proceeds to check its ancestors for :nodoc: all.
|
|
57
113
|
# Note: How end-of-line comments are associated with code changed in
|
|
58
114
|
# parser-2.2.0.4.
|
|
59
115
|
def nodoc_comment?(node, require_all = false)
|
|
60
|
-
return false unless node
|
|
116
|
+
return false unless node&.children&.first
|
|
61
117
|
|
|
62
118
|
nodoc = nodoc(node)
|
|
63
119
|
|
|
@@ -67,7 +123,7 @@ module RuboCop
|
|
|
67
123
|
end
|
|
68
124
|
|
|
69
125
|
def nodoc?(comment, require_all = false)
|
|
70
|
-
|
|
126
|
+
/^#\s*:nodoc:#{"\s+all\s*$" if require_all}/.match?(comment.text)
|
|
71
127
|
end
|
|
72
128
|
|
|
73
129
|
def nodoc(node)
|
|
@@ -47,14 +47,63 @@ module RuboCop
|
|
|
47
47
|
# def foo.bar
|
|
48
48
|
# puts baz
|
|
49
49
|
# end
|
|
50
|
+
#
|
|
51
|
+
# @example RequireForNonPublicMethods: false (default)
|
|
52
|
+
# # good
|
|
53
|
+
# class Foo
|
|
54
|
+
# protected
|
|
55
|
+
# def do_something
|
|
56
|
+
# end
|
|
57
|
+
# end
|
|
58
|
+
#
|
|
59
|
+
# class Foo
|
|
60
|
+
# private
|
|
61
|
+
# def do_something
|
|
62
|
+
# end
|
|
63
|
+
# end
|
|
64
|
+
#
|
|
65
|
+
# @example RequireForNonPublicMethods: true
|
|
66
|
+
# # bad
|
|
67
|
+
# class Foo
|
|
68
|
+
# protected
|
|
69
|
+
# def do_something
|
|
70
|
+
# end
|
|
71
|
+
# end
|
|
72
|
+
#
|
|
73
|
+
# class Foo
|
|
74
|
+
# private
|
|
75
|
+
# def do_something
|
|
76
|
+
# end
|
|
77
|
+
# end
|
|
78
|
+
#
|
|
79
|
+
# # good
|
|
80
|
+
# class Foo
|
|
81
|
+
# protected
|
|
82
|
+
# # Documentation
|
|
83
|
+
# def do_something
|
|
84
|
+
# end
|
|
85
|
+
# end
|
|
86
|
+
#
|
|
87
|
+
# class Foo
|
|
88
|
+
# private
|
|
89
|
+
# # Documentation
|
|
90
|
+
# def do_something
|
|
91
|
+
# end
|
|
92
|
+
# end
|
|
93
|
+
#
|
|
50
94
|
class DocumentationMethod < Cop
|
|
51
95
|
include DocumentationComment
|
|
52
96
|
include DefNode
|
|
53
97
|
|
|
54
|
-
MSG = 'Missing method documentation comment.'
|
|
98
|
+
MSG = 'Missing method documentation comment.'
|
|
99
|
+
|
|
100
|
+
def_node_matcher :module_function_node?, <<~PATTERN
|
|
101
|
+
(send nil? :module_function ...)
|
|
102
|
+
PATTERN
|
|
55
103
|
|
|
56
104
|
def on_def(node)
|
|
57
|
-
|
|
105
|
+
parent = node.parent
|
|
106
|
+
module_function_node?(parent) ? check(parent) : check(node)
|
|
58
107
|
end
|
|
59
108
|
alias on_defs on_def
|
|
60
109
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rubocop:disable Lint/RedundantCopDisableDirective
|
|
4
|
+
# rubocop:disable Style/DoubleCopDisableDirective
|
|
5
|
+
|
|
6
|
+
module RuboCop
|
|
7
|
+
module Cop
|
|
8
|
+
module Style
|
|
9
|
+
# Detects double disable comments on one line. This is mostly to catch
|
|
10
|
+
# automatically generated comments that need to be regenerated.
|
|
11
|
+
#
|
|
12
|
+
# @example
|
|
13
|
+
# # bad
|
|
14
|
+
# def f # rubocop:disable Style/For # rubocop:disable Metrics/AbcSize
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# # good
|
|
18
|
+
# # rubocop:disable Metrics/AbcSize
|
|
19
|
+
# def f # rubocop:disable Style/For
|
|
20
|
+
# end
|
|
21
|
+
# # rubocop:enable Metrics/AbcSize
|
|
22
|
+
#
|
|
23
|
+
# # if both fit on one line
|
|
24
|
+
# def f # rubocop:disable Style/For, Metrics/AbcSize
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
class DoubleCopDisableDirective < Cop
|
|
28
|
+
# rubocop:enable Style/For, Style/DoubleCopDisableDirective
|
|
29
|
+
# rubocop:enable Lint/RedundantCopDisableDirective, Metrics/AbcSize
|
|
30
|
+
MSG = 'More than one disable comment on one line.'
|
|
31
|
+
|
|
32
|
+
def investigate(processed_source)
|
|
33
|
+
processed_source.comments.each do |comment|
|
|
34
|
+
next unless comment.text.scan(/# rubocop:(?:disable|todo)/).size > 1
|
|
35
|
+
|
|
36
|
+
add_offense(comment)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def autocorrect(comment)
|
|
41
|
+
prefix = if comment.text.start_with?('# rubocop:disable')
|
|
42
|
+
'# rubocop:disable'
|
|
43
|
+
else
|
|
44
|
+
'# rubocop:todo'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
lambda do |corrector|
|
|
48
|
+
corrector.replace(comment,
|
|
49
|
+
comment.text[/#{prefix} \S+/])
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -3,32 +3,69 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# This cop checks for uses of double negation (
|
|
7
|
-
# to a boolean value. As this is both cryptic and usually redundant, it
|
|
8
|
-
# should be avoided.
|
|
6
|
+
# This cop checks for uses of double negation (`!!`) to convert something to a boolean value.
|
|
9
7
|
#
|
|
10
|
-
#
|
|
8
|
+
# When using `EnforcedStyle: allowed_in_returns`, allow double nagation in contexts
|
|
9
|
+
# that use boolean as a return value. When using `EnforcedStyle: forbidden`, double nagation
|
|
10
|
+
# should be forbidden always.
|
|
11
11
|
#
|
|
12
|
+
# @example
|
|
12
13
|
# # bad
|
|
13
14
|
# !!something
|
|
14
15
|
#
|
|
15
16
|
# # good
|
|
16
17
|
# !something.nil?
|
|
17
18
|
#
|
|
19
|
+
# @example EnforcedStyle: allowed_in_returns (default)
|
|
20
|
+
# # good
|
|
21
|
+
# def foo?
|
|
22
|
+
# !!return_value
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# @example EnforcedStyle: forbidden
|
|
26
|
+
# # bad
|
|
27
|
+
# def foo?
|
|
28
|
+
# !!return_value
|
|
29
|
+
# end
|
|
30
|
+
#
|
|
18
31
|
# Please, note that when something is a boolean value
|
|
19
32
|
# !!something and !something.nil? are not the same thing.
|
|
20
33
|
# As you're unlikely to write code that can accept values of any type
|
|
21
34
|
# this is rarely a problem in practice.
|
|
22
35
|
class DoubleNegation < Cop
|
|
23
|
-
|
|
36
|
+
include ConfigurableEnforcedStyle
|
|
37
|
+
|
|
38
|
+
MSG = 'Avoid the use of double negation (`!!`).'
|
|
24
39
|
|
|
25
40
|
def_node_matcher :double_negative?, '(send (send _ :!) :!)'
|
|
26
41
|
|
|
27
42
|
def on_send(node)
|
|
28
|
-
return unless double_negative?(node) && node.
|
|
43
|
+
return unless double_negative?(node) && node.prefix_bang?
|
|
44
|
+
return if style == :allowed_in_returns && allowed_in_returns?(node)
|
|
29
45
|
|
|
30
46
|
add_offense(node, location: :selector)
|
|
31
47
|
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def allowed_in_returns?(node)
|
|
52
|
+
node.parent&.return_type? || end_of_method_definition?(node)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def end_of_method_definition?(node)
|
|
56
|
+
return false unless (def_node = find_def_node_from_ascendant(node))
|
|
57
|
+
|
|
58
|
+
last_child = def_node.child_nodes.last
|
|
59
|
+
|
|
60
|
+
last_child.last_line == node.last_line
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def find_def_node_from_ascendant(node)
|
|
64
|
+
return unless (parent = node.parent)
|
|
65
|
+
return parent if parent.def_type? || parent.defs_type?
|
|
66
|
+
|
|
67
|
+
find_def_node_from_ascendant(node.parent)
|
|
68
|
+
end
|
|
32
69
|
end
|
|
33
70
|
end
|
|
34
71
|
end
|