rubocop 0.49.1 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +6 -9
- data/bin/rubocop +1 -1
- data/config/default.yml +264 -118
- data/config/disabled.yml +13 -9
- data/config/enabled.yml +1156 -918
- data/lib/rubocop.rb +555 -489
- data/lib/rubocop/ast/builder.rb +6 -1
- data/lib/rubocop/ast/node.rb +68 -52
- data/lib/rubocop/ast/node/args_node.rb +15 -10
- data/lib/rubocop/ast/node/array_node.rb +10 -1
- data/lib/rubocop/ast/node/block_node.rb +9 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/for_node.rb +8 -0
- data/lib/rubocop/ast/node/if_node.rb +10 -2
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
- data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +18 -31
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/send_node.rb +21 -150
- data/lib/rubocop/ast/node/str_node.rb +14 -0
- data/lib/rubocop/ast/node/super_node.rb +3 -24
- data/lib/rubocop/ast/node/symbol_node.rb +20 -0
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/traversal.rb +7 -7
- data/lib/rubocop/cached_data.rb +1 -6
- data/lib/rubocop/cli.rb +59 -13
- data/lib/rubocop/comment_config.rb +2 -5
- data/lib/rubocop/config.rb +136 -29
- data/lib/rubocop/config_loader.rb +61 -104
- data/lib/rubocop/config_loader_resolver.rb +102 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +13 -11
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +7 -58
- data/lib/rubocop/cop/commissioner.rb +6 -3
- data/lib/rubocop/cop/cop.rb +11 -6
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +97 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
- data/lib/rubocop/cop/generator.rb +122 -25
- data/lib/rubocop/cop/internal_affairs.rb +6 -2
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +16 -5
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +59 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -10
- data/lib/rubocop/cop/layout/align_array.rb +2 -2
- data/lib/rubocop/cop/layout/align_hash.rb +18 -18
- data/lib/rubocop/cop/layout/align_parameters.rb +11 -23
- data/lib/rubocop/cop/layout/block_end_newline.rb +20 -6
- data/lib/rubocop/cop/layout/case_indentation.rb +15 -18
- data/lib/rubocop/cop/layout/class_structure.rb +306 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +7 -6
- data/lib/rubocop/cop/layout/comment_indentation.rb +42 -3
- data/lib/rubocop/cop/layout/dot_position.rb +31 -13
- data/lib/rubocop/cop/layout/else_alignment.rb +37 -17
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +22 -18
- data/lib/rubocop/cop/layout/empty_lines.rb +16 -2
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +23 -6
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +89 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +4 -8
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +30 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +10 -6
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +5 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +22 -7
- data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +23 -26
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +3 -3
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +9 -3
- data/lib/rubocop/cop/layout/indent_array.rb +68 -21
- data/lib/rubocop/cop/layout/indent_hash.rb +71 -26
- data/lib/rubocop/cop/layout/indent_heredoc.rb +70 -35
- data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +40 -27
- data/lib/rubocop/cop/layout/initial_indentation.rb +10 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +32 -17
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +47 -14
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +12 -11
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +19 -16
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +46 -13
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +29 -27
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +7 -3
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +12 -4
- data/lib/rubocop/cop/layout/space_after_colon.rb +13 -6
- data/lib/rubocop/cop/layout/space_after_comma.rb +11 -1
- data/lib/rubocop/cop/layout/space_after_method_name.rb +8 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +8 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +32 -25
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +28 -17
- data/lib/rubocop/cop/layout/space_around_keyword.rb +22 -16
- data/lib/rubocop/cop/layout/space_around_operators.rb +27 -14
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +61 -12
- data/lib/rubocop/cop/layout/space_before_comma.rb +12 -1
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -5
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -4
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +8 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +12 -14
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +235 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +4 -4
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +89 -18
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +62 -36
- data/lib/rubocop/cop/layout/space_inside_parens.rb +40 -3
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +15 -15
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +81 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +32 -17
- data/lib/rubocop/cop/layout/tab.rb +7 -4
- data/lib/rubocop/cop/layout/trailing_blank_lines.rb +11 -9
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +12 -19
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +16 -2
- data/lib/rubocop/cop/lint/block_alignment.rb +42 -30
- data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +3 -14
- data/lib/rubocop/cop/lint/condition_position.rb +5 -1
- data/lib/rubocop/cop/lint/debugger.rb +18 -11
- data/lib/rubocop/cop/lint/def_end_alignment.rb +9 -14
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +4 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +3 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +75 -5
- data/lib/rubocop/cop/lint/duplicated_key.rb +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +3 -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 +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +1 -1
- data/lib/rubocop/cop/lint/end_alignment.rb +13 -14
- data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +5 -5
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +36 -41
- data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +25 -20
- data/lib/rubocop/cop/lint/inherit_exception.rb +16 -19
- data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
- data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +21 -7
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/loop.rb +1 -1
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +6 -8
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +4 -4
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -3
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -22
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +12 -12
- data/lib/rubocop/cop/lint/rand_one.rb +8 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +5 -3
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +18 -9
- data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +8 -1
- data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +37 -10
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/syntax.rb +23 -20
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +5 -4
- data/lib/rubocop/cop/lint/unneeded_disable.rb +41 -16
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +45 -19
- data/lib/rubocop/cop/lint/unreachable_code.rb +53 -8
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +74 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +12 -16
- data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +15 -12
- data/lib/rubocop/cop/lint/void.rb +38 -27
- data/lib/rubocop/cop/message_annotator.rb +4 -2
- data/lib/rubocop/cop/metrics/abc_size.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +3 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/line_length.rb +8 -5
- data/lib/rubocop/cop/metrics/method_length.rb +8 -3
- data/lib/rubocop/cop/metrics/module_length.rb +3 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +14 -5
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/array_hash_indentation.rb +3 -2
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +14 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +8 -4
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -3
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +12 -3
- data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +33 -7
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +74 -33
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +34 -8
- data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -1
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +67 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +12 -0
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +9 -8
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +11 -10
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -17
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +95 -8
- data/lib/rubocop/cop/mixin/too_many_lines.rb +2 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +25 -17
- data/lib/rubocop/cop/mixin/unused_argument.rb +6 -2
- data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
- data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +35 -2
- data/lib/rubocop/cop/{style/op_method.rb → naming/binary_operator_parameter_name.rb} +7 -6
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/naming/constant_name.rb +58 -0
- data/lib/rubocop/cop/{style → naming}/file_name.rb +28 -13
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
- data/lib/rubocop/cop/naming/method_name.rb +40 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
- data/lib/rubocop/cop/naming/variable_name.rb +50 -0
- data/lib/rubocop/cop/{style → naming}/variable_number.rb +11 -28
- data/lib/rubocop/cop/offense.rb +6 -1
- data/lib/rubocop/cop/performance/caller.rb +39 -11
- data/lib/rubocop/cop/performance/case_when_splat.rb +3 -7
- data/lib/rubocop/cop/performance/casecmp.rb +9 -8
- data/lib/rubocop/cop/performance/compare_with_block.rb +23 -13
- data/lib/rubocop/cop/performance/count.rb +7 -4
- data/lib/rubocop/cop/performance/detect.rb +9 -6
- data/lib/rubocop/cop/performance/double_start_end_with.rb +12 -20
- data/lib/rubocop/cop/performance/end_with.rb +6 -6
- data/lib/rubocop/cop/performance/fixed_size.rb +1 -1
- data/lib/rubocop/cop/performance/flat_map.rb +5 -2
- data/lib/rubocop/cop/performance/hash_each_methods.rb +85 -40
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +9 -6
- data/lib/rubocop/cop/performance/range_include.rb +3 -3
- data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -28
- data/lib/rubocop/cop/performance/redundant_match.rb +13 -12
- data/lib/rubocop/cop/performance/redundant_merge.rb +44 -26
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +9 -6
- data/lib/rubocop/cop/performance/regexp_match.rb +19 -10
- data/lib/rubocop/cop/performance/reverse_each.rb +1 -1
- data/lib/rubocop/cop/performance/sample.rb +1 -1
- data/lib/rubocop/cop/performance/size.rb +3 -3
- data/lib/rubocop/cop/performance/start_with.rb +6 -6
- data/lib/rubocop/cop/performance/string_replacement.rb +6 -6
- data/lib/rubocop/cop/performance/times_map.rb +32 -22
- data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
- data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
- data/lib/rubocop/cop/rails/action_filter.rb +23 -1
- data/lib/rubocop/cop/rails/active_support_aliases.rb +4 -5
- data/lib/rubocop/cop/rails/application_job.rb +5 -3
- data/lib/rubocop/cop/rails/application_record.rb +5 -3
- data/lib/rubocop/cop/rails/blank.rb +20 -17
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
- data/lib/rubocop/cop/rails/date.rb +7 -6
- data/lib/rubocop/cop/rails/delegate.rb +53 -29
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +4 -4
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +2 -2
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +4 -4
- data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
- data/lib/rubocop/cop/rails/exit.rb +8 -1
- data/lib/rubocop/cop/rails/file_path.rb +8 -11
- data/lib/rubocop/cop/rails/find_by.rb +2 -1
- data/lib/rubocop/cop/rails/find_each.rb +1 -1
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +8 -1
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +76 -0
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +40 -44
- data/lib/rubocop/cop/rails/inverse_of.rb +96 -0
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
- data/lib/rubocop/cop/rails/not_null_column.rb +6 -6
- data/lib/rubocop/cop/rails/output.rb +11 -2
- data/lib/rubocop/cop/rails/output_safety.rb +16 -21
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +10 -10
- data/lib/rubocop/cop/rails/presence.rb +105 -0
- data/lib/rubocop/cop/rails/present.rb +14 -17
- data/lib/rubocop/cop/rails/read_write_attribute.rb +13 -13
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +91 -0
- data/lib/rubocop/cop/rails/relative_date_constant.rb +11 -11
- data/lib/rubocop/cop/rails/request_referer.rb +3 -3
- data/lib/rubocop/cop/rails/reversible_migration.rb +36 -35
- data/lib/rubocop/cop/rails/safe_navigation.rb +7 -8
- data/lib/rubocop/cop/rails/save_bang.rb +19 -17
- data/lib/rubocop/cop/rails/scope_args.rb +2 -2
- data/lib/rubocop/cop/rails/skips_model_validations.rb +2 -2
- data/lib/rubocop/cop/rails/time_zone.rb +3 -2
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +4 -2
- data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
- data/lib/rubocop/cop/rails/validation.rb +8 -8
- data/lib/rubocop/cop/registry.rb +2 -1
- data/lib/rubocop/cop/security/eval.rb +4 -4
- data/lib/rubocop/cop/security/json_load.rb +7 -5
- data/lib/rubocop/cop/security/marshal_load.rb +8 -6
- data/lib/rubocop/cop/security/yaml_load.rb +4 -4
- data/lib/rubocop/cop/style/alias.rb +49 -27
- data/lib/rubocop/cop/style/and_or.rb +65 -45
- data/lib/rubocop/cop/style/array_join.rb +10 -1
- data/lib/rubocop/cop/style/ascii_comments.rb +24 -4
- data/lib/rubocop/cop/style/attr.rb +15 -5
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +7 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -10
- data/lib/rubocop/cop/style/begin_block.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +17 -3
- data/lib/rubocop/cop/style/block_delimiters.rb +82 -16
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +68 -32
- data/lib/rubocop/cop/style/case_equality.rb +13 -1
- data/lib/rubocop/cop/style/character_literal.rb +10 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +8 -4
- data/lib/rubocop/cop/style/class_check.rb +29 -10
- data/lib/rubocop/cop/style/class_methods.rb +10 -9
- data/lib/rubocop/cop/style/class_vars.rb +5 -4
- data/lib/rubocop/cop/style/collection_methods.rb +5 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +18 -2
- data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
- data/lib/rubocop/cop/style/command_literal.rb +90 -30
- data/lib/rubocop/cop/style/comment_annotation.rb +39 -11
- data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +41 -41
- data/lib/rubocop/cop/style/copyright.rb +27 -28
- data/lib/rubocop/cop/style/date_time.rb +44 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +31 -5
- data/lib/rubocop/cop/style/dir.rb +48 -0
- data/lib/rubocop/cop/style/documentation.rb +17 -2
- data/lib/rubocop/cop/style/documentation_method.rb +2 -6
- data/lib/rubocop/cop/style/double_negation.rb +1 -1
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +8 -8
- data/lib/rubocop/cop/style/each_with_object.rb +6 -5
- data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +3 -3
- data/lib/rubocop/cop/style/empty_else.rb +55 -24
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
- data/lib/rubocop/cop/style/empty_literal.rb +25 -14
- data/lib/rubocop/cop/style/empty_method.rb +29 -25
- data/lib/rubocop/cop/style/encoding.rb +8 -51
- data/lib/rubocop/cop/style/end_block.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
- data/lib/rubocop/cop/style/even_odd.rb +4 -2
- data/lib/rubocop/cop/style/extend_self.rb +92 -0
- data/lib/rubocop/cop/style/flip_flop.rb +13 -2
- data/lib/rubocop/cop/style/for.rb +6 -2
- data/lib/rubocop/cop/style/format_string.rb +33 -5
- data/lib/rubocop/cop/style/format_string_token.rb +17 -15
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +7 -6
- data/lib/rubocop/cop/style/global_vars.rb +12 -2
- data/lib/rubocop/cop/style/guard_clause.rb +6 -4
- data/lib/rubocop/cop/style/hash_syntax.rb +56 -56
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +12 -8
- data/lib/rubocop/cop/style/if_inside_else.rb +11 -11
- data/lib/rubocop/cop/style/if_unless_modifier.rb +8 -7
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -1
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -6
- data/lib/rubocop/cop/style/infinite_loop.rb +4 -4
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +24 -14
- data/lib/rubocop/cop/style/lambda.rb +45 -43
- data/lib/rubocop/cop/style/lambda_call.rb +37 -10
- data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +3 -19
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +6 -4
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +20 -25
- data/lib/rubocop/cop/style/method_missing.rb +13 -26
- data/lib/rubocop/cop/style/min_max.rb +68 -0
- data/lib/rubocop/cop/style/missing_else.rb +20 -6
- data/lib/rubocop/cop/style/mixin_grouping.rb +31 -21
- data/lib/rubocop/cop/style/mixin_usage.rb +71 -0
- data/lib/rubocop/cop/style/module_function.rb +27 -11
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +8 -4
- data/lib/rubocop/cop/style/multiline_if_then.rb +15 -13
- data/lib/rubocop/cop/style/multiline_memoization.rb +33 -17
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +11 -15
- data/lib/rubocop/cop/style/negated_if.rb +27 -31
- data/lib/rubocop/cop/style/negated_while.rb +1 -5
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +26 -23
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/next.rb +41 -12
- data/lib/rubocop/cop/style/nil_comparison.rb +8 -8
- data/lib/rubocop/cop/style/non_nil_check.rb +41 -38
- data/lib/rubocop/cop/style/not.rb +15 -5
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +8 -4
- data/lib/rubocop/cop/style/numeric_literals.rb +9 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +21 -21
- data/lib/rubocop/cop/style/one_line_conditional.rb +9 -4
- data/lib/rubocop/cop/style/option_hash.rb +11 -25
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -2
- data/lib/rubocop/cop/style/or_assignment.rb +88 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +16 -16
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +30 -13
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +25 -4
- data/lib/rubocop/cop/style/percent_q_literals.rb +29 -8
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -1
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +7 -11
- data/lib/rubocop/cop/style/proc.rb +10 -2
- data/lib/rubocop/cop/style/raise_args.rb +22 -29
- data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +16 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -4
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +14 -12
- data/lib/rubocop/cop/style/redundant_return.rb +28 -15
- data/lib/rubocop/cop/style/redundant_self.rb +35 -27
- data/lib/rubocop/cop/style/regexp_literal.rb +88 -27
- data/lib/rubocop/cop/style/rescue_modifier.rb +12 -1
- data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
- data/lib/rubocop/cop/style/return_nil.rb +89 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +100 -48
- data/lib/rubocop/cop/style/self_assignment.rb +13 -13
- data/lib/rubocop/cop/style/semicolon.rb +19 -9
- data/lib/rubocop/cop/style/send.rb +10 -1
- data/lib/rubocop/cop/style/signal_exception.rb +104 -3
- data/lib/rubocop/cop/style/single_line_block_params.rb +16 -15
- data/lib/rubocop/cop/style/single_line_methods.rb +26 -18
- data/lib/rubocop/cop/style/special_global_vars.rb +19 -14
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +23 -50
- data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
- data/lib/rubocop/cop/style/string_literals.rb +26 -3
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +16 -1
- data/lib/rubocop/cop/style/string_methods.rb +19 -8
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
- data/lib/rubocop/cop/style/symbol_array.rb +7 -35
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +11 -25
- data/lib/rubocop/cop/style/ternary_parentheses.rb +46 -51
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +20 -6
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +22 -7
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +70 -24
- data/lib/rubocop/cop/style/trivial_accessors.rb +72 -65
- data/lib/rubocop/cop/style/unless_else.rb +16 -1
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +18 -8
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +15 -19
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +14 -13
- data/lib/rubocop/cop/style/variable_interpolation.rb +23 -9
- data/lib/rubocop/cop/style/when_then.rb +14 -1
- data/lib/rubocop/cop/style/while_until_do.rb +27 -4
- data/lib/rubocop/cop/style/while_until_modifier.rb +26 -6
- data/lib/rubocop/cop/style/word_array.rb +9 -30
- data/lib/rubocop/cop/style/yoda_condition.rb +51 -22
- data/lib/rubocop/cop/style/zero_length_predicate.rb +44 -29
- data/lib/rubocop/cop/team.rb +16 -8
- data/lib/rubocop/cop/util.rb +43 -34
- data/lib/rubocop/cop/variable_force.rb +1 -1
- data/lib/rubocop/cop/variable_force/assignment.rb +4 -2
- data/lib/rubocop/cop/variable_force/scope.rb +1 -5
- data/lib/rubocop/cop/variable_force/variable.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -4
- data/lib/rubocop/formatter/formatter_set.rb +3 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/json_formatter.rb +9 -3
- data/lib/rubocop/formatter/offense_count_formatter.rb +2 -0
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +3 -3
- data/lib/rubocop/formatter/tap_formatter.rb +71 -0
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -0
- data/lib/rubocop/node_pattern.rb +46 -29
- data/lib/rubocop/options.rb +13 -8
- data/lib/rubocop/path_util.rb +15 -3
- data/lib/rubocop/processed_source.rb +8 -9
- data/lib/rubocop/rake_task.rb +16 -23
- data/lib/rubocop/remote_config.rb +13 -1
- data/lib/rubocop/result_cache.rb +1 -0
- data/lib/rubocop/rspec/cop_helper.rb +10 -10
- data/lib/rubocop/rspec/expect_offense.rb +6 -8
- data/lib/rubocop/rspec/shared_contexts.rb +4 -8
- data/lib/rubocop/rspec/shared_examples.rb +8 -8
- data/lib/rubocop/rspec/support.rb +5 -5
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/string_util.rb +2 -0
- data/lib/rubocop/token.rb +74 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +118 -48
- data/lib/rubocop/cop/layout/space_inside_brackets.rb +0 -20
- data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -41
- data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -41
- data/lib/rubocop/cop/mixin/on_method_def.rb +0 -44
- data/lib/rubocop/cop/mixin/space_inside.rb +0 -76
- data/lib/rubocop/cop/style/accessor_method_name.rb +0 -45
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -29
- data/lib/rubocop/cop/style/constant_name.rb +0 -29
- data/lib/rubocop/cop/style/method_name.rb +0 -34
- data/lib/rubocop/cop/style/predicate_name.rb +0 -67
- data/lib/rubocop/cop/style/variable_name.rb +0 -39
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `str`, `dstr` and `xstr` nodes. This will be used
|
6
|
+
# in place of a plain node when the builder constructs the AST, making
|
7
|
+
# its methods available to all `str` nodes within RuboCop.
|
8
|
+
class StrNode < Node
|
9
|
+
def heredoc?
|
10
|
+
loc.is_a?(Parser::Source::Map::Heredoc)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -7,35 +7,14 @@ module RuboCop
|
|
7
7
|
# methods available to all `super`- and `zsuper` nodes within RuboCop.
|
8
8
|
class SuperNode < Node
|
9
9
|
include ParameterizedNode
|
10
|
-
|
11
|
-
# The method name of this `super` node. Always `:super`.
|
12
|
-
#
|
13
|
-
# @return [Symbol] the method name of `super`
|
14
|
-
def method_name
|
15
|
-
:super
|
16
|
-
end
|
17
|
-
|
18
|
-
# An array containing the arguments of the super invocation.
|
19
|
-
#
|
20
|
-
# @return [Array<Node>] the arguments of the super invocation
|
21
|
-
def arguments
|
22
|
-
node_parts
|
23
|
-
end
|
24
|
-
|
25
|
-
# Checks whether the method name matches the argument.
|
26
|
-
#
|
27
|
-
# @param [Symbol, String] name the method name to check for
|
28
|
-
# @return [Boolean] whether the method name matches the argument
|
29
|
-
def method?(name)
|
30
|
-
method_name == name.to_sym
|
31
|
-
end
|
10
|
+
include MethodDispatchNode
|
32
11
|
|
33
12
|
# Custom destructuring method. This can be used to normalize
|
34
13
|
# destructuring for different variations of the node.
|
35
14
|
#
|
36
|
-
# @return [Array] the different parts of the `
|
15
|
+
# @return [Array] the different parts of the `super` node
|
37
16
|
def node_parts
|
38
|
-
to_a
|
17
|
+
[nil, :super, *to_a]
|
39
18
|
end
|
40
19
|
end
|
41
20
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `sym` nodes. This will be used in place of a
|
6
|
+
# plain node when the builder constructs the AST, making its methods
|
7
|
+
# available to all `sym` nodes within RuboCop.
|
8
|
+
class SymbolNode < Node
|
9
|
+
include BasicLiteralNode
|
10
|
+
|
11
|
+
# Custom destructuring method. This can be used to normalize
|
12
|
+
# destructuring for different variations of the node.
|
13
|
+
#
|
14
|
+
# @return [Array] the different parts of the `sym` node
|
15
|
+
def node_parts
|
16
|
+
to_a
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `yield` nodes. This will be used in place of a plain
|
6
|
+
# node when the builder constructs the AST, making its methods available
|
7
|
+
# to all `yield` nodes within RuboCop.
|
8
|
+
class YieldNode < Node
|
9
|
+
include ParameterizedNode
|
10
|
+
include MethodDispatchNode
|
11
|
+
|
12
|
+
# Custom destructuring method. This can be used to normalize
|
13
|
+
# destructuring for different variations of the node.
|
14
|
+
#
|
15
|
+
# @return [Array] the different parts of the `send` node
|
16
|
+
def node_parts
|
17
|
+
[nil, :yield, *to_a]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -30,37 +30,37 @@ module RuboCop
|
|
30
30
|
kwoptarg].freeze
|
31
31
|
|
32
32
|
NO_CHILD_NODES.each do |type|
|
33
|
-
module_eval("def on_#{type}(node); end")
|
33
|
+
module_eval("def on_#{type}(node); end", __FILE__, __LINE__)
|
34
34
|
end
|
35
35
|
|
36
36
|
ONE_CHILD_NODE.each do |type|
|
37
|
-
module_eval(<<-
|
37
|
+
module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
38
38
|
def on_#{type}(node)
|
39
39
|
if (child = node.children[0])
|
40
40
|
send(:"on_\#{child.type}", child)
|
41
41
|
end
|
42
42
|
end
|
43
|
-
|
43
|
+
RUBY
|
44
44
|
end
|
45
45
|
|
46
46
|
MANY_CHILD_NODES.each do |type|
|
47
|
-
module_eval(<<-
|
47
|
+
module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
48
48
|
def on_#{type}(node)
|
49
49
|
node.children.each { |child| send(:"on_\#{child.type}", child) }
|
50
50
|
nil
|
51
51
|
end
|
52
|
-
|
52
|
+
RUBY
|
53
53
|
end
|
54
54
|
|
55
55
|
SECOND_CHILD_ONLY.each do |type|
|
56
56
|
# Guard clause is for nodes nested within mlhs
|
57
|
-
module_eval(<<-
|
57
|
+
module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
58
58
|
def on_#{type}(node)
|
59
59
|
if (child = node.children[1])
|
60
60
|
send(:"on_\#{child.type}", child)
|
61
61
|
end
|
62
62
|
end
|
63
|
-
|
63
|
+
RUBY
|
64
64
|
end
|
65
65
|
|
66
66
|
def on_const(node)
|
data/lib/rubocop/cached_data.rb
CHANGED
@@ -38,12 +38,7 @@ module RuboCop
|
|
38
38
|
def message(offense)
|
39
39
|
# JSON.dump will fail if the offense message contains text which is not
|
40
40
|
# valid UTF-8
|
41
|
-
|
42
|
-
if message.respond_to?(:scrub)
|
43
|
-
message.scrub
|
44
|
-
else
|
45
|
-
message.chars.select(&:valid_encoding?).join
|
46
|
-
end
|
41
|
+
offense.message.scrub
|
47
42
|
end
|
48
43
|
|
49
44
|
# Restore an offense object loaded from a JSON file.
|
data/lib/rubocop/cli.rb
CHANGED
@@ -15,25 +15,28 @@ module RuboCop
|
|
15
15
|
@config_store = ConfigStore.new
|
16
16
|
end
|
17
17
|
|
18
|
+
# @api public
|
19
|
+
#
|
18
20
|
# Entry point for the application logic. Here we
|
19
21
|
# do the command line arguments processing and inspect
|
20
|
-
# the target files
|
22
|
+
# the target files.
|
23
|
+
#
|
24
|
+
# @param args [Array<String>] command line arguments
|
21
25
|
# @return [Integer] UNIX exit code
|
22
26
|
def run(args = ARGV)
|
23
27
|
@options, paths = Options.new.parse(args)
|
24
28
|
validate_options_vs_config
|
25
29
|
act_on_options
|
26
30
|
apply_default_formatter
|
27
|
-
|
28
|
-
execute_runner(paths)
|
31
|
+
execute_runners(paths)
|
29
32
|
rescue RuboCop::Error => e
|
30
|
-
|
33
|
+
warn Rainbow("Error: #{e.message}").red
|
31
34
|
return 2
|
32
35
|
rescue Finished
|
33
36
|
return 0
|
34
|
-
rescue StandardError, SyntaxError => e
|
35
|
-
|
36
|
-
|
37
|
+
rescue StandardError, SyntaxError, LoadError => e
|
38
|
+
warn e.message
|
39
|
+
warn e.backtrace
|
37
40
|
return 2
|
38
41
|
end
|
39
42
|
|
@@ -41,13 +44,55 @@ module RuboCop
|
|
41
44
|
Signal.trap('INT') do
|
42
45
|
exit!(1) if runner.aborting?
|
43
46
|
runner.abort
|
44
|
-
|
45
|
-
|
47
|
+
warn
|
48
|
+
warn 'Exiting... Interrupt again to exit immediately.'
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
49
52
|
private
|
50
53
|
|
54
|
+
def execute_runners(paths)
|
55
|
+
if @options[:auto_gen_config]
|
56
|
+
reset_config_and_auto_gen_file
|
57
|
+
line_length_contents = run_line_length_cop_auto_gen_config(paths)
|
58
|
+
run_all_cops_auto_gen_config(line_length_contents, paths)
|
59
|
+
else
|
60
|
+
execute_runner(paths)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Do an initial run with only Metrics/LineLength so that cops that depend
|
65
|
+
# on Metrics/LineLength:Max get the correct value for that parameter.
|
66
|
+
def run_line_length_cop_auto_gen_config(paths)
|
67
|
+
puts Rainbow('Phase 1 of 2: run Metrics/LineLength cop').yellow
|
68
|
+
@options[:only] = ['Metrics/LineLength']
|
69
|
+
execute_runner(paths)
|
70
|
+
@options.delete(:only)
|
71
|
+
@config_store = ConfigStore.new
|
72
|
+
# Save the todo configuration of the LineLength cop.
|
73
|
+
IO.read(ConfigLoader::AUTO_GENERATED_FILE)
|
74
|
+
.lines
|
75
|
+
.drop_while { |line| line.start_with?('#') }
|
76
|
+
.join
|
77
|
+
end
|
78
|
+
|
79
|
+
def run_all_cops_auto_gen_config(line_length_contents, paths)
|
80
|
+
puts Rainbow('Phase 2 of 2: run all cops').yellow
|
81
|
+
result = execute_runner(paths)
|
82
|
+
# This run was made with the current maximum length allowed, so append
|
83
|
+
# the saved setting for LineLength.
|
84
|
+
File.open(ConfigLoader::AUTO_GENERATED_FILE, 'a') do |f|
|
85
|
+
f.write(line_length_contents)
|
86
|
+
end
|
87
|
+
result
|
88
|
+
end
|
89
|
+
|
90
|
+
def reset_config_and_auto_gen_file
|
91
|
+
@config_store = ConfigStore.new
|
92
|
+
File.open(ConfigLoader::AUTO_GENERATED_FILE, 'w'){}
|
93
|
+
ConfigLoader.add_inheritance_from_auto_generated_file
|
94
|
+
end
|
95
|
+
|
51
96
|
def validate_options_vs_config
|
52
97
|
if @options[:parallel] &&
|
53
98
|
!@config_store.for(Dir.pwd).for_all_cops['UseCache']
|
@@ -58,14 +103,15 @@ module RuboCop
|
|
58
103
|
end
|
59
104
|
|
60
105
|
def act_on_options
|
61
|
-
handle_exiting_options
|
62
|
-
|
63
106
|
ConfigLoader.debug = @options[:debug]
|
64
107
|
ConfigLoader.auto_gen_config = @options[:auto_gen_config]
|
108
|
+
ConfigLoader.ignore_parent_exclusion = @options[:ignore_parent_exclusion]
|
65
109
|
|
66
110
|
@config_store.options_config = @options[:config] if @options[:config]
|
67
111
|
@config_store.force_default_config! if @options[:force_default_config]
|
68
112
|
|
113
|
+
handle_exiting_options
|
114
|
+
|
69
115
|
if @options[:color]
|
70
116
|
# color output explicitly forced on
|
71
117
|
Rainbow.enabled = true
|
@@ -177,12 +223,12 @@ module RuboCop
|
|
177
223
|
|
178
224
|
errors.each { |error| warn error }
|
179
225
|
|
180
|
-
warn <<-
|
226
|
+
warn <<-WARNING.strip_indent
|
181
227
|
Errors are usually caused by RuboCop bugs.
|
182
228
|
Please, report your problems to RuboCop's issue tracker.
|
183
229
|
Mention the following information in the issue report:
|
184
230
|
#{RuboCop::Version.version(true)}
|
185
|
-
|
231
|
+
WARNING
|
186
232
|
end
|
187
233
|
|
188
234
|
def maybe_print_corrected_source
|
@@ -144,11 +144,8 @@ module RuboCop
|
|
144
144
|
|
145
145
|
def non_comment_token_line_numbers
|
146
146
|
@non_comment_token_line_numbers ||= begin
|
147
|
-
non_comment_tokens = processed_source.tokens.reject
|
148
|
-
|
149
|
-
end
|
150
|
-
|
151
|
-
non_comment_tokens.map { |token| token.pos.line }.uniq
|
147
|
+
non_comment_tokens = processed_source.tokens.reject(&:comment?)
|
148
|
+
non_comment_tokens.map(&:line).uniq
|
152
149
|
end
|
153
150
|
end
|
154
151
|
end
|
data/lib/rubocop/config.rb
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'pathname'
|
4
4
|
|
5
|
-
# rubocop:disable Metrics/ClassLength
|
6
|
-
|
7
5
|
module RuboCop
|
8
6
|
# This class represents the configuration of the RuboCop application
|
9
7
|
# and all its cops. A Config is associated with a YAML configuration
|
10
8
|
# file from which it was read. Several different Configs can be used
|
11
9
|
# during a run of the rubocop program, if files in several
|
12
10
|
# directories are inspected.
|
11
|
+
|
12
|
+
# rubocop:disable Metrics/ClassLength
|
13
13
|
class Config
|
14
14
|
include PathUtil
|
15
15
|
|
@@ -17,7 +17,8 @@ module RuboCop
|
|
17
17
|
AutoCorrect StyleGuide Details].freeze
|
18
18
|
# 2.1 is the oldest officially supported Ruby version.
|
19
19
|
DEFAULT_RUBY_VERSION = 2.1
|
20
|
-
KNOWN_RUBIES = [1
|
20
|
+
KNOWN_RUBIES = [2.1, 2.2, 2.3, 2.4, 2.5].freeze
|
21
|
+
OBSOLETE_RUBIES = { 1.9 => '0.50', 2.0 => '0.50' }.freeze
|
21
22
|
DEFAULT_RAILS_VERSION = 5.0
|
22
23
|
OBSOLETE_COPS = {
|
23
24
|
'Style/TrailingComma' =>
|
@@ -26,9 +27,15 @@ module RuboCop
|
|
26
27
|
'`Style/TrailingCommaInArguments` instead.',
|
27
28
|
'Rails/DefaultScope' =>
|
28
29
|
'The `Rails/DefaultScope` cop no longer exists.',
|
30
|
+
'Lint/InvalidCharacterLiteral' =>
|
31
|
+
'The `Lint/InvalidCharacterLiteral` cop has been removed since it ' \
|
32
|
+
'was never being actually triggered.',
|
29
33
|
'Style/SingleSpaceBeforeFirstArg' =>
|
30
34
|
'The `Style/SingleSpaceBeforeFirstArg` cop has been renamed to ' \
|
31
35
|
'`Layout/SpaceBeforeFirstArg`.',
|
36
|
+
'Lint/RescueWithoutErrorClass' =>
|
37
|
+
'The `Lint/RescueWithoutErrorClass` cop has been replaced by ' \
|
38
|
+
'`Style/RescueStandardError`.',
|
32
39
|
'Lint/SpaceBeforeFirstArg' =>
|
33
40
|
'The `Lint/SpaceBeforeFirstArg` cop has been removed, since it was a ' \
|
34
41
|
'duplicate of `Layout/SpaceBeforeFirstArg`. Please use ' \
|
@@ -52,7 +59,36 @@ module RuboCop
|
|
52
59
|
'The `Lint/Eval` cop has been renamed to `Security/Eval`.',
|
53
60
|
'Style/DeprecatedHashMethods' =>
|
54
61
|
'The `Style/DeprecatedHashMethods` cop has been renamed to ' \
|
55
|
-
'`Style/PreferredHashMethods`.'
|
62
|
+
'`Style/PreferredHashMethods`.',
|
63
|
+
'Style/AccessorMethodName' =>
|
64
|
+
'The `Style/AccessorMethodName` cop has been moved to ' \
|
65
|
+
'`Naming/AccessorMethodName`.',
|
66
|
+
'Style/AsciiIdentifiers' =>
|
67
|
+
'The `Style/AsciiIdentifiers` cop has been moved to ' \
|
68
|
+
'`Naming/AccessorMethodName`.',
|
69
|
+
'Style/OpMethod' =>
|
70
|
+
'The `Style/OpMethod` cop has been renamed and moved to ' \
|
71
|
+
'`Naming/BinaryOperatorParameterName`.',
|
72
|
+
'Style/ClassAndModuleCamelCase' =>
|
73
|
+
'The `Style/ClassAndModuleCamelCase` cop has been renamed to ' \
|
74
|
+
'`Naming/ClassAndModuleCamelCase`.',
|
75
|
+
'Style/ConstantName' =>
|
76
|
+
'The `Style/ConstantName` cop has been renamed to ' \
|
77
|
+
'`Naming/ConstantName`.',
|
78
|
+
'Style/FileName' =>
|
79
|
+
'The `Style/FileName` cop has been renamed to `Naming/FileName`.',
|
80
|
+
'Style/MethodName' =>
|
81
|
+
'The `Style/MethodName` cop has been renamed to ' \
|
82
|
+
'`Naming/MethodName`.',
|
83
|
+
'Style/PredicateName' =>
|
84
|
+
'The `Style/PredicateName` cop has been renamed to ' \
|
85
|
+
'`Naming/PredicateName`.',
|
86
|
+
'Style/VariableName' =>
|
87
|
+
'The `Style/VariableName` cop has been renamed to ' \
|
88
|
+
'`Naming/VariableName`.',
|
89
|
+
'Style/VariableNumber' =>
|
90
|
+
'The `Style/VariableNumber` cop has been renamed to ' \
|
91
|
+
'`Naming/VariableNumber`.'
|
56
92
|
}.freeze
|
57
93
|
|
58
94
|
OBSOLETE_PARAMETERS = [
|
@@ -63,6 +99,31 @@ module RuboCop
|
|
63
99
|
'for alignment, please use AllowForAlignment: ' \
|
64
100
|
'true instead.'
|
65
101
|
},
|
102
|
+
{
|
103
|
+
cop: 'Style/Encoding',
|
104
|
+
parameter: 'EnforcedStyle',
|
105
|
+
alternative: 'Style/Encoding no longer supports styles. ' \
|
106
|
+
'The "never" behavior is always assumed.'
|
107
|
+
},
|
108
|
+
{
|
109
|
+
cop: 'Style/Encoding',
|
110
|
+
parameter: 'SupportedStyles',
|
111
|
+
alternative: 'Style/Encoding no longer supports styles. ' \
|
112
|
+
'The "never" behavior is always assumed.'
|
113
|
+
},
|
114
|
+
{
|
115
|
+
cop: 'Style/Encoding',
|
116
|
+
parameter: 'AutoCorrectEncodingComment',
|
117
|
+
alternative: 'Style/Encoding no longer supports styles. ' \
|
118
|
+
'The "never" behavior is always assumed.'
|
119
|
+
},
|
120
|
+
{
|
121
|
+
cop: 'Style/IfUnlessModifier',
|
122
|
+
parameter: 'MaxLineLength',
|
123
|
+
alternative:
|
124
|
+
'`Style/IfUnlessModifier: MaxLineLength` has been removed. Use ' \
|
125
|
+
'`Metrics/LineLength: Max` instead'
|
126
|
+
},
|
66
127
|
{
|
67
128
|
cop: 'Style/SpaceAroundOperators',
|
68
129
|
parameter: 'MultiSpaceAllowedForOperators',
|
@@ -70,6 +131,13 @@ module RuboCop
|
|
70
131
|
'for alignment, please use AllowForAlignment: ' \
|
71
132
|
'true instead.'
|
72
133
|
},
|
134
|
+
{
|
135
|
+
cop: 'Style/WhileUntilModifier',
|
136
|
+
parameter: 'MaxLineLength',
|
137
|
+
alternative:
|
138
|
+
'`Style/WhileUntilModifier: MaxLineLength` has been removed. Use ' \
|
139
|
+
'`Metrics/LineLength: Max` instead'
|
140
|
+
},
|
73
141
|
{
|
74
142
|
cop: 'AllCops',
|
75
143
|
parameter: 'RunRailsCops',
|
@@ -121,6 +189,19 @@ module RuboCop
|
|
121
189
|
@hash = hash
|
122
190
|
end
|
123
191
|
|
192
|
+
def self.create(hash, path)
|
193
|
+
new(hash, path).check
|
194
|
+
end
|
195
|
+
|
196
|
+
def check
|
197
|
+
deprecation_check do |deprecation_message|
|
198
|
+
warn("#{path} - #{deprecation_message}")
|
199
|
+
end
|
200
|
+
validate
|
201
|
+
make_excludes_absolute
|
202
|
+
self
|
203
|
+
end
|
204
|
+
|
124
205
|
def [](key)
|
125
206
|
@hash[key]
|
126
207
|
end
|
@@ -145,6 +226,10 @@ module RuboCop
|
|
145
226
|
@hash.keys
|
146
227
|
end
|
147
228
|
|
229
|
+
def each_key(&block)
|
230
|
+
@hash.each_key(&block)
|
231
|
+
end
|
232
|
+
|
148
233
|
def map(&block)
|
149
234
|
@hash.map(&block)
|
150
235
|
end
|
@@ -166,7 +251,7 @@ module RuboCop
|
|
166
251
|
end
|
167
252
|
|
168
253
|
def make_excludes_absolute
|
169
|
-
|
254
|
+
each_key do |key|
|
170
255
|
validate_section_presence(key)
|
171
256
|
next unless self[key]['Exclude']
|
172
257
|
|
@@ -227,6 +312,7 @@ module RuboCop
|
|
227
312
|
check_target_ruby
|
228
313
|
validate_parameter_names(valid_cop_names)
|
229
314
|
validate_enforced_styles(valid_cop_names)
|
315
|
+
validate_syntax_cop
|
230
316
|
reject_mutually_exclusive_defaults
|
231
317
|
end
|
232
318
|
|
@@ -317,23 +403,30 @@ module RuboCop
|
|
317
403
|
|
318
404
|
def warn_about_unrecognized_cops(invalid_cop_names)
|
319
405
|
invalid_cop_names.each do |name|
|
320
|
-
if name == 'Syntax'
|
321
|
-
raise ValidationError,
|
322
|
-
"configuration for Syntax cop found in #{loaded_path}\n" \
|
323
|
-
'This cop cannot be configured.'
|
324
|
-
end
|
325
|
-
|
326
406
|
# There could be a custom cop with this name. If so, don't warn
|
327
407
|
next if Cop::Cop.registry.contains_cop_matching?([name])
|
328
408
|
|
329
409
|
warn Rainbow("Warning: unrecognized cop #{name} found in " \
|
330
|
-
"#{
|
410
|
+
"#{smart_loaded_path}").yellow
|
331
411
|
end
|
332
412
|
end
|
333
413
|
|
414
|
+
def validate_syntax_cop
|
415
|
+
syntax_config = self['Lint/Syntax']
|
416
|
+
default_config = ConfigLoader.default_configuration['Lint/Syntax']
|
417
|
+
|
418
|
+
return unless syntax_config &&
|
419
|
+
default_config.merge(syntax_config) != default_config
|
420
|
+
|
421
|
+
raise ValidationError,
|
422
|
+
"configuration for Syntax cop found in #{smart_loaded_path}\n" \
|
423
|
+
'It\'s not possible to disable this cop.'
|
424
|
+
end
|
425
|
+
|
334
426
|
def validate_section_presence(name)
|
335
427
|
return unless key?(name) && self[name].nil?
|
336
|
-
raise ValidationError,
|
428
|
+
raise ValidationError,
|
429
|
+
"empty section #{name} found in #{smart_loaded_path}"
|
337
430
|
end
|
338
431
|
|
339
432
|
def validate_parameter_names(valid_cop_names)
|
@@ -344,7 +437,7 @@ module RuboCop
|
|
344
437
|
ConfigLoader.default_configuration[name].key?(param)
|
345
438
|
|
346
439
|
warn Rainbow("Warning: unrecognized parameter #{name}:#{param} " \
|
347
|
-
"found in #{
|
440
|
+
"found in #{smart_loaded_path}").yellow
|
348
441
|
end
|
349
442
|
end
|
350
443
|
end
|
@@ -360,7 +453,7 @@ module RuboCop
|
|
360
453
|
next if valid.include?(style)
|
361
454
|
|
362
455
|
msg = "invalid #{style_name} '#{style}' for #{name} found in " \
|
363
|
-
"#{
|
456
|
+
"#{smart_loaded_path}\n" \
|
364
457
|
"Valid choices are: #{valid.join(', ')}"
|
365
458
|
raise ValidationError, msg
|
366
459
|
end
|
@@ -388,36 +481,45 @@ module RuboCop
|
|
388
481
|
return unless self[cop] && self[cop].key?(parameter)
|
389
482
|
|
390
483
|
"obsolete parameter #{parameter} (for #{cop}) " \
|
391
|
-
"found in #{
|
484
|
+
"found in #{smart_loaded_path}" \
|
392
485
|
"\n#{alternative}"
|
393
486
|
end
|
394
487
|
|
395
488
|
def obsolete_cops
|
396
489
|
OBSOLETE_COPS.map do |cop_name, message|
|
397
490
|
next unless key?(cop_name) || key?(Cop::Badge.parse(cop_name).cop_name)
|
398
|
-
message + "\n(obsolete configuration found in #{
|
399
|
-
' update it)'
|
491
|
+
message + "\n(obsolete configuration found in #{smart_loaded_path}," \
|
492
|
+
' please update it)'
|
400
493
|
end
|
401
494
|
end
|
402
495
|
|
403
496
|
def check_target_ruby
|
404
497
|
return if KNOWN_RUBIES.include?(target_ruby_version)
|
405
498
|
|
406
|
-
msg =
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
499
|
+
msg = if OBSOLETE_RUBIES.include?(target_ruby_version)
|
500
|
+
"Unsupported Ruby version #{target_ruby_version} found in " \
|
501
|
+
"#{target_ruby_source}. #{target_ruby_version}-compatible " \
|
502
|
+
'analysis was dropped after version ' \
|
503
|
+
"#{OBSOLETE_RUBIES[target_ruby_version]}."
|
504
|
+
else
|
505
|
+
"Unknown Ruby version #{target_ruby_version.inspect} found in " \
|
506
|
+
"#{target_ruby_source}."
|
507
|
+
end
|
415
508
|
|
416
|
-
msg += "\
|
509
|
+
msg += "\nSupported versions: #{KNOWN_RUBIES.join(', ')}"
|
417
510
|
|
418
511
|
raise ValidationError, msg
|
419
512
|
end
|
420
513
|
|
514
|
+
def target_ruby_source
|
515
|
+
case @target_ruby_version_source
|
516
|
+
when :dot_ruby_version
|
517
|
+
'`.ruby-version`'
|
518
|
+
when :rubocop_yml
|
519
|
+
"`TargetRubyVersion` parameter (in #{smart_loaded_path})"
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
421
523
|
def reject_mutually_exclusive_defaults
|
422
524
|
disabled_by_default = for_all_cops['DisabledByDefault']
|
423
525
|
enabled_by_default = for_all_cops['EnabledByDefault']
|
@@ -433,12 +535,17 @@ module RuboCop
|
|
433
535
|
|
434
536
|
unless department
|
435
537
|
department_options = self[cop_department]
|
436
|
-
if department_options && department_options
|
538
|
+
if department_options && department_options['Enabled'] == false
|
437
539
|
return false
|
438
540
|
end
|
439
541
|
end
|
440
542
|
|
441
543
|
cop_options.fetch('Enabled', true)
|
442
544
|
end
|
545
|
+
|
546
|
+
def smart_loaded_path
|
547
|
+
PathUtil.smart_path(@loaded_path)
|
548
|
+
end
|
443
549
|
end
|
550
|
+
# rubocop:enable Metrics/ClassLength
|
444
551
|
end
|