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,129 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
# Message Annotator class annotates a basic offense message
|
6
|
+
# based on params passed into initializer.
|
7
|
+
#
|
8
|
+
# @see #initialize
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# RuboCop::Cop::MessageAnnotator.new(
|
12
|
+
# config, cop_name, cop_config, @options
|
13
|
+
# ).annotate('message')
|
14
|
+
# #=> 'Cop/CopName: message (http://example.org/styleguide)'
|
15
|
+
class MessageAnnotator
|
16
|
+
attr_reader :options, :config, :cop_name, :cop_config
|
17
|
+
|
18
|
+
@style_guide_urls = {}
|
19
|
+
|
20
|
+
class << self
|
21
|
+
attr_reader :style_guide_urls
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param config [RuboCop::Config] Check configs for all cops
|
25
|
+
# @note Message Annotator specifically checks the
|
26
|
+
# following config options for_all_cops
|
27
|
+
# :StyleGuideBaseURL [String] URL for styleguide
|
28
|
+
# :DisplayStyleGuide [Boolean] Include styleguide and reference URLs
|
29
|
+
# :ExtraDetails [Boolean] Include cop details
|
30
|
+
# :DisplayCopNames [Boolean] Include cop name
|
31
|
+
#
|
32
|
+
# @param [String] cop_name for specific cop name
|
33
|
+
# @param [Hash] cop_config configs for specific cop, from config#for_cop
|
34
|
+
# @option cop_config [String] :StyleGuide Extension of base styleguide URL
|
35
|
+
# @option cop_config [String] :Reference Full reference URL
|
36
|
+
# @option cop_config [String] :Details
|
37
|
+
#
|
38
|
+
# @param [Hash, nil] options optional
|
39
|
+
# @option options [Boolean] :display_style_guide
|
40
|
+
# Include style guide and reference URLs
|
41
|
+
# @option options [Boolean] :extra_details
|
42
|
+
# Include cop specific details
|
43
|
+
# @option options [Boolean] :debug
|
44
|
+
# Include debug output
|
45
|
+
# @option options [Boolean] :display_cop_names
|
46
|
+
# Include cop name
|
47
|
+
def initialize(config, cop_name, cop_config, options)
|
48
|
+
@config = config
|
49
|
+
@cop_name = cop_name
|
50
|
+
@cop_config = cop_config || {}
|
51
|
+
@options = options
|
52
|
+
end
|
53
|
+
|
54
|
+
# Returns the annotated message,
|
55
|
+
# based on params passed into initializer
|
56
|
+
#
|
57
|
+
# @return [String] annotated message
|
58
|
+
def annotate(message)
|
59
|
+
message = "#{cop_name}: #{message}" if display_cop_names?
|
60
|
+
message += " #{details}" if extra_details? && details
|
61
|
+
if display_style_guide?
|
62
|
+
links = urls.join(', ')
|
63
|
+
message = "#{message} (#{links})"
|
64
|
+
end
|
65
|
+
message
|
66
|
+
end
|
67
|
+
|
68
|
+
def urls
|
69
|
+
[style_guide_url, *reference_urls].compact
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def style_guide_url
|
75
|
+
url = cop_config['StyleGuide']
|
76
|
+
return nil if url.nil? || url.empty?
|
77
|
+
|
78
|
+
self.class.style_guide_urls[url] ||= begin
|
79
|
+
base_url = style_guide_base_url
|
80
|
+
if base_url.nil? || base_url.empty?
|
81
|
+
url
|
82
|
+
else
|
83
|
+
URI.join(base_url, url).to_s
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def style_guide_base_url
|
89
|
+
department_name = cop_name.split('/').first
|
90
|
+
|
91
|
+
config.for_department(department_name)['StyleGuideBaseURL'] ||
|
92
|
+
config.for_all_cops['StyleGuideBaseURL']
|
93
|
+
end
|
94
|
+
|
95
|
+
def display_style_guide?
|
96
|
+
(options[:display_style_guide] ||
|
97
|
+
config.for_all_cops['DisplayStyleGuide']) &&
|
98
|
+
!urls.empty?
|
99
|
+
end
|
100
|
+
|
101
|
+
def reference_urls
|
102
|
+
urls = Array(cop_config['Reference'])
|
103
|
+
urls.nil? || urls.empty? ? nil : urls.reject(&:empty?)
|
104
|
+
end
|
105
|
+
|
106
|
+
def extra_details?
|
107
|
+
options[:extra_details] || config.for_all_cops['ExtraDetails']
|
108
|
+
end
|
109
|
+
|
110
|
+
def debug?
|
111
|
+
options[:debug]
|
112
|
+
end
|
113
|
+
|
114
|
+
def display_cop_names?
|
115
|
+
return true if debug?
|
116
|
+
return false if options[:display_cop_names] == false
|
117
|
+
return true if options[:display_cop_names]
|
118
|
+
return false if options[:format] == 'json'
|
119
|
+
|
120
|
+
config.for_all_cops['DisplayCopNames']
|
121
|
+
end
|
122
|
+
|
123
|
+
def details
|
124
|
+
details = cop_config && cop_config['Details']
|
125
|
+
details.nil? || details.empty? ? nil : details
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Metrics
|
6
|
+
# This cop checks that the ABC size of methods is not higher than the
|
7
|
+
# configured maximum. The ABC size is based on assignments, branches
|
8
|
+
# (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric
|
9
|
+
# and https://en.wikipedia.org/wiki/ABC_Software_Metric.
|
10
|
+
class AbcSize < Cop
|
11
|
+
include MethodComplexity
|
12
|
+
|
13
|
+
MSG = 'Assignment Branch Condition size for %<method>s is too high. ' \
|
14
|
+
'[%<complexity>.4g/%<max>.4g]'
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def complexity(node)
|
19
|
+
Utils::AbcSizeCalculator.calculate(node)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Metrics
|
6
|
+
# This cop checks if the length of a block exceeds some maximum value.
|
7
|
+
# Comment lines can optionally be ignored.
|
8
|
+
# The maximum allowed length is configurable.
|
9
|
+
# The cop can be configured to ignore blocks passed to certain methods.
|
10
|
+
class BlockLength < Cop
|
11
|
+
include TooManyLines
|
12
|
+
|
13
|
+
LABEL = 'Block'
|
14
|
+
|
15
|
+
def on_block(node)
|
16
|
+
return if excluded_method?(node)
|
17
|
+
return if node.class_constructor?
|
18
|
+
|
19
|
+
check_code_length(node)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def excluded_method?(node)
|
25
|
+
node_receiver = node.receiver&.source&.gsub(/\s+/, '')
|
26
|
+
node_method = String(node.method_name)
|
27
|
+
|
28
|
+
excluded_methods.any? do |config|
|
29
|
+
receiver, method = config.split('.')
|
30
|
+
|
31
|
+
unless method
|
32
|
+
method = receiver
|
33
|
+
receiver = node_receiver
|
34
|
+
end
|
35
|
+
|
36
|
+
method == node_method && receiver == node_receiver
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def excluded_methods
|
41
|
+
cop_config['ExcludedMethods'] || []
|
42
|
+
end
|
43
|
+
|
44
|
+
def cop_label
|
45
|
+
LABEL
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Metrics
|
6
|
+
# This cop checks for excessive nesting of conditional and looping
|
7
|
+
# constructs.
|
8
|
+
#
|
9
|
+
# You can configure if blocks are considered using the `CountBlocks`
|
10
|
+
# option. When set to `false` (the default) blocks are not counted
|
11
|
+
# towards the nesting level. Set to `true` to count blocks as well.
|
12
|
+
#
|
13
|
+
# The maximum level of nesting allowed is configurable.
|
14
|
+
class BlockNesting < Cop
|
15
|
+
include ConfigurableMax
|
16
|
+
|
17
|
+
NESTING_BLOCKS = %i[
|
18
|
+
case if while while_post
|
19
|
+
until until_post for resbody
|
20
|
+
].freeze
|
21
|
+
|
22
|
+
def investigate(processed_source)
|
23
|
+
return if processed_source.blank?
|
24
|
+
|
25
|
+
max = cop_config['Max']
|
26
|
+
check_nesting_level(processed_source.ast, max, 0)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def check_nesting_level(node, max, current_level)
|
32
|
+
if consider_node?(node)
|
33
|
+
current_level += 1 unless node.if_type? && node.elsif?
|
34
|
+
if current_level > max
|
35
|
+
self.max = current_level
|
36
|
+
unless part_of_ignored_node?(node)
|
37
|
+
add_offense(node, message: message(max)) do
|
38
|
+
ignore_node(node)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
node.each_child_node do |child_node|
|
45
|
+
check_nesting_level(child_node, max, current_level)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def consider_node?(node)
|
50
|
+
return true if NESTING_BLOCKS.include?(node.type)
|
51
|
+
|
52
|
+
count_blocks? && node.block_type?
|
53
|
+
end
|
54
|
+
|
55
|
+
def message(max)
|
56
|
+
"Avoid more than #{max} levels of block nesting."
|
57
|
+
end
|
58
|
+
|
59
|
+
def count_blocks?
|
60
|
+
cop_config['CountBlocks']
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Metrics
|
6
|
+
# This cop checks if the length a class exceeds some maximum value.
|
7
|
+
# Comment lines can optionally be ignored.
|
8
|
+
# The maximum allowed length is configurable.
|
9
|
+
class ClassLength < Cop
|
10
|
+
include ClassishLength
|
11
|
+
|
12
|
+
def on_class(node)
|
13
|
+
check_code_length(node)
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_casgn(node)
|
17
|
+
class_definition?(node) do
|
18
|
+
check_code_length(node)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def_node_matcher :class_definition?, <<~PATTERN
|
25
|
+
(casgn nil? _ (block (send (const nil? :Class) :new) ...))
|
26
|
+
PATTERN
|
27
|
+
|
28
|
+
def message(length, max_length)
|
29
|
+
format('Class has too many lines. [%<length>d/%<max>d]',
|
30
|
+
length: length,
|
31
|
+
max: max_length)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Metrics
|
6
|
+
# This cop checks that the cyclomatic complexity of methods is not higher
|
7
|
+
# than the configured maximum. The cyclomatic complexity is the number of
|
8
|
+
# linearly independent paths through a method. The algorithm counts
|
9
|
+
# decision points and adds one.
|
10
|
+
#
|
11
|
+
# An if statement (or unless or ?:) increases the complexity by one. An
|
12
|
+
# else branch does not, since it doesn't add a decision point. The &&
|
13
|
+
# operator (or keyword and) can be converted to a nested if statement,
|
14
|
+
# and ||/or is shorthand for a sequence of ifs, so they also add one.
|
15
|
+
# Loops can be said to have an exit condition, so they add one.
|
16
|
+
class CyclomaticComplexity < Cop
|
17
|
+
include MethodComplexity
|
18
|
+
|
19
|
+
MSG = 'Cyclomatic complexity for %<method>s is too high. ' \
|
20
|
+
'[%<complexity>d/%<max>d]'
|
21
|
+
COUNTED_NODES = %i[if while until for
|
22
|
+
rescue when and or].freeze
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def complexity_score_for(_node)
|
27
|
+
1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,321 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
6
|
+
module RuboCop
|
7
|
+
module Cop
|
8
|
+
module Metrics
|
9
|
+
# This cop checks the length of lines in the source code.
|
10
|
+
# The maximum length is configurable.
|
11
|
+
# The tab size is configured in the `IndentationWidth`
|
12
|
+
# of the `Layout/Tab` cop.
|
13
|
+
# It also ignores a shebang line by default.
|
14
|
+
#
|
15
|
+
# This cop has some autocorrection capabilities.
|
16
|
+
# It can programmatically shorten certain long lines by
|
17
|
+
# inserting line breaks into expressions that can be safely
|
18
|
+
# split across lines. These include arrays, hashes, and
|
19
|
+
# method calls with argument lists.
|
20
|
+
#
|
21
|
+
# If autocorrection is enabled, the following Layout cops
|
22
|
+
# are recommended to further format the broken lines.
|
23
|
+
#
|
24
|
+
# - AlignArray
|
25
|
+
# - AlignHash
|
26
|
+
# - AlignParameters
|
27
|
+
# - ClosingParenthesisIndentation
|
28
|
+
# - IndentFirstArgument
|
29
|
+
# - IndentFirstArrayElement
|
30
|
+
# - IndentFirstHashElement
|
31
|
+
# - IndentFirstParameter
|
32
|
+
# - MultilineArrayLineBreaks
|
33
|
+
# - MultilineHashBraceLayout
|
34
|
+
# - MultilineHashKeyLineBreaks
|
35
|
+
# - MultilineMethodArgumentLineBreaks
|
36
|
+
#
|
37
|
+
# Together, these cops will pretty print hashes, arrays,
|
38
|
+
# method calls, etc. For example, let's say the max columns
|
39
|
+
# is 25:
|
40
|
+
#
|
41
|
+
# @example
|
42
|
+
#
|
43
|
+
# # bad
|
44
|
+
# {foo: "0000000000", bar: "0000000000", baz: "0000000000"}
|
45
|
+
#
|
46
|
+
# # good
|
47
|
+
# {foo: "0000000000",
|
48
|
+
# bar: "0000000000", baz: "0000000000"}
|
49
|
+
#
|
50
|
+
# # good (with recommended cops enabled)
|
51
|
+
# {
|
52
|
+
# foo: "0000000000",
|
53
|
+
# bar: "0000000000",
|
54
|
+
# baz: "0000000000",
|
55
|
+
# }
|
56
|
+
class LineLength < Cop
|
57
|
+
include CheckLineBreakable
|
58
|
+
include ConfigurableMax
|
59
|
+
include IgnoredPattern
|
60
|
+
include RangeHelp
|
61
|
+
|
62
|
+
MSG = 'Line is too long. [%<length>d/%<max>d]'
|
63
|
+
|
64
|
+
def on_potential_breakable_node(node)
|
65
|
+
check_for_breakable_node(node)
|
66
|
+
end
|
67
|
+
alias on_array on_potential_breakable_node
|
68
|
+
alias on_hash on_potential_breakable_node
|
69
|
+
alias on_send on_potential_breakable_node
|
70
|
+
|
71
|
+
def investigate_post_walk(processed_source)
|
72
|
+
processed_source.lines.each_with_index do |line, line_index|
|
73
|
+
check_line(line, line_index)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def autocorrect(range)
|
78
|
+
return if range.nil?
|
79
|
+
|
80
|
+
lambda do |corrector|
|
81
|
+
corrector.insert_before(range, "\n")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def check_for_breakable_node(node)
|
88
|
+
breakable_node = extract_breakable_node(node, max)
|
89
|
+
return if breakable_node.nil?
|
90
|
+
|
91
|
+
line_index = breakable_node.first_line - 1
|
92
|
+
breakable_nodes_by_line_index[line_index] = breakable_node
|
93
|
+
end
|
94
|
+
|
95
|
+
def breakable_nodes_by_line_index
|
96
|
+
@breakable_nodes_by_line_index ||= {}
|
97
|
+
end
|
98
|
+
|
99
|
+
def heredocs
|
100
|
+
@heredocs ||= extract_heredocs(processed_source.ast)
|
101
|
+
end
|
102
|
+
|
103
|
+
def tab_indentation_width
|
104
|
+
config.for_cop('Layout/Tab')['IndentationWidth']
|
105
|
+
end
|
106
|
+
|
107
|
+
def indentation_difference(line)
|
108
|
+
return 0 unless tab_indentation_width
|
109
|
+
|
110
|
+
line.match(/^\t*/)[0].size * (tab_indentation_width - 1)
|
111
|
+
end
|
112
|
+
|
113
|
+
def line_length(line)
|
114
|
+
line.length + indentation_difference(line)
|
115
|
+
end
|
116
|
+
|
117
|
+
def highlight_start(line)
|
118
|
+
max - indentation_difference(line)
|
119
|
+
end
|
120
|
+
|
121
|
+
def check_line(line, line_index)
|
122
|
+
return if line_length(line) <= max
|
123
|
+
return if ignored_line?(line, line_index)
|
124
|
+
|
125
|
+
if ignore_cop_directives? && directive_on_source_line?(line_index)
|
126
|
+
return check_directive_line(line, line_index)
|
127
|
+
end
|
128
|
+
return check_uri_line(line, line_index) if allow_uri?
|
129
|
+
|
130
|
+
register_offense(
|
131
|
+
source_range(
|
132
|
+
processed_source.buffer, line_index,
|
133
|
+
highlight_start(line)...line_length(line)
|
134
|
+
),
|
135
|
+
line,
|
136
|
+
line_index
|
137
|
+
)
|
138
|
+
end
|
139
|
+
|
140
|
+
def ignored_line?(line, line_index)
|
141
|
+
matches_ignored_pattern?(line) ||
|
142
|
+
shebang?(line, line_index) ||
|
143
|
+
heredocs && line_in_permitted_heredoc?(line_index.succ)
|
144
|
+
end
|
145
|
+
|
146
|
+
def shebang?(line, line_index)
|
147
|
+
line_index.zero? && line.start_with?('#!')
|
148
|
+
end
|
149
|
+
|
150
|
+
def register_offense(loc, line, line_index)
|
151
|
+
message = format(MSG, length: line_length(line), max: max)
|
152
|
+
|
153
|
+
breakable_range = breakable_range(line, line_index)
|
154
|
+
add_offense(breakable_range, location: loc, message: message) do
|
155
|
+
self.max = line_length(line)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def breakable_range(line, line_index)
|
160
|
+
return if line_in_heredoc?(line_index + 1)
|
161
|
+
|
162
|
+
semicolon_range = breakable_semicolon_range(line, line_index)
|
163
|
+
return semicolon_range if semicolon_range
|
164
|
+
|
165
|
+
breakable_node = breakable_nodes_by_line_index[line_index]
|
166
|
+
return breakable_node.source_range if breakable_node
|
167
|
+
end
|
168
|
+
|
169
|
+
def breakable_semicolon_range(line, line_index)
|
170
|
+
semicolon_separated_parts = line.split(';')
|
171
|
+
return if semicolon_separated_parts.length <= 1
|
172
|
+
|
173
|
+
column = semicolon_separated_parts.first.length + 1
|
174
|
+
range = source_range(processed_source.buffer, line_index, column, 1)
|
175
|
+
return if processed_source.commented?(range)
|
176
|
+
|
177
|
+
range
|
178
|
+
end
|
179
|
+
|
180
|
+
def excess_range(uri_range, line, line_index)
|
181
|
+
excessive_position = if uri_range && uri_range.begin < max
|
182
|
+
uri_range.end
|
183
|
+
else
|
184
|
+
highlight_start(line)
|
185
|
+
end
|
186
|
+
|
187
|
+
source_range(processed_source.buffer, line_index + 1,
|
188
|
+
excessive_position...(line_length(line)))
|
189
|
+
end
|
190
|
+
|
191
|
+
def max
|
192
|
+
cop_config['Max']
|
193
|
+
end
|
194
|
+
|
195
|
+
def allow_heredoc?
|
196
|
+
allowed_heredoc
|
197
|
+
end
|
198
|
+
|
199
|
+
def allowed_heredoc
|
200
|
+
cop_config['AllowHeredoc']
|
201
|
+
end
|
202
|
+
|
203
|
+
def extract_heredocs(ast)
|
204
|
+
return [] unless ast
|
205
|
+
|
206
|
+
ast.each_node(:str, :dstr, :xstr).select(&:heredoc?).map do |node|
|
207
|
+
body = node.location.heredoc_body
|
208
|
+
delimiter = node.location.heredoc_end.source.strip
|
209
|
+
[body.first_line...body.last_line, delimiter]
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def line_in_permitted_heredoc?(line_number)
|
214
|
+
return false unless allowed_heredoc
|
215
|
+
|
216
|
+
heredocs.any? do |range, delimiter|
|
217
|
+
range.cover?(line_number) &&
|
218
|
+
(allowed_heredoc == true || allowed_heredoc.include?(delimiter))
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def line_in_heredoc?(line_number)
|
223
|
+
heredocs.any? do |range, _delimiter|
|
224
|
+
range.cover?(line_number)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def allow_uri?
|
229
|
+
cop_config['AllowURI']
|
230
|
+
end
|
231
|
+
|
232
|
+
def ignore_cop_directives?
|
233
|
+
cop_config['IgnoreCopDirectives']
|
234
|
+
end
|
235
|
+
|
236
|
+
def allowed_uri_position?(line, uri_range)
|
237
|
+
uri_range.begin < max &&
|
238
|
+
(uri_range.end == line_length(line) ||
|
239
|
+
uri_range.end == line_length(line) - 1)
|
240
|
+
end
|
241
|
+
|
242
|
+
def find_excessive_uri_range(line)
|
243
|
+
last_uri_match = match_uris(line).last
|
244
|
+
return nil unless last_uri_match
|
245
|
+
|
246
|
+
begin_position, end_position =
|
247
|
+
last_uri_match.offset(0).map do |pos|
|
248
|
+
pos + indentation_difference(line)
|
249
|
+
end
|
250
|
+
return nil if begin_position < max && end_position < max
|
251
|
+
|
252
|
+
begin_position...end_position
|
253
|
+
end
|
254
|
+
|
255
|
+
def match_uris(string)
|
256
|
+
matches = []
|
257
|
+
string.scan(uri_regexp) do
|
258
|
+
matches << $LAST_MATCH_INFO if valid_uri?($LAST_MATCH_INFO[0])
|
259
|
+
end
|
260
|
+
matches
|
261
|
+
end
|
262
|
+
|
263
|
+
def valid_uri?(uri_ish_string)
|
264
|
+
URI.parse(uri_ish_string)
|
265
|
+
true
|
266
|
+
rescue URI::InvalidURIError, NoMethodError
|
267
|
+
false
|
268
|
+
end
|
269
|
+
|
270
|
+
def uri_regexp
|
271
|
+
@uri_regexp ||=
|
272
|
+
URI::DEFAULT_PARSER.make_regexp(cop_config['URISchemes'])
|
273
|
+
end
|
274
|
+
|
275
|
+
def check_directive_line(line, line_index)
|
276
|
+
return if line_length_without_directive(line) <= max
|
277
|
+
|
278
|
+
range = max..(line_length_without_directive(line) - 1)
|
279
|
+
register_offense(
|
280
|
+
source_range(
|
281
|
+
processed_source.buffer,
|
282
|
+
line_index + 1,
|
283
|
+
range
|
284
|
+
),
|
285
|
+
line,
|
286
|
+
line_index
|
287
|
+
)
|
288
|
+
end
|
289
|
+
|
290
|
+
def directive_on_source_line?(line_index)
|
291
|
+
source_line_number = line_index + processed_source.buffer.first_line
|
292
|
+
comment =
|
293
|
+
processed_source
|
294
|
+
.comments
|
295
|
+
.detect { |e| e.location.line == source_line_number }
|
296
|
+
|
297
|
+
return false unless comment
|
298
|
+
|
299
|
+
comment.text.match(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
|
300
|
+
end
|
301
|
+
|
302
|
+
def line_length_without_directive(line)
|
303
|
+
before_comment, = line.split(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
|
304
|
+
before_comment.rstrip.length
|
305
|
+
end
|
306
|
+
|
307
|
+
def check_uri_line(line, line_index)
|
308
|
+
uri_range = find_excessive_uri_range(line)
|
309
|
+
return if uri_range && allowed_uri_position?(line, uri_range)
|
310
|
+
|
311
|
+
register_offense(
|
312
|
+
excess_range(uri_range, line, line_index),
|
313
|
+
line,
|
314
|
+
line_index
|
315
|
+
)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
# rubocop:enable Metrics/ClassLength
|