rubocop 0.78.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 +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +217 -0
- data/assets/logo.png +0 -0
- data/assets/output.html.erb +261 -0
- data/bin/console +10 -0
- data/bin/setup +7 -0
- data/config/default.yml +3963 -0
- data/exe/rubocop +17 -0
- data/lib/rubocop.rb +619 -0
- data/lib/rubocop/ast/builder.rb +82 -0
- data/lib/rubocop/ast/node.rb +644 -0
- data/lib/rubocop/ast/node/alias_node.rb +24 -0
- data/lib/rubocop/ast/node/and_node.rb +29 -0
- data/lib/rubocop/ast/node/args_node.rb +29 -0
- data/lib/rubocop/ast/node/array_node.rb +57 -0
- data/lib/rubocop/ast/node/block_node.rb +117 -0
- data/lib/rubocop/ast/node/break_node.rb +17 -0
- data/lib/rubocop/ast/node/case_node.rb +56 -0
- data/lib/rubocop/ast/node/class_node.rb +31 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/defined_node.rb +17 -0
- data/lib/rubocop/ast/node/ensure_node.rb +17 -0
- data/lib/rubocop/ast/node/float_node.rb +12 -0
- data/lib/rubocop/ast/node/for_node.rb +53 -0
- data/lib/rubocop/ast/node/hash_node.rb +109 -0
- data/lib/rubocop/ast/node/if_node.rb +175 -0
- data/lib/rubocop/ast/node/int_node.rb +12 -0
- data/lib/rubocop/ast/node/keyword_splat_node.rb +45 -0
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +43 -0
- data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +45 -0
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +125 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +261 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +114 -0
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -0
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +61 -0
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +35 -0
- data/lib/rubocop/ast/node/module_node.rb +24 -0
- data/lib/rubocop/ast/node/or_node.rb +29 -0
- data/lib/rubocop/ast/node/pair_node.rb +63 -0
- data/lib/rubocop/ast/node/range_node.rb +18 -0
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/resbody_node.rb +24 -0
- data/lib/rubocop/ast/node/retry_node.rb +17 -0
- data/lib/rubocop/ast/node/return_node.rb +24 -0
- data/lib/rubocop/ast/node/self_class_node.rb +24 -0
- data/lib/rubocop/ast/node/send_node.rb +13 -0
- data/lib/rubocop/ast/node/str_node.rb +16 -0
- data/lib/rubocop/ast/node/super_node.rb +21 -0
- data/lib/rubocop/ast/node/symbol_node.rb +12 -0
- data/lib/rubocop/ast/node/until_node.rb +35 -0
- data/lib/rubocop/ast/node/when_node.rb +53 -0
- data/lib/rubocop/ast/node/while_node.rb +35 -0
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/sexp.rb +16 -0
- data/lib/rubocop/ast/traversal.rb +183 -0
- data/lib/rubocop/cached_data.rb +58 -0
- data/lib/rubocop/cli.rb +127 -0
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -0
- data/lib/rubocop/cli/command/base.rb +33 -0
- data/lib/rubocop/cli/command/execute_runner.rb +76 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
- data/lib/rubocop/cli/command/show_cops.rb +73 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/comment_config.rb +201 -0
- data/lib/rubocop/config.rb +251 -0
- data/lib/rubocop/config_loader.rb +273 -0
- data/lib/rubocop/config_loader_resolver.rb +195 -0
- data/lib/rubocop/config_obsoletion.rb +275 -0
- data/lib/rubocop/config_store.rb +48 -0
- data/lib/rubocop/config_validator.rb +248 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +103 -0
- data/lib/rubocop/cop/badge.rb +73 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +73 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +64 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +69 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +73 -0
- data/lib/rubocop/cop/commissioner.rb +145 -0
- data/lib/rubocop/cop/cop.rb +296 -0
- data/lib/rubocop/cop/corrector.rb +172 -0
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +146 -0
- data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +53 -0
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +73 -0
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +136 -0
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +61 -0
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +68 -0
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +117 -0
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
- data/lib/rubocop/cop/correctors/space_corrector.rb +48 -0
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +43 -0
- data/lib/rubocop/cop/force.rb +42 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +85 -0
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
- data/lib/rubocop/cop/generator.rb +223 -0
- data/lib/rubocop/cop/generator/configuration_injector.rb +66 -0
- data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
- data/lib/rubocop/cop/ignored_node.rb +38 -0
- data/lib/rubocop/cop/internal_affairs.rb +9 -0
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +73 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +98 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +93 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +39 -0
- data/lib/rubocop/cop/layout/assignment_indentation.rb +55 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +244 -0
- data/lib/rubocop/cop/layout/block_end_newline.rb +62 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +161 -0
- data/lib/rubocop/cop/layout/class_structure.rb +340 -0
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +203 -0
- data/lib/rubocop/cop/layout/comment_indentation.rb +141 -0
- data/lib/rubocop/cop/layout/condition_position.rb +56 -0
- data/lib/rubocop/cop/layout/def_end_alignment.rb +74 -0
- data/lib/rubocop/cop/layout/dot_position.rb +105 -0
- data/lib/rubocop/cop/layout/else_alignment.rb +134 -0
- data/lib/rubocop/cop/layout/empty_comment.rb +151 -0
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +157 -0
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +64 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +151 -0
- data/lib/rubocop/cop/layout/empty_lines.rb +76 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +215 -0
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +45 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +41 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +88 -0
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +136 -0
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +45 -0
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +62 -0
- data/lib/rubocop/cop/layout/end_alignment.rb +189 -0
- data/lib/rubocop/cop/layout/end_of_line.rb +92 -0
- data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +249 -0
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +167 -0
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +45 -0
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +184 -0
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +37 -0
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +55 -0
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +46 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +100 -0
- data/lib/rubocop/cop/layout/hash_alignment.rb +362 -0
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +289 -0
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +256 -0
- data/lib/rubocop/cop/layout/indentation_consistency.rb +202 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +364 -0
- data/lib/rubocop/cop/layout/initial_indentation.rb +59 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +88 -0
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +53 -0
- data/lib/rubocop/cop/layout/line_length.rb +248 -0
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +118 -0
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +95 -0
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +146 -0
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +122 -0
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +50 -0
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +54 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +134 -0
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +220 -0
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +131 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +114 -0
- data/lib/rubocop/cop/layout/parameter_alignment.rb +118 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +191 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +47 -0
- data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
- data/lib/rubocop/cop/layout/space_after_method_name.rb +42 -0
- data/lib/rubocop/cop/layout/space_after_not.rb +40 -0
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +32 -0
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +169 -0
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +92 -0
- data/lib/rubocop/cop/layout/space_around_keyword.rb +244 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +207 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +136 -0
- data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +35 -0
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +67 -0
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +82 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +231 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +53 -0
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +248 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +207 -0
- data/lib/rubocop/cop/layout/space_inside_parens.rb +113 -0
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +65 -0
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +63 -0
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +150 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +65 -0
- data/lib/rubocop/cop/layout/tab.rb +75 -0
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +113 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +77 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +62 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +55 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +43 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +97 -0
- data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +72 -0
- data/lib/rubocop/cop/lint/debugger.rb +77 -0
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +111 -0
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +81 -0
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +38 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +239 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +42 -0
- data/lib/rubocop/cop/lint/else_layout.rb +66 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +60 -0
- data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +36 -0
- data/lib/rubocop/cop/lint/empty_when.rb +38 -0
- data/lib/rubocop/cop/lint/end_in_method.rb +40 -0
- data/lib/rubocop/cop/lint/ensure_return.rb +46 -0
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +164 -0
- data/lib/rubocop/cop/lint/flip_flop.rb +32 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +35 -0
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +159 -0
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +101 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +127 -0
- data/lib/rubocop/cop/lint/inherit_exception.rb +100 -0
- data/lib/rubocop/cop/lint/interpolation_check.rb +40 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +138 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +98 -0
- data/lib/rubocop/cop/lint/loop.rb +63 -0
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
- data/lib/rubocop/cop/lint/multiple_comparison.rb +48 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +104 -0
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +50 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +83 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +81 -0
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +86 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +64 -0
- data/lib/rubocop/cop/lint/percent_string_array.rb +73 -0
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +69 -0
- data/lib/rubocop/cop/lint/rand_one.rb +45 -0
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +263 -0
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +114 -0
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +50 -0
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +172 -0
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +59 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +82 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +83 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +66 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +46 -0
- data/lib/rubocop/cop/lint/rescue_type.rb +94 -0
- data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +65 -0
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +38 -0
- data/lib/rubocop/cop/lint/script_permission.rb +70 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
- data/lib/rubocop/cop/lint/shadowed_argument.rb +182 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +178 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +53 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +95 -0
- data/lib/rubocop/cop/lint/syntax.rb +59 -0
- data/lib/rubocop/cop/lint/to_json.rb +41 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +82 -0
- data/lib/rubocop/cop/lint/unified_integer.rb +45 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +99 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +165 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +86 -0
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +76 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +274 -0
- data/lib/rubocop/cop/lint/useless_assignment.rb +129 -0
- data/lib/rubocop/cop/lint/useless_comparison.rb +28 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +49 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +164 -0
- data/lib/rubocop/cop/lint/void.rb +151 -0
- data/lib/rubocop/cop/message_annotator.rb +129 -0
- data/lib/rubocop/cop/metrics/abc_size.rb +24 -0
- data/lib/rubocop/cop/metrics/block_length.rb +50 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +65 -0
- data/lib/rubocop/cop/metrics/class_length.rb +36 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +32 -0
- data/lib/rubocop/cop/metrics/method_length.rb +36 -0
- data/lib/rubocop/cop/metrics/module_length.rb +36 -0
- data/lib/rubocop/cop/metrics/parameter_lists.rb +54 -0
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +61 -0
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +84 -0
- data/lib/rubocop/cop/migration/department_name.rb +44 -0
- data/lib/rubocop/cop/mixin/alignment.rb +74 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +37 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
- data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
- data/lib/rubocop/cop/mixin/check_assignment.rb +44 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +190 -0
- data/lib/rubocop/cop/mixin/classish_length.rb +37 -0
- data/lib/rubocop/cop/mixin/code_length.rb +38 -0
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +98 -0
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +47 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +23 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +16 -0
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
- data/lib/rubocop/cop/mixin/def_node.rb +33 -0
- data/lib/rubocop/cop/mixin/documentation_comment.rb +52 -0
- data/lib/rubocop/cop/mixin/duplication.rb +46 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +172 -0
- data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +67 -0
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +46 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +53 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +147 -0
- data/lib/rubocop/cop/mixin/heredoc.rb +32 -0
- data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
- data/lib/rubocop/cop/mixin/integer_node.rb +14 -0
- data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +88 -0
- data/lib/rubocop/cop/mixin/match_range.rb +26 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +57 -0
- data/lib/rubocop/cop/mixin/method_preference.rb +31 -0
- data/lib/rubocop/cop/mixin/min_body_length.rb +21 -0
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +86 -0
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +255 -0
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +141 -0
- data/lib/rubocop/cop/mixin/negative_conditional.rb +32 -0
- data/lib/rubocop/cop/mixin/nil_methods.rb +25 -0
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +56 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +17 -0
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +37 -0
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/percent_literal.rb +38 -0
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +181 -0
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +53 -0
- data/lib/rubocop/cop/mixin/range_help.rb +117 -0
- data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +22 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +55 -0
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +49 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +71 -0
- data/lib/rubocop/cop/mixin/string_help.rb +35 -0
- data/lib/rubocop/cop/mixin/string_literals_help.rb +23 -0
- data/lib/rubocop/cop/mixin/surrounding_space.rb +146 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
- data/lib/rubocop/cop/mixin/too_many_lines.rb +35 -0
- data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +221 -0
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +111 -0
- data/lib/rubocop/cop/mixin/unused_argument.rb +33 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +72 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +43 -0
- data/lib/rubocop/cop/naming/block_parameter_name.rb +49 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/naming/constant_name.rb +81 -0
- data/lib/rubocop/cop/naming/file_name.rb +212 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +55 -0
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
- data/lib/rubocop/cop/naming/method_name.rb +53 -0
- data/lib/rubocop/cop/naming/method_parameter_name.rb +58 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +108 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
- data/lib/rubocop/cop/naming/variable_name.rb +52 -0
- data/lib/rubocop/cop/naming/variable_number.rb +61 -0
- data/lib/rubocop/cop/offense.rb +216 -0
- data/lib/rubocop/cop/registry.rb +211 -0
- data/lib/rubocop/cop/security/eval.rb +31 -0
- data/lib/rubocop/cop/security/json_load.rb +46 -0
- data/lib/rubocop/cop/security/marshal_load.rb +39 -0
- data/lib/rubocop/cop/security/open.rb +71 -0
- data/lib/rubocop/cop/security/yaml_load.rb +37 -0
- data/lib/rubocop/cop/severity.rb +77 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +112 -0
- data/lib/rubocop/cop/style/alias.rb +147 -0
- data/lib/rubocop/cop/style/and_or.rb +146 -0
- data/lib/rubocop/cop/style/array_join.rb +39 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +61 -0
- data/lib/rubocop/cop/style/attr.rb +70 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +51 -0
- data/lib/rubocop/cop/style/bare_percent_literals.rb +78 -0
- data/lib/rubocop/cop/style/begin_block.rb +22 -0
- data/lib/rubocop/cop/style/block_comments.rb +70 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +331 -0
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +209 -0
- data/lib/rubocop/cop/style/case_equality.rb +30 -0
- data/lib/rubocop/cop/style/character_literal.rb +53 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +151 -0
- data/lib/rubocop/cop/style/class_check.rb +59 -0
- data/lib/rubocop/cop/style/class_methods.rb +60 -0
- data/lib/rubocop/cop/style/class_vars.rb +48 -0
- data/lib/rubocop/cop/style/collection_methods.rb +77 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +48 -0
- data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
- data/lib/rubocop/cop/style/command_literal.rb +187 -0
- data/lib/rubocop/cop/style/comment_annotation.rb +97 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +73 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +668 -0
- data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
- data/lib/rubocop/cop/style/copyright.rb +99 -0
- data/lib/rubocop/cop/style/date_time.rb +77 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +57 -0
- data/lib/rubocop/cop/style/dir.rb +48 -0
- data/lib/rubocop/cop/style/documentation.rb +97 -0
- data/lib/rubocop/cop/style/documentation_method.rb +125 -0
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
- data/lib/rubocop/cop/style/double_negation.rb +35 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +58 -0
- data/lib/rubocop/cop/style/each_with_object.rb +110 -0
- data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +107 -0
- data/lib/rubocop/cop/style/empty_else.rb +175 -0
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
- data/lib/rubocop/cop/style/empty_literal.rb +123 -0
- data/lib/rubocop/cop/style/empty_method.rb +115 -0
- data/lib/rubocop/cop/style/encoding.rb +56 -0
- data/lib/rubocop/cop/style/end_block.rb +25 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
- data/lib/rubocop/cop/style/even_odd.rb +58 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +194 -0
- data/lib/rubocop/cop/style/float_division.rb +94 -0
- data/lib/rubocop/cop/style/for.rb +88 -0
- data/lib/rubocop/cop/style/format_string.rb +127 -0
- data/lib/rubocop/cop/style/format_string_token.rb +121 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +159 -0
- data/lib/rubocop/cop/style/global_vars.rb +80 -0
- data/lib/rubocop/cop/style/guard_clause.rb +122 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +214 -0
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +130 -0
- data/lib/rubocop/cop/style/if_inside_else.rb +87 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +169 -0
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +39 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +30 -0
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +32 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +128 -0
- data/lib/rubocop/cop/style/inline_comment.rb +34 -0
- data/lib/rubocop/cop/style/inverse_methods.rb +193 -0
- data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
- data/lib/rubocop/cop/style/lambda.rb +131 -0
- data/lib/rubocop/cop/style/lambda_call.rb +93 -0
- data/lib/rubocop/cop/style/line_end_concatenation.rb +125 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +388 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +77 -0
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +46 -0
- data/lib/rubocop/cop/style/method_def_parentheses.rb +166 -0
- data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
- data/lib/rubocop/cop/style/min_max.rb +68 -0
- data/lib/rubocop/cop/style/missing_else.rb +180 -0
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
- data/lib/rubocop/cop/style/mixin_grouping.rb +148 -0
- data/lib/rubocop/cop/style/mixin_usage.rb +90 -0
- data/lib/rubocop/cop/style/module_function.rb +104 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +40 -0
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +50 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +94 -0
- data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +38 -0
- data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +92 -0
- data/lib/rubocop/cop/style/mutable_constant.rb +174 -0
- data/lib/rubocop/cop/style/negated_if.rb +99 -0
- data/lib/rubocop/cop/style/negated_unless.rb +89 -0
- data/lib/rubocop/cop/style/negated_while.rb +48 -0
- data/lib/rubocop/cop/style/nested_modifier.rb +107 -0
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +67 -0
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +32 -0
- data/lib/rubocop/cop/style/next.rb +244 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +75 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +136 -0
- data/lib/rubocop/cop/style/not.rb +82 -0
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +124 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +114 -0
- data/lib/rubocop/cop/style/numeric_predicate.rb +137 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +101 -0
- data/lib/rubocop/cop/style/option_hash.rb +55 -0
- data/lib/rubocop/cop/style/optional_arguments.rb +58 -0
- data/lib/rubocop/cop/style/or_assignment.rb +95 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +287 -0
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +117 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +127 -0
- data/lib/rubocop/cop/style/percent_q_literals.rb +73 -0
- data/lib/rubocop/cop/style/perl_backrefs.rb +38 -0
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +75 -0
- data/lib/rubocop/cop/style/proc.rb +34 -0
- data/lib/rubocop/cop/style/raise_args.rb +145 -0
- data/lib/rubocop/cop/style/random_with_offset.rb +158 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +91 -0
- data/lib/rubocop/cop/style/redundant_capital_w.rb +51 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +112 -0
- data/lib/rubocop/cop/style/redundant_conditional.rb +97 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +60 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +67 -0
- data/lib/rubocop/cop/style/redundant_interpolation.rb +98 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +231 -0
- data/lib/rubocop/cop/style/redundant_percent_q.rb +112 -0
- data/lib/rubocop/cop/style/redundant_return.rb +171 -0
- data/lib/rubocop/cop/style/redundant_self.rb +171 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +165 -0
- data/lib/rubocop/cop/style/redundant_sort_by.rb +50 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +228 -0
- data/lib/rubocop/cop/style/rescue_modifier.rb +73 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
- data/lib/rubocop/cop/style/return_nil.rb +89 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +275 -0
- data/lib/rubocop/cop/style/sample.rb +144 -0
- data/lib/rubocop/cop/style/self_assignment.rb +97 -0
- data/lib/rubocop/cop/style/semicolon.rb +101 -0
- data/lib/rubocop/cop/style/send.rb +31 -0
- data/lib/rubocop/cop/style/signal_exception.rb +211 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +95 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +83 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +211 -0
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +86 -0
- data/lib/rubocop/cop/style/stderr_puts.rb +61 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
- data/lib/rubocop/cop/style/string_literals.rb +129 -0
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +49 -0
- data/lib/rubocop/cop/style/string_methods.rb +46 -0
- data/lib/rubocop/cop/style/strip.rb +46 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +39 -0
- data/lib/rubocop/cop/style/symbol_array.rb +119 -0
- data/lib/rubocop/cop/style/symbol_literal.rb +32 -0
- data/lib/rubocop/cop/style/symbol_proc.rb +110 -0
- data/lib/rubocop/cop/style/ternary_parentheses.rb +223 -0
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +43 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +54 -0
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +43 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +96 -0
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +58 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +56 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +167 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +191 -0
- data/lib/rubocop/cop/style/unless_else.rb +55 -0
- data/lib/rubocop/cop/style/unpack_first.rb +65 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +48 -0
- data/lib/rubocop/cop/style/when_then.rb +37 -0
- data/lib/rubocop/cop/style/while_until_do.rb +59 -0
- data/lib/rubocop/cop/style/while_until_modifier.rb +61 -0
- data/lib/rubocop/cop/style/word_array.rb +102 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +141 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +117 -0
- data/lib/rubocop/cop/team.rb +196 -0
- data/lib/rubocop/cop/util.rb +127 -0
- data/lib/rubocop/cop/utils/format_string.rb +120 -0
- data/lib/rubocop/cop/variable_force.rb +466 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +96 -0
- data/lib/rubocop/cop/variable_force/branch.rb +322 -0
- data/lib/rubocop/cop/variable_force/branchable.rb +23 -0
- data/lib/rubocop/cop/variable_force/reference.rb +49 -0
- data/lib/rubocop/cop/variable_force/scope.rb +109 -0
- data/lib/rubocop/cop/variable_force/variable.rb +117 -0
- data/lib/rubocop/cop/variable_force/variable_table.rb +129 -0
- data/lib/rubocop/core_ext/string.rb +23 -0
- data/lib/rubocop/error.rb +34 -0
- data/lib/rubocop/file_finder.rb +42 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
- data/lib/rubocop/formatter/base_formatter.rb +123 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +57 -0
- data/lib/rubocop/formatter/colorizable.rb +41 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +224 -0
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +57 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +37 -0
- data/lib/rubocop/formatter/file_list_formatter.rb +20 -0
- data/lib/rubocop/formatter/formatter_set.rb +106 -0
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +80 -0
- data/lib/rubocop/formatter/html_formatter.rb +141 -0
- data/lib/rubocop/formatter/json_formatter.rb +81 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +74 -0
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/progress_formatter.rb +63 -0
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +138 -0
- data/lib/rubocop/formatter/tap_formatter.rb +82 -0
- data/lib/rubocop/formatter/text_util.rb +20 -0
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +62 -0
- data/lib/rubocop/magic_comment.rb +214 -0
- data/lib/rubocop/name_similarity.rb +21 -0
- data/lib/rubocop/node_pattern.rb +801 -0
- data/lib/rubocop/options.rb +460 -0
- data/lib/rubocop/path_util.rb +85 -0
- data/lib/rubocop/platform.rb +11 -0
- data/lib/rubocop/processed_source.rb +216 -0
- data/lib/rubocop/rake_task.rb +80 -0
- data/lib/rubocop/remote_config.rb +106 -0
- data/lib/rubocop/result_cache.rb +207 -0
- data/lib/rubocop/rspec/cop_helper.rb +94 -0
- data/lib/rubocop/rspec/expect_offense.rb +240 -0
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +28 -0
- data/lib/rubocop/rspec/shared_contexts.rb +90 -0
- data/lib/rubocop/rspec/support.rb +13 -0
- data/lib/rubocop/runner.rb +379 -0
- data/lib/rubocop/string_interpreter.rb +57 -0
- data/lib/rubocop/string_util.rb +14 -0
- data/lib/rubocop/target_finder.rb +196 -0
- data/lib/rubocop/token.rb +114 -0
- data/lib/rubocop/version.rb +21 -0
- data/lib/rubocop/warning.rb +11 -0
- data/lib/rubocop/yaml_duplication_checker.rb +39 -0
- metadata +782 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
# Commissioner class is responsible for processing the AST and delegating
|
|
6
|
+
# work to the specified cops.
|
|
7
|
+
class Commissioner
|
|
8
|
+
include RuboCop::AST::Traversal
|
|
9
|
+
|
|
10
|
+
attr_reader :errors
|
|
11
|
+
|
|
12
|
+
def initialize(cops, forces = [], options = {})
|
|
13
|
+
@cops = cops
|
|
14
|
+
@forces = forces
|
|
15
|
+
@options = options
|
|
16
|
+
@callbacks = {}
|
|
17
|
+
|
|
18
|
+
reset_errors
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Create methods like :on_send, :on_super, etc. They will be called
|
|
22
|
+
# during AST traversal and try to call corresponding methods on cops.
|
|
23
|
+
# A call to `super` is used
|
|
24
|
+
# to continue iterating over the children of a node.
|
|
25
|
+
# However, if we know that a certain node type (like `int`) never has
|
|
26
|
+
# child nodes, there is no reason to pay the cost of calling `super`.
|
|
27
|
+
Parser::Meta::NODE_TYPES.each do |node_type|
|
|
28
|
+
method_name = :"on_#{node_type}"
|
|
29
|
+
next unless method_defined?(method_name)
|
|
30
|
+
|
|
31
|
+
define_method(method_name) do |node|
|
|
32
|
+
trigger_responding_cops(method_name, node)
|
|
33
|
+
super(node) unless NO_CHILD_NODES.include?(node_type)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def investigate(processed_source)
|
|
38
|
+
reset_errors
|
|
39
|
+
remove_irrelevant_cops(processed_source.file_path)
|
|
40
|
+
reset_callbacks
|
|
41
|
+
prepare(processed_source)
|
|
42
|
+
invoke_custom_processing(@cops, processed_source)
|
|
43
|
+
invoke_custom_processing(@forces, processed_source)
|
|
44
|
+
walk(processed_source.ast) unless processed_source.blank?
|
|
45
|
+
invoke_custom_post_walk_processing(@cops, processed_source)
|
|
46
|
+
@cops.flat_map(&:offenses)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def trigger_responding_cops(callback, node)
|
|
52
|
+
@callbacks[callback] ||= @cops.select do |cop|
|
|
53
|
+
cop.respond_to?(callback)
|
|
54
|
+
end
|
|
55
|
+
@callbacks[callback].each do |cop|
|
|
56
|
+
with_cop_error_handling(cop, node) do
|
|
57
|
+
cop.send(callback, node)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def reset_errors
|
|
63
|
+
@errors = []
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def remove_irrelevant_cops(filename)
|
|
67
|
+
@cops.reject! do |cop|
|
|
68
|
+
cop.excluded_file?(filename) ||
|
|
69
|
+
!support_target_ruby_version?(cop) ||
|
|
70
|
+
!support_target_rails_version?(cop)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def support_target_ruby_version?(cop)
|
|
75
|
+
return true unless cop.class.respond_to?(:support_target_ruby_version?)
|
|
76
|
+
|
|
77
|
+
cop.class.support_target_ruby_version?(cop.target_ruby_version)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def support_target_rails_version?(cop)
|
|
81
|
+
return true unless cop.class.respond_to?(:support_target_rails_version?)
|
|
82
|
+
|
|
83
|
+
cop.class.support_target_rails_version?(cop.target_rails_version)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def reset_callbacks
|
|
87
|
+
@callbacks.clear
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# TODO: Bad design.
|
|
91
|
+
def prepare(processed_source)
|
|
92
|
+
@cops.each { |cop| cop.processed_source = processed_source }
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# There are cops/forces that require their own custom processing.
|
|
96
|
+
# If they define the #investigate method, all input parameters passed
|
|
97
|
+
# to the commissioner will be passed to the cop too in order to do
|
|
98
|
+
# its own processing.
|
|
99
|
+
#
|
|
100
|
+
# These custom processors are invoked before the AST traversal,
|
|
101
|
+
# so they can build initial state that is later used by callbacks
|
|
102
|
+
# during the AST traversal.
|
|
103
|
+
def invoke_custom_processing(cops_or_forces, processed_source)
|
|
104
|
+
cops_or_forces.each do |cop|
|
|
105
|
+
next unless cop.respond_to?(:investigate)
|
|
106
|
+
|
|
107
|
+
with_cop_error_handling(cop) do
|
|
108
|
+
cop.investigate(processed_source)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# There are cops that require their own custom processing **after**
|
|
114
|
+
# the AST traversal. By performing the walk before invoking these
|
|
115
|
+
# custom processors, we allow these cops to build their own
|
|
116
|
+
# state during the primary AST traversal instead of performing their
|
|
117
|
+
# own AST traversals. Minimizing the number of walks is more efficient.
|
|
118
|
+
#
|
|
119
|
+
# If they define the #investigate_post_walk method, all input parameters
|
|
120
|
+
# passed to the commissioner will be passed to the cop too in order to do
|
|
121
|
+
# its own processing.
|
|
122
|
+
def invoke_custom_post_walk_processing(cops, processed_source)
|
|
123
|
+
cops.each do |cop|
|
|
124
|
+
next unless cop.respond_to?(:investigate_post_walk)
|
|
125
|
+
|
|
126
|
+
with_cop_error_handling(cop) do
|
|
127
|
+
cop.investigate_post_walk(processed_source)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Allow blind rescues here, since we're absorbing and packaging or
|
|
133
|
+
# re-raising exceptions that can be raised from within the individual
|
|
134
|
+
# cops' `#investigate` methods.
|
|
135
|
+
def with_cop_error_handling(cop, node = nil)
|
|
136
|
+
yield
|
|
137
|
+
rescue StandardError => e
|
|
138
|
+
raise e if @options[:raise_error]
|
|
139
|
+
|
|
140
|
+
err = ErrorWithAnalyzedFileLocation.new(cause: e, node: node, cop: cop)
|
|
141
|
+
@errors << err
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
module RuboCop
|
|
6
|
+
module Cop
|
|
7
|
+
# A scaffold for concrete cops.
|
|
8
|
+
#
|
|
9
|
+
# The Cop class is meant to be extended.
|
|
10
|
+
#
|
|
11
|
+
# Cops track offenses and can autocorrect them on the fly.
|
|
12
|
+
#
|
|
13
|
+
# A commissioner object is responsible for traversing the AST and invoking
|
|
14
|
+
# the specific callbacks on each cop.
|
|
15
|
+
# If a cop needs to do its own processing of the AST or depends on
|
|
16
|
+
# something else, it should define the `#investigate` method and do
|
|
17
|
+
# the processing there.
|
|
18
|
+
#
|
|
19
|
+
# @example
|
|
20
|
+
#
|
|
21
|
+
# class CustomCop < Cop
|
|
22
|
+
# def investigate(processed_source)
|
|
23
|
+
# # Do custom processing
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
class Cop
|
|
27
|
+
extend RuboCop::AST::Sexp
|
|
28
|
+
extend NodePattern::Macros
|
|
29
|
+
include RuboCop::AST::Sexp
|
|
30
|
+
include Util
|
|
31
|
+
include IgnoredNode
|
|
32
|
+
include AutocorrectLogic
|
|
33
|
+
|
|
34
|
+
Correction = Struct.new(:lambda, :node, :cop) do
|
|
35
|
+
def call(corrector)
|
|
36
|
+
lambda.call(corrector)
|
|
37
|
+
rescue StandardError => e
|
|
38
|
+
raise ErrorWithAnalyzedFileLocation.new(
|
|
39
|
+
cause: e, node: node, cop: cop
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
attr_reader :config, :offenses, :corrections
|
|
45
|
+
attr_accessor :processed_source # TODO: Bad design.
|
|
46
|
+
|
|
47
|
+
@registry = Registry.new
|
|
48
|
+
|
|
49
|
+
class << self
|
|
50
|
+
attr_reader :registry
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.all
|
|
54
|
+
registry.without_department(:Test).cops
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.qualified_cop_name(name, origin)
|
|
58
|
+
registry.qualified_cop_name(name, origin)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.inherited(subclass)
|
|
62
|
+
registry.enlist(subclass)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.badge
|
|
66
|
+
@badge ||= Badge.for(name)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.cop_name
|
|
70
|
+
badge.to_s
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def self.department
|
|
74
|
+
badge.department
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.lint?
|
|
78
|
+
department == :Lint
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Returns true if the cop name or the cop namespace matches any of the
|
|
82
|
+
# given names.
|
|
83
|
+
def self.match?(given_names)
|
|
84
|
+
return false unless given_names
|
|
85
|
+
|
|
86
|
+
given_names.include?(cop_name) ||
|
|
87
|
+
given_names.include?(department.to_s)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# List of cops that should not try to autocorrect at the same
|
|
91
|
+
# time as this cop
|
|
92
|
+
#
|
|
93
|
+
# @return [Array<RuboCop::Cop::Cop>]
|
|
94
|
+
#
|
|
95
|
+
# @api public
|
|
96
|
+
def self.autocorrect_incompatible_with
|
|
97
|
+
[]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def initialize(config = nil, options = nil)
|
|
101
|
+
@config = config || Config.new
|
|
102
|
+
@options = options || { debug: false }
|
|
103
|
+
|
|
104
|
+
@offenses = []
|
|
105
|
+
@corrections = []
|
|
106
|
+
@corrected_nodes = {}
|
|
107
|
+
@corrected_nodes.compare_by_identity
|
|
108
|
+
@processed_source = nil
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def join_force?(_force_class)
|
|
112
|
+
false
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def cop_config
|
|
116
|
+
# Use department configuration as basis, but let individual cop
|
|
117
|
+
# configuration override.
|
|
118
|
+
@cop_config ||= @config.for_cop(self.class.department.to_s)
|
|
119
|
+
.merge(@config.for_cop(self))
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def message(_node = nil)
|
|
123
|
+
self.class::MSG
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def add_offense(node, location: :expression, message: nil, severity: nil)
|
|
127
|
+
loc = find_location(node, location)
|
|
128
|
+
|
|
129
|
+
return if duplicate_location?(loc)
|
|
130
|
+
|
|
131
|
+
severity = find_severity(node, severity)
|
|
132
|
+
message = find_message(node, message)
|
|
133
|
+
|
|
134
|
+
status = enabled_line?(loc.line) ? correct(node) : :disabled
|
|
135
|
+
|
|
136
|
+
@offenses << Offense.new(severity, loc, message, name, status)
|
|
137
|
+
yield if block_given? && status != :disabled
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def find_location(node, loc)
|
|
141
|
+
# Location can be provided as a symbol, e.g.: `:keyword`
|
|
142
|
+
loc.is_a?(Symbol) ? node.loc.public_send(loc) : loc
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def duplicate_location?(location)
|
|
146
|
+
@offenses.any? { |o| o.location == location }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def correct(node)
|
|
150
|
+
reason = reason_to_not_correct(node)
|
|
151
|
+
return reason if reason
|
|
152
|
+
|
|
153
|
+
@corrected_nodes[node] = true
|
|
154
|
+
if support_autocorrect?
|
|
155
|
+
correction = autocorrect(node)
|
|
156
|
+
return :uncorrected unless correction
|
|
157
|
+
|
|
158
|
+
@corrections << Correction.new(correction, node, self)
|
|
159
|
+
:corrected
|
|
160
|
+
elsif disable_uncorrectable?
|
|
161
|
+
disable_uncorrectable(node)
|
|
162
|
+
:corrected_with_todo
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def reason_to_not_correct(node)
|
|
167
|
+
return :unsupported unless correctable?
|
|
168
|
+
return :uncorrected unless autocorrect?
|
|
169
|
+
return :already_corrected if @corrected_nodes.key?(node)
|
|
170
|
+
|
|
171
|
+
nil
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def disable_uncorrectable(node)
|
|
175
|
+
return unless node
|
|
176
|
+
|
|
177
|
+
@disabled_lines ||= {}
|
|
178
|
+
line = node.location.line
|
|
179
|
+
return if @disabled_lines.key?(line)
|
|
180
|
+
|
|
181
|
+
@disabled_lines[line] = true
|
|
182
|
+
@corrections << Correction.new(disable_offense(node), node, self)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def config_to_allow_offenses
|
|
186
|
+
Formatter::DisabledConfigFormatter
|
|
187
|
+
.config_to_allow_offenses[cop_name] ||= {}
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def config_to_allow_offenses=(hash)
|
|
191
|
+
Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name] =
|
|
192
|
+
hash
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def target_ruby_version
|
|
196
|
+
@config.target_ruby_version
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def target_rails_version
|
|
200
|
+
@config.target_rails_version
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def parse(source, path = nil)
|
|
204
|
+
ProcessedSource.new(source, target_ruby_version, path)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def cop_name
|
|
208
|
+
@cop_name ||= self.class.cop_name
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
alias name cop_name
|
|
212
|
+
|
|
213
|
+
def relevant_file?(file)
|
|
214
|
+
file_name_matches_any?(file, 'Include', true) &&
|
|
215
|
+
!file_name_matches_any?(file, 'Exclude', false)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def excluded_file?(file)
|
|
219
|
+
!relevant_file?(file)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# This method should be overridden when a cop's behavior depends
|
|
223
|
+
# on state that lives outside of these locations:
|
|
224
|
+
#
|
|
225
|
+
# (1) the file under inspection
|
|
226
|
+
# (2) the cop's source code
|
|
227
|
+
# (3) the config (eg a .rubocop.yml file)
|
|
228
|
+
#
|
|
229
|
+
# For example, some cops may want to look at other parts of
|
|
230
|
+
# the codebase being inspected to find violations. A cop may
|
|
231
|
+
# use the presence or absence of file `foo.rb` to determine
|
|
232
|
+
# whether a certain violation exists in `bar.rb`.
|
|
233
|
+
#
|
|
234
|
+
# Overriding this method allows the cop to indicate to RuboCop's
|
|
235
|
+
# ResultCache system when those external dependencies change,
|
|
236
|
+
# ie when the ResultCache should be invalidated.
|
|
237
|
+
def external_dependency_checksum
|
|
238
|
+
nil
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
private
|
|
242
|
+
|
|
243
|
+
def find_message(node, message)
|
|
244
|
+
annotate(message || message(node))
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def annotate(message)
|
|
248
|
+
RuboCop::Cop::MessageAnnotator.new(
|
|
249
|
+
config, cop_name, cop_config, @options
|
|
250
|
+
).annotate(message)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def file_name_matches_any?(file, parameter, default_result)
|
|
254
|
+
patterns = cop_config[parameter]
|
|
255
|
+
return default_result unless patterns
|
|
256
|
+
|
|
257
|
+
path = nil
|
|
258
|
+
patterns.any? do |pattern|
|
|
259
|
+
# Try to match the absolute path, as Exclude properties are absolute.
|
|
260
|
+
next true if match_path?(pattern, file)
|
|
261
|
+
|
|
262
|
+
# Try with relative path.
|
|
263
|
+
path ||= config.path_relative_to_config(file)
|
|
264
|
+
match_path?(pattern, path)
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def enabled_line?(line_number)
|
|
269
|
+
return true if @options[:ignore_disable_comments] || !@processed_source
|
|
270
|
+
|
|
271
|
+
@processed_source.comment_config.cop_enabled_at_line?(self, line_number)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def find_severity(_node, severity)
|
|
275
|
+
custom_severity || severity || default_severity
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def default_severity
|
|
279
|
+
self.class.lint? ? :warning : :convention
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def custom_severity
|
|
283
|
+
severity = cop_config['Severity']
|
|
284
|
+
return unless severity
|
|
285
|
+
|
|
286
|
+
if Severity::NAMES.include?(severity.to_sym)
|
|
287
|
+
severity.to_sym
|
|
288
|
+
else
|
|
289
|
+
message = "Warning: Invalid severity '#{severity}'. " \
|
|
290
|
+
"Valid severities are #{Severity::NAMES.join(', ')}."
|
|
291
|
+
warn(Rainbow(message).red)
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
# This class takes a source buffer and rewrite its source
|
|
6
|
+
# based on the different correction rules supplied.
|
|
7
|
+
#
|
|
8
|
+
# Important!
|
|
9
|
+
# The nodes modified by the corrections should be part of the
|
|
10
|
+
# AST of the source_buffer.
|
|
11
|
+
class Corrector
|
|
12
|
+
#
|
|
13
|
+
# @param source_buffer [Parser::Source::Buffer]
|
|
14
|
+
# @param corrections [Array(#call)]
|
|
15
|
+
# Array of Objects that respond to #call. They will receive the
|
|
16
|
+
# corrector itself and should use its method to modify the source.
|
|
17
|
+
#
|
|
18
|
+
# @example
|
|
19
|
+
#
|
|
20
|
+
# class AndOrCorrector
|
|
21
|
+
# def initialize(node)
|
|
22
|
+
# @node = node
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# def call(corrector)
|
|
26
|
+
# replacement = (@node.type == :and ? '&&' : '||')
|
|
27
|
+
# corrector.replace(@node.loc.operator, replacement)
|
|
28
|
+
# end
|
|
29
|
+
# end
|
|
30
|
+
#
|
|
31
|
+
# corrections = [AndOrCorrector.new(node)]
|
|
32
|
+
# corrector = Corrector.new(source_buffer, corrections)
|
|
33
|
+
def initialize(source_buffer, corrections = [])
|
|
34
|
+
@source_buffer = source_buffer
|
|
35
|
+
raise 'source_buffer should be a Parser::Source::Buffer' unless \
|
|
36
|
+
source_buffer.is_a? Parser::Source::Buffer
|
|
37
|
+
|
|
38
|
+
@corrections = corrections
|
|
39
|
+
@source_rewriter = Parser::Source::TreeRewriter.new(
|
|
40
|
+
source_buffer,
|
|
41
|
+
different_replacements: :raise,
|
|
42
|
+
swallowed_insertions: :raise,
|
|
43
|
+
crossing_deletions: :accept
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
@diagnostics = []
|
|
47
|
+
# Don't print warnings to stderr if corrections conflict with each other
|
|
48
|
+
@source_rewriter.diagnostics.consumer = lambda do |diagnostic|
|
|
49
|
+
@diagnostics << diagnostic
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
attr_reader :corrections, :diagnostics
|
|
54
|
+
|
|
55
|
+
# Does the actual rewrite and returns string corresponding to
|
|
56
|
+
# the rewritten source.
|
|
57
|
+
#
|
|
58
|
+
# @return [String]
|
|
59
|
+
def rewrite
|
|
60
|
+
@corrections.each do |correction|
|
|
61
|
+
begin
|
|
62
|
+
@source_rewriter.transaction do
|
|
63
|
+
correction.call(self)
|
|
64
|
+
end
|
|
65
|
+
rescue ErrorWithAnalyzedFileLocation => e
|
|
66
|
+
raise e unless e.cause.is_a?(::Parser::ClobberingError)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
@source_rewriter.process
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Removes the source range.
|
|
74
|
+
#
|
|
75
|
+
# @param [Parser::Source::Range] range
|
|
76
|
+
def remove(range)
|
|
77
|
+
validate_range range
|
|
78
|
+
@source_rewriter.remove(range)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Inserts new code before the given source range.
|
|
82
|
+
#
|
|
83
|
+
# @param [Parser::Source::Range] range
|
|
84
|
+
# @param [String] content
|
|
85
|
+
def insert_before(range, content)
|
|
86
|
+
validate_range range
|
|
87
|
+
# TODO: Fix Cops using bad ranges instead
|
|
88
|
+
if range.end_pos > @source_buffer.source.size
|
|
89
|
+
range = range.with(end_pos: @source_buffer.source.size)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
@source_rewriter.insert_before(range, content)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Inserts new code after the given source range.
|
|
96
|
+
#
|
|
97
|
+
# @param [Parser::Source::Range] range
|
|
98
|
+
# @param [String] content
|
|
99
|
+
def insert_after(range, content)
|
|
100
|
+
validate_range range
|
|
101
|
+
@source_rewriter.insert_after(range, content)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Replaces the code of the source range `range` with `content`.
|
|
105
|
+
#
|
|
106
|
+
# @param [Parser::Source::Range] range
|
|
107
|
+
# @param [String] content
|
|
108
|
+
def replace(range, content)
|
|
109
|
+
validate_range range
|
|
110
|
+
@source_rewriter.replace(range, content)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Removes `size` characters prior to the source range.
|
|
114
|
+
#
|
|
115
|
+
# @param [Parser::Source::Range] range
|
|
116
|
+
# @param [Integer] size
|
|
117
|
+
def remove_preceding(range, size)
|
|
118
|
+
validate_range range
|
|
119
|
+
to_remove = Parser::Source::Range.new(range.source_buffer,
|
|
120
|
+
range.begin_pos - size,
|
|
121
|
+
range.begin_pos)
|
|
122
|
+
@source_rewriter.remove(to_remove)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Removes `size` characters from the beginning of the given range.
|
|
126
|
+
# If `size` is greater than the size of `range`, the removed region can
|
|
127
|
+
# overrun the end of `range`.
|
|
128
|
+
#
|
|
129
|
+
# @param [Parser::Source::Range] range
|
|
130
|
+
# @param [Integer] size
|
|
131
|
+
def remove_leading(range, size)
|
|
132
|
+
validate_range range
|
|
133
|
+
to_remove = Parser::Source::Range.new(range.source_buffer,
|
|
134
|
+
range.begin_pos,
|
|
135
|
+
range.begin_pos + size)
|
|
136
|
+
@source_rewriter.remove(to_remove)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Removes `size` characters from the end of the given range.
|
|
140
|
+
# If `size` is greater than the size of `range`, the removed region can
|
|
141
|
+
# overrun the beginning of `range`.
|
|
142
|
+
#
|
|
143
|
+
# @param [Parser::Source::Range] range
|
|
144
|
+
# @param [Integer] size
|
|
145
|
+
def remove_trailing(range, size)
|
|
146
|
+
validate_range range
|
|
147
|
+
to_remove = Parser::Source::Range.new(range.source_buffer,
|
|
148
|
+
range.end_pos - size,
|
|
149
|
+
range.end_pos)
|
|
150
|
+
@source_rewriter.remove(to_remove)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
private
|
|
154
|
+
|
|
155
|
+
# :nodoc:
|
|
156
|
+
def validate_range(range)
|
|
157
|
+
buffer = range.source_buffer
|
|
158
|
+
return if buffer == @source_buffer
|
|
159
|
+
|
|
160
|
+
unless buffer.is_a?(Parser::Source::Buffer)
|
|
161
|
+
# actually this should be enforced by parser gem
|
|
162
|
+
raise 'Corrector expected range source buffer to be a ' \
|
|
163
|
+
"Parser::Source::Buffer, but got #{buffer.class}"
|
|
164
|
+
end
|
|
165
|
+
raise "Correction target buffer #{buffer.object_id} " \
|
|
166
|
+
"name:#{buffer.name.inspect}" \
|
|
167
|
+
" is not current #{@source_buffer.object_id} " \
|
|
168
|
+
"name:#{@source_buffer.name.inspect} under investigation"
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|