rubocop 0.75.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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 +3939 -0
- data/exe/rubocop +17 -0
- data/lib/rubocop.rb +608 -0
- data/lib/rubocop/ast/builder.rb +81 -0
- data/lib/rubocop/ast/node.rb +640 -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 +115 -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/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 +343 -0
- data/lib/rubocop/comment_config.rb +201 -0
- data/lib/rubocop/config.rb +244 -0
- data/lib/rubocop/config_loader.rb +273 -0
- data/lib/rubocop/config_loader_resolver.rb +194 -0
- data/lib/rubocop/config_obsoletion.rb +213 -0
- data/lib/rubocop/config_store.rb +48 -0
- data/lib/rubocop/config_validator.rb +239 -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 +137 -0
- data/lib/rubocop/cop/cop.rb +271 -0
- data/lib/rubocop/cop/corrector.rb +171 -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 +49 -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 +8 -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/align_arguments.rb +93 -0
- data/lib/rubocop/cop/layout/align_array.rb +39 -0
- data/lib/rubocop/cop/layout/align_hash.rb +358 -0
- data/lib/rubocop/cop/layout/align_parameters.rb +118 -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 +144 -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 +160 -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 +87 -0
- data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +45 -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/heredoc_argument_closing_parenthesis.rb +289 -0
- data/lib/rubocop/cop/layout/indent_assignment.rb +55 -0
- data/lib/rubocop/cop/layout/indent_first_argument.rb +247 -0
- data/lib/rubocop/cop/layout/indent_first_array_element.rb +167 -0
- data/lib/rubocop/cop/layout/indent_first_hash_element.rb +184 -0
- data/lib/rubocop/cop/layout/indent_first_parameter.rb +100 -0
- data/lib/rubocop/cop/layout/indent_heredoc.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_blank_lines.rb +53 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +88 -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/rescue_ensure_alignment.rb +189 -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 +232 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +182 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +119 -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 +80 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +228 -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_blank_lines.rb +113 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +61 -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_methods.rb +239 -0
- data/lib/rubocop/cop/lint/duplicated_key.rb +38 -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 +163 -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/handle_exceptions.rb +95 -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_compare.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_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_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 +66 -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/string_conversion_in_interpolation.rb +59 -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/unneeded_cop_disable_directive.rb +263 -0
- data/lib/rubocop/cop/lint/unneeded_cop_enable_directive.rb +116 -0
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +50 -0
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +172 -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 +240 -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/line_length.rb +321 -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 +67 -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.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/match_range.rb +26 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +56 -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/rescue_node.rb +22 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
- data/lib/rubocop/cop/mixin/safe_mode.rb +24 -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 +68 -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 +216 -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/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 +205 -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/predicate_name.rb +108 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
- data/lib/rubocop/cop/naming/uncommunicative_block_param_name.rb +49 -0
- data/lib/rubocop/cop/naming/uncommunicative_method_param_name.rb +58 -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 +205 -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 +62 -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 +95 -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 +124 -0
- data/lib/rubocop/cop/style/format_string_token.rb +119 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +149 -0
- data/lib/rubocop/cop/style/global_vars.rb +80 -0
- data/lib/rubocop/cop/style/guard_clause.rb +121 -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 +127 -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 +127 -0
- data/lib/rubocop/cop/style/inline_comment.rb +34 -0
- data/lib/rubocop/cop/style/inverse_methods.rb +187 -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 +121 -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 +158 -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 +105 -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 +124 -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 +110 -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_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_parentheses.rb +231 -0
- data/lib/rubocop/cop/style/redundant_return.rb +173 -0
- data/lib/rubocop/cop/style/redundant_self.rb +171 -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 +272 -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 +213 -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 +161 -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/unneeded_capital_w.rb +51 -0
- data/lib/rubocop/cop/style/unneeded_condition.rb +112 -0
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +98 -0
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +112 -0
- data/lib/rubocop/cop/style/unneeded_sort.rb +165 -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 +191 -0
- data/lib/rubocop/cop/util.rb +127 -0
- data/lib/rubocop/cop/utils/format_string.rb +128 -0
- data/lib/rubocop/cop/variable_force.rb +464 -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 +59 -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 +80 -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 +84 -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 +799 -0
- data/lib/rubocop/options.rb +454 -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 +79 -0
- data/lib/rubocop/remote_config.rb +106 -0
- data/lib/rubocop/result_cache.rb +191 -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 +358 -0
- data/lib/rubocop/string_interpreter.rb +57 -0
- data/lib/rubocop/string_util.rb +14 -0
- data/lib/rubocop/target_finder.rb +190 -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 +770 -0
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'optparse'
|
|
4
|
+
require 'shellwords'
|
|
5
|
+
|
|
6
|
+
module RuboCop
|
|
7
|
+
class IncorrectCopNameError < StandardError; end
|
|
8
|
+
class OptionArgumentError < StandardError; end
|
|
9
|
+
|
|
10
|
+
# This class handles command line options.
|
|
11
|
+
class Options
|
|
12
|
+
E_STDIN_NO_PATH = '-s/--stdin requires exactly one path, relative to the ' \
|
|
13
|
+
'root of the project. RuboCop will use this path to determine which ' \
|
|
14
|
+
'cops are enabled (via eg. Include/Exclude), and so that certain cops ' \
|
|
15
|
+
'like Naming/FileName can be checked.'
|
|
16
|
+
EXITING_OPTIONS = %i[version verbose_version show_cops].freeze
|
|
17
|
+
DEFAULT_MAXIMUM_EXCLUSION_ITEMS = 15
|
|
18
|
+
|
|
19
|
+
def initialize
|
|
20
|
+
@options = {}
|
|
21
|
+
@validator = OptionsValidator.new(@options)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def parse(command_line_args)
|
|
25
|
+
args = args_from_file.concat(args_from_env).concat(command_line_args)
|
|
26
|
+
define_options.parse!(args)
|
|
27
|
+
|
|
28
|
+
@validator.validate_compatibility
|
|
29
|
+
|
|
30
|
+
if @options[:stdin]
|
|
31
|
+
# The parser will put the file name given after --stdin into
|
|
32
|
+
# @options[:stdin]. If it did, then the args array should be empty.
|
|
33
|
+
raise OptionArgumentError, E_STDIN_NO_PATH if args.any?
|
|
34
|
+
|
|
35
|
+
# We want the STDIN contents in @options[:stdin] and the file name in
|
|
36
|
+
# args to simplify the rest of the processing.
|
|
37
|
+
args = [@options[:stdin]]
|
|
38
|
+
@options[:stdin] = $stdin.binmode.read
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
[@options, args]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def args_from_file
|
|
47
|
+
if File.exist?('.rubocop') && !File.directory?('.rubocop')
|
|
48
|
+
File.read('.rubocop').shellsplit
|
|
49
|
+
else
|
|
50
|
+
[]
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def args_from_env
|
|
55
|
+
Shellwords.split(ENV.fetch('RUBOCOP_OPTS', ''))
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def define_options
|
|
59
|
+
OptionParser.new do |opts|
|
|
60
|
+
opts.banner = 'Usage: rubocop [options] [file1, file2, ...]'
|
|
61
|
+
|
|
62
|
+
add_list_options(opts)
|
|
63
|
+
add_only_options(opts)
|
|
64
|
+
add_configuration_options(opts)
|
|
65
|
+
add_formatting_options(opts)
|
|
66
|
+
|
|
67
|
+
option(opts, '-r', '--require FILE') { |f| require f }
|
|
68
|
+
|
|
69
|
+
add_severity_option(opts)
|
|
70
|
+
add_flags_with_optional_args(opts)
|
|
71
|
+
add_boolean_flags(opts)
|
|
72
|
+
add_aliases(opts)
|
|
73
|
+
|
|
74
|
+
option(opts, '-s', '--stdin FILE')
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def add_only_options(opts)
|
|
79
|
+
add_cop_selection_csv_option('except', opts)
|
|
80
|
+
add_cop_selection_csv_option('only', opts)
|
|
81
|
+
option(opts, '--only-guide-cops')
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def add_cop_selection_csv_option(option, opts)
|
|
85
|
+
option(opts, "--#{option} [COP1,COP2,...]") do |list|
|
|
86
|
+
@options[:"#{option}"] =
|
|
87
|
+
if list.empty?
|
|
88
|
+
['']
|
|
89
|
+
else
|
|
90
|
+
list.split(',').map do |c|
|
|
91
|
+
Cop::Cop.qualified_cop_name(c, "--#{option} option")
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def add_configuration_options(opts)
|
|
98
|
+
option(opts, '-c', '--config FILE')
|
|
99
|
+
option(opts, '--force-exclusion')
|
|
100
|
+
option(opts, '--ignore-parent-exclusion')
|
|
101
|
+
option(opts, '--force-default-config')
|
|
102
|
+
add_auto_gen_options(opts)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def add_auto_gen_options(opts)
|
|
106
|
+
option(opts, '--auto-gen-config')
|
|
107
|
+
|
|
108
|
+
option(opts, '--exclude-limit COUNT') do
|
|
109
|
+
@validator.validate_exclude_limit_option
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
option(opts, '--disable-uncorrectable')
|
|
113
|
+
|
|
114
|
+
option(opts, '--no-offense-counts') do
|
|
115
|
+
@options[:no_offense_counts] = true
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
option(opts, '--auto-gen-only-exclude')
|
|
119
|
+
option(opts, '--no-auto-gen-timestamp') do
|
|
120
|
+
@options[:no_auto_gen_timestamp] = true
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
option(opts, '--init')
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def add_formatting_options(opts)
|
|
127
|
+
option(opts, '-f', '--format FORMATTER') do |key|
|
|
128
|
+
@options[:formatters] ||= []
|
|
129
|
+
@options[:formatters] << [key]
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
option(opts, '-o', '--out FILE') do |path|
|
|
133
|
+
if @options[:formatters]
|
|
134
|
+
@options[:formatters].last << path
|
|
135
|
+
else
|
|
136
|
+
@options[:output_path] = path
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def add_severity_option(opts)
|
|
142
|
+
table = RuboCop::Cop::Severity::CODE_TABLE.merge(A: :autocorrect)
|
|
143
|
+
option(opts, '--fail-level SEVERITY',
|
|
144
|
+
RuboCop::Cop::Severity::NAMES + [:autocorrect],
|
|
145
|
+
table) do |severity|
|
|
146
|
+
@options[:fail_level] = severity
|
|
147
|
+
end
|
|
148
|
+
option(opts, '--display-only-fail-level-offenses')
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def add_flags_with_optional_args(opts)
|
|
152
|
+
option(opts, '--show-cops [COP1,COP2,...]') do |list|
|
|
153
|
+
@options[:show_cops] = list.nil? ? [] : list.split(',')
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def add_boolean_flags(opts)
|
|
158
|
+
option(opts, '-F', '--fail-fast')
|
|
159
|
+
option(opts, '-C', '--cache FLAG')
|
|
160
|
+
option(opts, '-d', '--debug')
|
|
161
|
+
option(opts, '-D', '--[no-]display-cop-names')
|
|
162
|
+
option(opts, '-E', '--extra-details')
|
|
163
|
+
option(opts, '-S', '--display-style-guide')
|
|
164
|
+
option(opts, '-a', '--auto-correct')
|
|
165
|
+
option(opts, '--ignore-disable-comments')
|
|
166
|
+
|
|
167
|
+
option(opts, '--safe')
|
|
168
|
+
|
|
169
|
+
option(opts, '--[no-]color')
|
|
170
|
+
|
|
171
|
+
option(opts, '-v', '--version')
|
|
172
|
+
option(opts, '-V', '--verbose-version')
|
|
173
|
+
option(opts, '-P', '--parallel')
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def add_aliases(opts)
|
|
177
|
+
option(opts, '-l', '--lint') do
|
|
178
|
+
@options[:only] ||= []
|
|
179
|
+
@options[:only] << 'Lint'
|
|
180
|
+
end
|
|
181
|
+
option(opts, '-x', '--fix-layout') do
|
|
182
|
+
@options[:only] ||= []
|
|
183
|
+
@options[:only] << 'Layout'
|
|
184
|
+
@options[:auto_correct] = true
|
|
185
|
+
end
|
|
186
|
+
option(opts, '--safe-auto-correct') do
|
|
187
|
+
@options[:auto_correct] = true
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def add_list_options(opts)
|
|
192
|
+
option(opts, '-L', '--list-target-files')
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Sets a value in the @options hash, based on the given long option and its
|
|
196
|
+
# value, in addition to calling the block if a block is given.
|
|
197
|
+
def option(opts, *args)
|
|
198
|
+
long_opt_symbol = long_opt_symbol(args)
|
|
199
|
+
args += Array(OptionsHelp::TEXT[long_opt_symbol])
|
|
200
|
+
opts.on(*args) do |arg|
|
|
201
|
+
@options[long_opt_symbol] = arg
|
|
202
|
+
yield arg if block_given?
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Finds the option in `args` starting with -- and converts it to a symbol,
|
|
207
|
+
# e.g. [..., '--auto-correct', ...] to :auto_correct.
|
|
208
|
+
def long_opt_symbol(args)
|
|
209
|
+
long_opt = args.find { |arg| arg.start_with?('--') }
|
|
210
|
+
long_opt[2..-1].sub('[no-]', '').sub(/ .*/, '')
|
|
211
|
+
.tr('-', '_').gsub(/[\[\]]/, '').to_sym
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# Validates option arguments and the options' compatibility with each other.
|
|
216
|
+
class OptionsValidator
|
|
217
|
+
class << self
|
|
218
|
+
# Cop name validation must be done later than option parsing, so it's not
|
|
219
|
+
# called from within Options.
|
|
220
|
+
def validate_cop_list(names)
|
|
221
|
+
return unless names
|
|
222
|
+
|
|
223
|
+
cop_names = Cop::Cop.registry.names
|
|
224
|
+
departments = Cop::Cop.registry.departments.map(&:to_s)
|
|
225
|
+
|
|
226
|
+
names.each do |name|
|
|
227
|
+
next if cop_names.include?(name)
|
|
228
|
+
next if departments.include?(name)
|
|
229
|
+
next if %w[Syntax Lint/Syntax].include?(name)
|
|
230
|
+
|
|
231
|
+
raise IncorrectCopNameError, format_message_from(name, cop_names)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
private
|
|
236
|
+
|
|
237
|
+
def format_message_from(name, cop_names)
|
|
238
|
+
message = 'Unrecognized cop or department: %<name>s.'
|
|
239
|
+
message_with_candidate = "%<message>s\nDid you mean? %<candidate>s"
|
|
240
|
+
corrections = cop_names.select do |cn|
|
|
241
|
+
score = StringUtil.similarity(cn, name)
|
|
242
|
+
score >= NameSimilarity::MINIMUM_SIMILARITY_TO_SUGGEST
|
|
243
|
+
end.sort
|
|
244
|
+
|
|
245
|
+
if corrections.empty?
|
|
246
|
+
format(message, name: name)
|
|
247
|
+
else
|
|
248
|
+
format(message_with_candidate, message: format(message, name: name),
|
|
249
|
+
candidate: corrections.join(', '))
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def initialize(options)
|
|
255
|
+
@options = options
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# rubocop:disable Metrics/AbcSize
|
|
259
|
+
def validate_compatibility # rubocop:disable Metrics/MethodLength
|
|
260
|
+
if only_includes_unneeded_disable?
|
|
261
|
+
raise OptionArgumentError, 'Lint/UnneededCopDisableDirective can not ' \
|
|
262
|
+
'be used with --only.'
|
|
263
|
+
end
|
|
264
|
+
if except_syntax?
|
|
265
|
+
raise OptionArgumentError, 'Syntax checking can not be turned off.'
|
|
266
|
+
end
|
|
267
|
+
unless boolean_or_empty_cache?
|
|
268
|
+
raise OptionArgumentError, '-C/--cache argument must be true or false'
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
if display_only_fail_level_offenses_with_autocorrect?
|
|
272
|
+
raise OptionArgumentError, '--autocorrect can not be used with ' \
|
|
273
|
+
'--display-only-fail-level-offenses'
|
|
274
|
+
end
|
|
275
|
+
validate_auto_gen_config
|
|
276
|
+
validate_auto_correct
|
|
277
|
+
validate_parallel
|
|
278
|
+
|
|
279
|
+
return if incompatible_options.size <= 1
|
|
280
|
+
|
|
281
|
+
raise OptionArgumentError, 'Incompatible cli options: ' \
|
|
282
|
+
"#{incompatible_options.inspect}"
|
|
283
|
+
end
|
|
284
|
+
# rubocop:enable Metrics/AbcSize
|
|
285
|
+
|
|
286
|
+
def validate_auto_gen_config
|
|
287
|
+
return if @options.key?(:auto_gen_config)
|
|
288
|
+
|
|
289
|
+
message = '--%<flag>s can only be used together with --auto-gen-config.'
|
|
290
|
+
|
|
291
|
+
%i[exclude_limit no_offense_counts no_auto_gen_timestamp
|
|
292
|
+
auto_gen_only_exclude].each do |option|
|
|
293
|
+
if @options.key?(option)
|
|
294
|
+
raise OptionArgumentError,
|
|
295
|
+
format(message, flag: option.to_s.tr('_', '-'))
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def validate_auto_correct
|
|
301
|
+
return if @options.key?(:auto_correct)
|
|
302
|
+
return unless @options.key?(:disable_uncorrectable)
|
|
303
|
+
|
|
304
|
+
raise OptionArgumentError,
|
|
305
|
+
format('--%<flag>s can only be used together with --auto-correct.',
|
|
306
|
+
flag: '--disable-uncorrectable')
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def validate_parallel
|
|
310
|
+
return unless @options.key?(:parallel)
|
|
311
|
+
|
|
312
|
+
if @options[:cache] == 'false'
|
|
313
|
+
raise OptionArgumentError, '-P/--parallel uses caching to speed up ' \
|
|
314
|
+
'execution, so combining with --cache ' \
|
|
315
|
+
'false is not allowed.'
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
validate_parallel_with_combo_option
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def validate_parallel_with_combo_option
|
|
322
|
+
combos = {
|
|
323
|
+
auto_gen_config: '-P/--parallel uses caching to speed up execution, ' \
|
|
324
|
+
'while --auto-gen-config needs a non-cached run, ' \
|
|
325
|
+
'so they cannot be combined.',
|
|
326
|
+
fail_fast: '-P/--parallel can not be combined with -F/--fail-fast.',
|
|
327
|
+
auto_correct: '-P/--parallel can not be combined with --auto-correct.'
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
combos.each do |key, msg|
|
|
331
|
+
raise OptionArgumentError, msg if @options.key?(key)
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
def only_includes_unneeded_disable?
|
|
336
|
+
@options.key?(:only) &&
|
|
337
|
+
(@options[:only] & %w[Lint/UnneededCopDisableDirective
|
|
338
|
+
UnneededCopDisableDirective]).any?
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
def display_only_fail_level_offenses_with_autocorrect?
|
|
342
|
+
@options[:display_only_fail_level_offenses] && @options[:autocorrect]
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def except_syntax?
|
|
346
|
+
@options.key?(:except) &&
|
|
347
|
+
(@options[:except] & %w[Lint/Syntax Syntax]).any?
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def boolean_or_empty_cache?
|
|
351
|
+
!@options.key?(:cache) || %w[true false].include?(@options[:cache])
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def incompatible_options
|
|
355
|
+
@incompatible_options ||= @options.keys & Options::EXITING_OPTIONS
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def validate_exclude_limit_option
|
|
359
|
+
return if @options[:exclude_limit] =~ /^\d+$/
|
|
360
|
+
|
|
361
|
+
# Emulate OptionParser's behavior to make failures consistent regardless
|
|
362
|
+
# of option order.
|
|
363
|
+
raise OptionParser::MissingArgument
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
# This module contains help texts for command line options.
|
|
368
|
+
module OptionsHelp
|
|
369
|
+
MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
|
|
370
|
+
# rubocop:disable Metrics/LineLength
|
|
371
|
+
FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
|
|
372
|
+
|
|
373
|
+
TEXT = {
|
|
374
|
+
only: 'Run only the given cop(s).',
|
|
375
|
+
only_guide_cops: ['Run only cops for rules that link to a',
|
|
376
|
+
'style guide.'],
|
|
377
|
+
except: 'Disable the given cop(s).',
|
|
378
|
+
require: 'Require Ruby file.',
|
|
379
|
+
config: 'Specify configuration file.',
|
|
380
|
+
auto_gen_config: ['Generate a configuration file acting as a',
|
|
381
|
+
'TODO list.'],
|
|
382
|
+
no_offense_counts: ['Do not include offense counts in configuration',
|
|
383
|
+
'file generated by --auto-gen-config.'],
|
|
384
|
+
no_auto_gen_timestamp:
|
|
385
|
+
['Do not include the date and time when',
|
|
386
|
+
'the --auto-gen-config was run in the file it',
|
|
387
|
+
'generates.'],
|
|
388
|
+
auto_gen_only_exclude:
|
|
389
|
+
['Generate only Exclude parameters and not Max',
|
|
390
|
+
'when running --auto-gen-config, except if the',
|
|
391
|
+
'number of files with offenses is bigger than',
|
|
392
|
+
'exclude-limit.'],
|
|
393
|
+
exclude_limit: ['Used together with --auto-gen-config to',
|
|
394
|
+
'set the limit for how many Exclude',
|
|
395
|
+
"properties to generate. Default is #{MAX_EXCL}."],
|
|
396
|
+
disable_uncorrectable: ['Used with --auto-correct to annotate any',
|
|
397
|
+
'offenses that do not support autocorrect',
|
|
398
|
+
'with `rubocop:todo` comments.'],
|
|
399
|
+
force_exclusion: ['Force excluding files specified in the',
|
|
400
|
+
'configuration `Exclude` even if they are',
|
|
401
|
+
'explicitly passed as arguments.'],
|
|
402
|
+
ignore_disable_comments: ['Run cops even when they are disabled locally',
|
|
403
|
+
'with a comment.'],
|
|
404
|
+
ignore_parent_exclusion: ['Prevent from inheriting AllCops/Exclude from',
|
|
405
|
+
'parent folders.'],
|
|
406
|
+
force_default_config: ['Use default configuration even if configuration',
|
|
407
|
+
'files are present in the directory tree.'],
|
|
408
|
+
format: ['Choose an output formatter. This option',
|
|
409
|
+
'can be specified multiple times to enable',
|
|
410
|
+
'multiple formatters at the same time.',
|
|
411
|
+
'[p]rogress is used by default',
|
|
412
|
+
*FORMATTER_OPTION_LIST.map { |item| " #{item}" },
|
|
413
|
+
' custom formatter class name'],
|
|
414
|
+
out: ['Write output to a file instead of STDOUT.',
|
|
415
|
+
'This option applies to the previously',
|
|
416
|
+
'specified --format, or the default format',
|
|
417
|
+
'if no format is specified.'],
|
|
418
|
+
fail_level: ['Minimum severity (A/R/C/W/E/F) for exit',
|
|
419
|
+
'with error code.'],
|
|
420
|
+
display_only_fail_level_offenses:
|
|
421
|
+
['Only output offense messages at',
|
|
422
|
+
'the specified --fail-level or above'],
|
|
423
|
+
show_cops: ['Shows the given cops, or all cops by',
|
|
424
|
+
'default, and their configurations for the',
|
|
425
|
+
'current directory.'],
|
|
426
|
+
fail_fast: ['Inspect files in order of modification',
|
|
427
|
+
'time and stop after the first file',
|
|
428
|
+
'containing offenses.'],
|
|
429
|
+
cache: ["Use result caching (FLAG=true) or don't",
|
|
430
|
+
'(FLAG=false), default determined by',
|
|
431
|
+
'configuration parameter AllCops: UseCache.'],
|
|
432
|
+
debug: 'Display debug info.',
|
|
433
|
+
display_cop_names: ['Display cop names in offense messages.',
|
|
434
|
+
'Default is true.'],
|
|
435
|
+
display_style_guide: 'Display style guide URLs in offense messages.',
|
|
436
|
+
extra_details: 'Display extra details in offense messages.',
|
|
437
|
+
lint: 'Run only lint cops.',
|
|
438
|
+
safe: 'Run only safe cops.',
|
|
439
|
+
list_target_files: 'List all files RuboCop will inspect.',
|
|
440
|
+
auto_correct: 'Auto-correct offenses.',
|
|
441
|
+
safe_auto_correct: 'Run auto-correct only when it\'s safe.',
|
|
442
|
+
fix_layout: 'Run only layout cops, with auto-correct on.',
|
|
443
|
+
color: 'Force color output on or off.',
|
|
444
|
+
version: 'Display version.',
|
|
445
|
+
verbose_version: 'Display verbose version.',
|
|
446
|
+
parallel: ['Use available CPUs to execute inspection in',
|
|
447
|
+
'parallel.'],
|
|
448
|
+
stdin: ['Pipe source from STDIN, using FILE in offense',
|
|
449
|
+
'reports. This is useful for editor integration.'],
|
|
450
|
+
init: 'Generate a .rubocop.yml file in the current directory.'
|
|
451
|
+
}.freeze
|
|
452
|
+
# rubocop:enable Metrics/LineLength
|
|
453
|
+
end
|
|
454
|
+
end
|