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
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
next if consumed_branches.include?(assignment.branch)
|
48
48
|
|
49
49
|
unless assignment.run_exclusively_with?(reference)
|
50
|
-
assignment.reference!
|
50
|
+
assignment.reference!(node)
|
51
51
|
end
|
52
52
|
|
53
53
|
break if !assignment.branch || assignment.branch == reference.branch
|
@@ -50,13 +50,11 @@ module RuboCop
|
|
50
50
|
output.puts HEADING % command
|
51
51
|
|
52
52
|
# Syntax isn't a real cop and it can't be disabled.
|
53
|
-
@cops_with_offenses.delete('Syntax')
|
53
|
+
@cops_with_offenses.delete('Lint/Syntax')
|
54
54
|
|
55
55
|
output_offenses
|
56
56
|
|
57
57
|
puts "Created #{output.path}."
|
58
|
-
puts "Run `rubocop --config #{output.path}`, or add `inherit_from: " \
|
59
|
-
"#{output.path}` in a .rubocop.yml file."
|
60
58
|
end
|
61
59
|
|
62
60
|
private
|
@@ -107,7 +105,8 @@ module RuboCop
|
|
107
105
|
end
|
108
106
|
|
109
107
|
def output_cop_param_comments(params, default_cfg)
|
110
|
-
|
108
|
+
config_params = params.reject { |p| p.start_with?('Supported') }
|
109
|
+
output.puts "# Configuration parameters: #{config_params.join(', ')}."
|
111
110
|
|
112
111
|
params.each do |param|
|
113
112
|
value = default_cfg[param]
|
@@ -19,7 +19,9 @@ module RuboCop
|
|
19
19
|
'files' => FileListFormatter,
|
20
20
|
'offenses' => OffenseCountFormatter,
|
21
21
|
'disabled' => DisabledLinesFormatter,
|
22
|
-
'worst' => WorstOffendersFormatter
|
22
|
+
'worst' => WorstOffendersFormatter,
|
23
|
+
'tap' => TapFormatter,
|
24
|
+
'quiet' => QuietFormatter
|
23
25
|
}.freeze
|
24
26
|
|
25
27
|
FORMATTER_APIS = %i[started finished].freeze
|
@@ -64,9 +64,15 @@ module RuboCop
|
|
64
64
|
# TODO: Consider better solution for Offense#real_column.
|
65
65
|
def hash_for_location(offense)
|
66
66
|
{
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
start_line: offense.line,
|
68
|
+
start_column: offense.real_column,
|
69
|
+
last_line: offense.last_line,
|
70
|
+
last_column: offense.last_column,
|
71
|
+
length: offense.location.length,
|
72
|
+
# `line` and `column` exist for compatibility.
|
73
|
+
# Use `start_line` and `start_column` instead.
|
74
|
+
line: offense.line,
|
75
|
+
column: offense.real_column
|
70
76
|
}
|
71
77
|
end
|
72
78
|
end
|
@@ -27,6 +27,7 @@ module RuboCop
|
|
27
27
|
report_summary(@offense_counts)
|
28
28
|
end
|
29
29
|
|
30
|
+
# rubocop:disable Metrics/AbcSize
|
30
31
|
def report_summary(offense_counts)
|
31
32
|
per_cop_counts = ordered_offense_counts(offense_counts)
|
32
33
|
total_count = total_offense_count(offense_counts)
|
@@ -42,6 +43,7 @@ module RuboCop
|
|
42
43
|
|
43
44
|
output.puts
|
44
45
|
end
|
46
|
+
# rubocop:enable Metrics/AbcSize
|
45
47
|
|
46
48
|
def ordered_offense_counts(offense_counts)
|
47
49
|
Hash[offense_counts.sort_by { |k, v| [-v, k] }]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Formatter
|
5
|
+
# If no offenses are found, no output is displayed.
|
6
|
+
# Otherwise, SimpleTextFormatter's output is displayed.
|
7
|
+
class QuietFormatter < SimpleTextFormatter
|
8
|
+
def report_summary(file_count, offense_count, correction_count)
|
9
|
+
super unless offense_count.zero?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require_relative 'colorizable'
|
4
|
+
require_relative 'text_util'
|
5
5
|
|
6
6
|
module RuboCop
|
7
7
|
module Formatter
|
@@ -70,7 +70,7 @@ module RuboCop
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def annotate_message(msg)
|
73
|
-
msg.gsub(/`(.*?)
|
73
|
+
msg.gsub(/`(.*?)`/m, yellow('\1'))
|
74
74
|
end
|
75
75
|
|
76
76
|
def message(offense)
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Formatter
|
5
|
+
# This formatter formats report data using the Test Anything Protocol.
|
6
|
+
# TAP allows for to communicate tests results in a language agnostics way.
|
7
|
+
class TapFormatter < ClangStyleFormatter
|
8
|
+
def started(target_files)
|
9
|
+
super
|
10
|
+
@progress_count = 1
|
11
|
+
output.puts "1..#{target_files.size}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def file_finished(file, offenses)
|
15
|
+
if offenses.empty?
|
16
|
+
output.puts "ok #{@progress_count} - #{smart_path(file)}"
|
17
|
+
else
|
18
|
+
output.puts "not ok #{@progress_count} - #{smart_path(file)}"
|
19
|
+
|
20
|
+
count_stats(offenses)
|
21
|
+
report_file(file, offenses)
|
22
|
+
end
|
23
|
+
|
24
|
+
@progress_count += 1
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def report_line(location)
|
30
|
+
source_line = location.source_line
|
31
|
+
|
32
|
+
if location.first_line == location.last_line
|
33
|
+
output.puts("# #{source_line}")
|
34
|
+
else
|
35
|
+
output.puts("# #{source_line} #{yellow(ELLIPSES)}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def report_highlighted_area(highlighted_area)
|
40
|
+
output.puts("# #{' ' * highlighted_area.begin_pos}" \
|
41
|
+
"#{'^' * highlighted_area.size}")
|
42
|
+
end
|
43
|
+
|
44
|
+
def report_offense(file, offense)
|
45
|
+
output.printf("# %s:%d:%d: %s: %s\n",
|
46
|
+
cyan(smart_path(file)), offense.line, offense.real_column,
|
47
|
+
colored_severity_code(offense), message(offense))
|
48
|
+
|
49
|
+
# rubocop:disable Lint/HandleExceptions
|
50
|
+
begin
|
51
|
+
return unless valid_line?(offense)
|
52
|
+
|
53
|
+
report_line(offense.location)
|
54
|
+
report_highlighted_area(offense.highlighted_area)
|
55
|
+
rescue IndexError
|
56
|
+
# range is not on a valid line; perhaps the source file is empty
|
57
|
+
end
|
58
|
+
# rubocop:enable Lint/HandleExceptions
|
59
|
+
end
|
60
|
+
|
61
|
+
def annotate_message(msg)
|
62
|
+
msg.gsub(/`(.*?)`/, '\1')
|
63
|
+
end
|
64
|
+
|
65
|
+
def message(offense)
|
66
|
+
message = offense.corrected? ? '[Corrected] ' : ''
|
67
|
+
"#{message}#{annotate_message(offense.message)}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -32,6 +32,7 @@ module RuboCop
|
|
32
32
|
report_summary(@offense_counts)
|
33
33
|
end
|
34
34
|
|
35
|
+
# rubocop:disable Metrics/AbcSize
|
35
36
|
def report_summary(offense_counts)
|
36
37
|
per_file_counts = ordered_offense_counts(offense_counts)
|
37
38
|
total_count = total_offense_count(offense_counts)
|
@@ -47,6 +48,7 @@ module RuboCop
|
|
47
48
|
|
48
49
|
output.puts
|
49
50
|
end
|
51
|
+
# rubocop:enable Metrics/AbcSize
|
50
52
|
|
51
53
|
def ordered_offense_counts(offense_counts)
|
52
54
|
Hash[offense_counts.sort_by { |k, v| [-v, k] }]
|
data/lib/rubocop/node_pattern.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable Metrics/ClassLength
|
4
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
5
|
-
|
3
|
+
# rubocop:disable Metrics/ClassLength, Metrics/CyclomaticComplexity
|
6
4
|
module RuboCop
|
7
5
|
# This class performs a pattern-matching operation on an AST node.
|
8
6
|
#
|
@@ -98,19 +96,26 @@ module RuboCop
|
|
98
96
|
# @private
|
99
97
|
# Builds Ruby code which implements a pattern
|
100
98
|
class Compiler
|
101
|
-
|
102
|
-
|
103
|
-
META
|
104
|
-
NUMBER
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
99
|
+
SYMBOL = %r{:(?:[\w+@*/?!<>=~|%^-]+|\[\]=?)}
|
100
|
+
IDENTIFIER = /[a-zA-Z_-]/
|
101
|
+
META = /\(|\)|\{|\}|\[|\]|\$\.\.\.|\$|!|\^|\.\.\./
|
102
|
+
NUMBER = /-?\d+(?:\.\d+)?/
|
103
|
+
STRING = /".+?"/
|
104
|
+
METHOD_NAME = /\#?#{IDENTIFIER}+[\!\?]?\(?/
|
105
|
+
PARAM_NUMBER = /%\d*/
|
106
|
+
|
107
|
+
SEPARATORS = /[\s]+/
|
108
|
+
TOKENS = Regexp.union(META, PARAM_NUMBER, NUMBER,
|
109
|
+
METHOD_NAME, SYMBOL, STRING)
|
110
|
+
|
111
|
+
TOKEN = /\G(?:#{SEPARATORS}|#{TOKENS}|.)/
|
112
|
+
|
113
|
+
NODE = /\A#{IDENTIFIER}+\Z/
|
114
|
+
PREDICATE = /\A#{IDENTIFIER}+\?\(?\Z/
|
115
|
+
WILDCARD = /\A_#{IDENTIFIER}*\Z/
|
116
|
+
FUNCALL = /\A\##{METHOD_NAME}/
|
117
|
+
LITERAL = /\A(?:#{SYMBOL}|#{NUMBER}|#{STRING})\Z/
|
118
|
+
PARAM = /\A#{PARAM_NUMBER}\Z/
|
114
119
|
CLOSING = /\A(?:\)|\}|\])\Z/
|
115
120
|
|
116
121
|
attr_reader :match_code
|
@@ -128,9 +133,11 @@ module RuboCop
|
|
128
133
|
end
|
129
134
|
|
130
135
|
def run(node_var)
|
131
|
-
tokens =
|
132
|
-
|
136
|
+
tokens =
|
137
|
+
@string.scan(TOKEN).reject { |token| token =~ /\A#{SEPARATORS}\Z/ }
|
138
|
+
|
133
139
|
@match_code = compile_expr(tokens, node_var, false)
|
140
|
+
|
134
141
|
fail_due_to('unbalanced pattern') unless tokens.empty?
|
135
142
|
end
|
136
143
|
|
@@ -158,7 +165,7 @@ module RuboCop
|
|
158
165
|
when PARAM then compile_param(cur_node, token[1..-1], seq_head)
|
159
166
|
when CLOSING then fail_due_to("#{token} in invalid position")
|
160
167
|
when nil then fail_due_to('pattern ended prematurely')
|
161
|
-
else
|
168
|
+
else fail_due_to("invalid token #{token.inspect}")
|
162
169
|
end
|
163
170
|
end
|
164
171
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
@@ -336,7 +343,8 @@ module RuboCop
|
|
336
343
|
else
|
337
344
|
n = @unify[name] = next_temp_value
|
338
345
|
# double assign to temp#{n} to avoid "assigned but unused variable"
|
339
|
-
"(temp#{n} =
|
346
|
+
"(temp#{n} = #{cur_node}#{'.type' if seq_head}; " \
|
347
|
+
"temp#{n} = temp#{n}; true)"
|
340
348
|
end
|
341
349
|
end
|
342
350
|
|
@@ -433,11 +441,17 @@ module RuboCop
|
|
433
441
|
params.empty? ? '' : ",#{params}"
|
434
442
|
end
|
435
443
|
|
444
|
+
def emit_guard_clause
|
445
|
+
<<-RUBY
|
446
|
+
return unless node.is_a?(RuboCop::AST::Node)
|
447
|
+
RUBY
|
448
|
+
end
|
449
|
+
|
436
450
|
def emit_method_code
|
437
|
-
<<-
|
438
|
-
return
|
451
|
+
<<-RUBY
|
452
|
+
return unless #{@match_code}
|
439
453
|
block_given? ? yield(#{emit_capture_list}) : (return #{emit_retval})
|
440
|
-
|
454
|
+
RUBY
|
441
455
|
end
|
442
456
|
|
443
457
|
def fail_due_to(message)
|
@@ -447,7 +461,7 @@ module RuboCop
|
|
447
461
|
def with_temp_node(cur_node)
|
448
462
|
with_temp_variable do |temp_var|
|
449
463
|
# double assign to temp#{n} to avoid "assigned but unused variable"
|
450
|
-
yield "#{temp_var} = #{temp_var} = #{
|
464
|
+
yield "#{temp_var} = #{cur_node}; #{temp_var} = #{temp_var}", temp_var
|
451
465
|
end
|
452
466
|
end
|
453
467
|
|
@@ -459,6 +473,7 @@ module RuboCop
|
|
459
473
|
@temps += 1
|
460
474
|
end
|
461
475
|
end
|
476
|
+
private_constant :Compiler
|
462
477
|
|
463
478
|
# Helpers for defining methods based on a pattern string
|
464
479
|
module Macros
|
@@ -470,9 +485,10 @@ module RuboCop
|
|
470
485
|
# If the node matches, and no block is provided, the new method will
|
471
486
|
# return the captures, or `true` if there were none.
|
472
487
|
def def_node_matcher(method_name, pattern_str)
|
473
|
-
compiler =
|
474
|
-
src = "def #{method_name}(node" \
|
488
|
+
compiler = Compiler.new(pattern_str, 'node')
|
489
|
+
src = "def #{method_name}(node = self" \
|
475
490
|
"#{compiler.emit_trailing_params});" \
|
491
|
+
"#{compiler.emit_guard_clause}" \
|
476
492
|
"#{compiler.emit_method_code};end"
|
477
493
|
|
478
494
|
location = caller_locations(1, 1).first
|
@@ -486,7 +502,7 @@ module RuboCop
|
|
486
502
|
# as soon as it finds a descendant which matches. Otherwise, it will
|
487
503
|
# yield all descendants which match.
|
488
504
|
def def_node_search(method_name, pattern_str)
|
489
|
-
compiler =
|
505
|
+
compiler = Compiler.new(pattern_str, 'node')
|
490
506
|
called_from = caller(1..1).first.split(':')
|
491
507
|
|
492
508
|
if method_name.to_s.end_with?('?')
|
@@ -519,7 +535,7 @@ module RuboCop
|
|
519
535
|
|
520
536
|
def node_search_body(method_name, trailing_params, prelude, match_code,
|
521
537
|
on_match)
|
522
|
-
<<-
|
538
|
+
<<-RUBY
|
523
539
|
def #{method_name}(node0#{trailing_params})
|
524
540
|
#{prelude}
|
525
541
|
node0.each_node do |node|
|
@@ -529,7 +545,7 @@ module RuboCop
|
|
529
545
|
end
|
530
546
|
nil
|
531
547
|
end
|
532
|
-
|
548
|
+
RUBY
|
533
549
|
end
|
534
550
|
end
|
535
551
|
|
@@ -541,3 +557,4 @@ module RuboCop
|
|
541
557
|
end
|
542
558
|
end
|
543
559
|
end
|
560
|
+
# rubocop:enable Metrics/ClassLength, Metrics/CyclomaticComplexity
|
data/lib/rubocop/options.rb
CHANGED
@@ -17,9 +17,6 @@ module RuboCop
|
|
17
17
|
def parse(command_line_args)
|
18
18
|
args = args_from_file.concat(args_from_env).concat(command_line_args)
|
19
19
|
define_options(args).parse!(args)
|
20
|
-
# The --no-color CLI option sets `color: false` so we don't want the
|
21
|
-
# `no_color` key, which is created automatically.
|
22
|
-
@options.delete(:no_color)
|
23
20
|
|
24
21
|
@validator.validate_compatibility
|
25
22
|
|
@@ -100,6 +97,7 @@ module RuboCop
|
|
100
97
|
end
|
101
98
|
|
102
99
|
option(opts, '--force-exclusion')
|
100
|
+
option(opts, '--ignore-parent-exclusion')
|
103
101
|
|
104
102
|
option(opts, '--force-default-config')
|
105
103
|
|
@@ -142,7 +140,7 @@ module RuboCop
|
|
142
140
|
option(opts, '-F', '--fail-fast')
|
143
141
|
option(opts, '-C', '--cache FLAG')
|
144
142
|
option(opts, '-d', '--debug')
|
145
|
-
option(opts, '-D', '--display-cop-names')
|
143
|
+
option(opts, '-D', '--[no-]display-cop-names')
|
146
144
|
option(opts, '-E', '--extra-details')
|
147
145
|
option(opts, '-S', '--display-style-guide')
|
148
146
|
option(opts, '-R', '--rails')
|
@@ -152,7 +150,7 @@ module RuboCop
|
|
152
150
|
end
|
153
151
|
option(opts, '-a', '--auto-correct')
|
154
152
|
|
155
|
-
option(opts, '--[no-]color')
|
153
|
+
option(opts, '--[no-]color')
|
156
154
|
|
157
155
|
option(opts, '-v', '--version')
|
158
156
|
option(opts, '-V', '--verbose-version')
|
@@ -178,7 +176,8 @@ module RuboCop
|
|
178
176
|
# e.g. [..., '--auto-correct', ...] to :auto_correct.
|
179
177
|
def long_opt_symbol(args)
|
180
178
|
long_opt = args.find { |arg| arg.start_with?('--') }
|
181
|
-
long_opt[2..-1].sub(
|
179
|
+
long_opt[2..-1].sub('[no-]', '').sub(/ .*/, '')
|
180
|
+
.tr('-', '_').gsub(/[\[\]]/, '').to_sym
|
182
181
|
end
|
183
182
|
end
|
184
183
|
|
@@ -303,6 +302,9 @@ module RuboCop
|
|
303
302
|
force_exclusion: ['Force excluding files specified in the',
|
304
303
|
'configuration `Exclude` even if they are',
|
305
304
|
'explicitly passed as arguments.'],
|
305
|
+
ignore_parent_exclusion:
|
306
|
+
['Prevent from inheriting AllCops/Exclude from',
|
307
|
+
'parent folders.'],
|
306
308
|
force_default_config: ['Use default configuration even if configuration',
|
307
309
|
'files are present in the directory tree.'],
|
308
310
|
format: ['Choose an output formatter. This option',
|
@@ -319,6 +321,8 @@ module RuboCop
|
|
319
321
|
' [fi]les',
|
320
322
|
' [o]ffenses',
|
321
323
|
' [w]orst',
|
324
|
+
' [t]ap',
|
325
|
+
' [q]uiet',
|
322
326
|
' custom formatter class name'],
|
323
327
|
out: ['Write output to a file instead of STDOUT.',
|
324
328
|
'This option applies to the previously',
|
@@ -336,14 +340,15 @@ module RuboCop
|
|
336
340
|
'(FLAG=false), default determined by',
|
337
341
|
'configuration parameter AllCops: UseCache.'],
|
338
342
|
debug: 'Display debug info.',
|
339
|
-
display_cop_names: 'Display cop names in offense messages.',
|
343
|
+
display_cop_names: ['Display cop names in offense messages.',
|
344
|
+
'Default is true.'],
|
340
345
|
display_style_guide: 'Display style guide URLs in offense messages.',
|
341
346
|
extra_details: 'Display extra details in offense messages.',
|
342
347
|
rails: 'Run extra Rails cops.',
|
343
348
|
lint: 'Run only lint cops.',
|
344
349
|
list_target_files: 'List all files RuboCop will inspect.',
|
345
350
|
auto_correct: 'Auto-correct offenses.',
|
346
|
-
|
351
|
+
color: 'Force color output on or off.',
|
347
352
|
version: 'Display version.',
|
348
353
|
verbose_version: 'Display verbose version.',
|
349
354
|
parallel: ['Use available CPUs to execute inspection in',
|