rubocop 0.42.0 → 0.52.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 +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +106 -20
- data/assets/output.html.erb +21 -10
- data/bin/rubocop +1 -2
- data/config/default.yml +914 -483
- data/config/disabled.yml +61 -41
- data/config/enabled.yml +1396 -878
- data/lib/rubocop/ast/builder.rb +72 -0
- data/lib/rubocop/ast/node/and_node.rb +37 -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 +116 -0
- data/lib/rubocop/ast/node/case_node.rb +64 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/ensure_node.rb +25 -0
- data/lib/rubocop/ast/node/for_node.rb +61 -0
- data/lib/rubocop/ast/node/hash_node.rb +109 -0
- data/lib/rubocop/ast/node/if_node.rb +146 -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 +23 -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 +174 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -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/or_node.rb +37 -0
- data/lib/rubocop/ast/node/pair_node.rb +64 -0
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/resbody_node.rb +25 -0
- data/lib/rubocop/ast/node/send_node.rb +45 -0
- data/lib/rubocop/ast/node/str_node.rb +14 -0
- data/lib/rubocop/ast/node/super_node.rb +21 -0
- data/lib/rubocop/ast/node/symbol_node.rb +20 -0
- data/lib/rubocop/ast/node/until_node.rb +43 -0
- data/lib/rubocop/ast/node/when_node.rb +61 -0
- data/lib/rubocop/ast/node/while_node.rb +43 -0
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/node.rb +634 -0
- data/lib/rubocop/ast/sexp.rb +16 -0
- data/lib/rubocop/{ast_node → ast}/traversal.rb +23 -24
- data/lib/rubocop/cached_data.rb +11 -31
- data/lib/rubocop/cli.rb +116 -33
- data/lib/rubocop/comment_config.rb +4 -10
- data/lib/rubocop/config.rb +355 -102
- data/lib/rubocop/config_loader.rb +93 -78
- data/lib/rubocop/config_loader_resolver.rb +106 -7
- data/lib/rubocop/config_store.rb +4 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
- data/lib/rubocop/cop/badge.rb +73 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +71 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +71 -0
- data/lib/rubocop/cop/commissioner.rb +27 -10
- data/lib/rubocop/cop/cop.rb +62 -107
- data/lib/rubocop/cop/corrector.rb +0 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +121 -0
- data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +62 -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/punctuation_corrector.rb +29 -0
- data/lib/rubocop/cop/correctors/space_corrector.rb +34 -0
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +31 -0
- data/lib/rubocop/cop/force.rb +0 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
- data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
- data/lib/rubocop/cop/generator.rb +191 -0
- data/lib/rubocop/cop/ignored_node.rb +0 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -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 +59 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
- data/lib/rubocop/cop/internal_affairs.rb +8 -0
- data/lib/rubocop/cop/{style → layout}/access_modifier_indentation.rb +39 -10
- data/lib/rubocop/cop/layout/align_array.rb +39 -0
- data/lib/rubocop/cop/layout/align_hash.rb +235 -0
- data/lib/rubocop/cop/{style → layout}/align_parameters.rb +38 -19
- data/lib/rubocop/cop/{style → layout}/block_end_newline.rb +26 -8
- data/lib/rubocop/cop/layout/case_indentation.rb +160 -0
- data/lib/rubocop/cop/layout/class_structure.rb +306 -0
- data/lib/rubocop/cop/{style → layout}/closing_parenthesis_indentation.rb +18 -13
- data/lib/rubocop/cop/{style → layout}/comment_indentation.rb +48 -6
- data/lib/rubocop/cop/{style → layout}/dot_position.rb +34 -21
- data/lib/rubocop/cop/{style → layout}/else_alignment.rb +55 -37
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +63 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +147 -0
- data/lib/rubocop/cop/{style → layout}/empty_lines.rb +17 -4
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_access_modifier.rb +40 -24
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +87 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +46 -0
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_block_body.rb +9 -12
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +68 -0
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +135 -0
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_method_body.rb +10 -7
- data/lib/rubocop/cop/{style → layout}/empty_lines_around_module_body.rb +27 -9
- data/lib/rubocop/cop/layout/end_of_line.rb +52 -0
- data/lib/rubocop/cop/{style → layout}/extra_spacing.rb +63 -53
- data/lib/rubocop/cop/{style → layout}/first_array_element_line_break.rb +5 -2
- data/lib/rubocop/cop/{style → layout}/first_hash_element_line_break.rb +5 -2
- data/lib/rubocop/cop/{style → layout}/first_method_argument_line_break.rb +7 -4
- data/lib/rubocop/cop/{style → layout}/first_method_parameter_line_break.rb +8 -5
- data/lib/rubocop/cop/{style → layout}/first_parameter_indentation.rb +32 -26
- data/lib/rubocop/cop/{style → layout}/indent_array.rb +75 -25
- data/lib/rubocop/cop/{style → layout}/indent_assignment.rb +9 -6
- data/lib/rubocop/cop/{style → layout}/indent_hash.rb +80 -31
- data/lib/rubocop/cop/layout/indent_heredoc.rb +208 -0
- data/lib/rubocop/cop/{style → layout}/indentation_consistency.rb +7 -5
- data/lib/rubocop/cop/{style → layout}/indentation_width.rb +151 -117
- data/lib/rubocop/cop/layout/initial_indentation.rb +45 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +58 -0
- data/lib/rubocop/cop/{style → layout}/multiline_array_brace_layout.rb +52 -16
- data/lib/rubocop/cop/{style → layout}/multiline_assignment_layout.rb +18 -21
- data/lib/rubocop/cop/{style → layout}/multiline_block_layout.rb +37 -43
- data/lib/rubocop/cop/{style → layout}/multiline_hash_brace_layout.rb +55 -15
- data/lib/rubocop/cop/{style → layout}/multiline_method_call_brace_layout.rb +15 -4
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +221 -0
- data/lib/rubocop/cop/{style → layout}/multiline_method_definition_brace_layout.rb +12 -5
- data/lib/rubocop/cop/{style → layout}/multiline_operation_indentation.rb +23 -13
- data/lib/rubocop/cop/{style → layout}/rescue_ensure_alignment.rb +24 -13
- data/lib/rubocop/cop/{style → layout}/space_after_colon.rb +17 -13
- data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
- data/lib/rubocop/cop/{style → layout}/space_after_method_name.rb +11 -11
- data/lib/rubocop/cop/layout/space_after_not.rb +38 -0
- data/lib/rubocop/cop/{style → layout}/space_after_semicolon.rb +14 -4
- data/lib/rubocop/cop/{style → layout}/space_around_block_parameters.rb +52 -28
- data/lib/rubocop/cop/{style → layout}/space_around_equals_in_parameter_default.rb +29 -21
- data/lib/rubocop/cop/{style → layout}/space_around_keyword.rb +33 -29
- data/lib/rubocop/cop/layout/space_around_operators.rb +159 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +107 -0
- data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
- data/lib/rubocop/cop/{style → layout}/space_before_comment.rb +11 -7
- data/lib/rubocop/cop/{style → layout}/space_before_first_arg.rb +23 -20
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +85 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +236 -0
- data/lib/rubocop/cop/{style → layout}/space_inside_array_percent_literal.rb +8 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +228 -0
- data/lib/rubocop/cop/{style → layout}/space_inside_hash_literal_braces.rb +91 -51
- data/lib/rubocop/cop/layout/space_inside_parens.rb +53 -0
- data/lib/rubocop/cop/{style → layout}/space_inside_percent_literal_delimiters.rb +14 -13
- data/lib/rubocop/cop/{style → layout}/space_inside_range_literal.rb +16 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +90 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +80 -0
- data/lib/rubocop/cop/{style → layout}/tab.rb +8 -6
- data/lib/rubocop/cop/{style → layout}/trailing_blank_lines.rb +14 -15
- data/lib/rubocop/cop/{style → layout}/trailing_whitespace.rb +3 -4
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +59 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +13 -9
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +7 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +55 -25
- data/lib/rubocop/cop/lint/block_alignment.rb +75 -34
- data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +17 -15
- data/lib/rubocop/cop/lint/condition_position.rb +16 -15
- data/lib/rubocop/cop/lint/debugger.rb +57 -23
- data/lib/rubocop/cop/lint/def_end_alignment.rb +28 -14
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +19 -10
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +108 -14
- data/lib/rubocop/cop/lint/duplicated_key.rb +16 -9
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +15 -6
- data/lib/rubocop/cop/lint/else_layout.rb +27 -31
- data/lib/rubocop/cop/lint/empty_ensure.rb +44 -3
- data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +16 -3
- data/lib/rubocop/cop/lint/empty_when.rb +38 -0
- data/lib/rubocop/cop/lint/end_alignment.rb +57 -39
- data/lib/rubocop/cop/lint/end_in_method.rb +24 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +23 -3
- data/lib/rubocop/cop/lint/float_out_of_range.rb +10 -6
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +67 -46
- data/lib/rubocop/cop/lint/handle_exceptions.rb +41 -4
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +9 -5
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +42 -29
- data/lib/rubocop/cop/lint/inherit_exception.rb +34 -23
- data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
- data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +51 -40
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +13 -8
- data/lib/rubocop/cop/lint/loop.rb +37 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
- data/lib/rubocop/cop/lint/multiple_compare.rb +48 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +54 -12
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +7 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +32 -23
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +22 -14
- data/lib/rubocop/cop/lint/percent_string_array.rb +42 -27
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +28 -19
- data/lib/rubocop/cop/lint/rand_one.rb +17 -8
- data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +24 -30
- data/lib/rubocop/cop/lint/rescue_exception.rb +21 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +90 -0
- data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +70 -0
- data/lib/rubocop/cop/lint/script_permission.rb +49 -0
- data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +78 -57
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +25 -2
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +18 -12
- data/lib/rubocop/cop/lint/syntax.rb +23 -21
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +26 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +43 -0
- data/lib/rubocop/cop/lint/unneeded_disable.rb +117 -56
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +167 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +72 -8
- data/lib/rubocop/cop/lint/unused_block_argument.rb +87 -27
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +75 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +40 -18
- data/lib/rubocop/cop/lint/useless_assignment.rb +45 -14
- data/lib/rubocop/cop/lint/useless_comparison.rb +8 -10
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +16 -2
- data/lib/rubocop/cop/lint/useless_setter_call.rb +57 -43
- data/lib/rubocop/cop/lint/void.rb +83 -23
- data/lib/rubocop/cop/message_annotator.rb +118 -0
- data/lib/rubocop/cop/metrics/abc_size.rb +3 -4
- data/lib/rubocop/cop/metrics/block_length.rb +32 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +21 -10
- data/lib/rubocop/cop/metrics/class_length.rb +3 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -4
- data/lib/rubocop/cop/metrics/line_length.rb +67 -14
- data/lib/rubocop/cop/metrics/method_length.rb +10 -10
- data/lib/rubocop/cop/metrics/module_length.rb +3 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +15 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +5 -6
- data/lib/rubocop/cop/mixin/alignment.rb +70 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -1
- data/lib/rubocop/cop/mixin/array_hash_indentation.rb +26 -22
- data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
- data/lib/rubocop/cop/mixin/array_syntax.rb +4 -12
- data/lib/rubocop/cop/mixin/check_assignment.rb +6 -7
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -1
- data/lib/rubocop/cop/mixin/code_length.rb +4 -3
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +21 -16
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +48 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -4
- data/lib/rubocop/cop/mixin/configurable_naming.rb +5 -35
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
- data/lib/rubocop/cop/mixin/def_node.rb +29 -0
- data/lib/rubocop/cop/mixin/documentation_comment.rb +46 -0
- data/lib/rubocop/cop/mixin/duplication.rb +46 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +119 -27
- data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +11 -27
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +15 -11
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +15 -13
- data/lib/rubocop/cop/mixin/hash_alignment.rb +116 -0
- data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
- data/lib/rubocop/cop/mixin/integer_node.rb +2 -1
- data/lib/rubocop/cop/mixin/match_range.rb +4 -6
- data/lib/rubocop/cop/mixin/method_complexity.rb +33 -8
- data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
- data/lib/rubocop/cop/mixin/min_body_length.rb +2 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +100 -66
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +49 -51
- data/lib/rubocop/cop/mixin/negative_conditional.rb +18 -13
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +1 -25
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +48 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +2 -8
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/percent_literal.rb +69 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +16 -5
- data/lib/rubocop/cop/mixin/rescue_node.rb +23 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +3 -1
- data/lib/rubocop/cop/mixin/safe_mode.rb +22 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +8 -10
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +10 -14
- data/lib/rubocop/cop/mixin/statement_modifier.rb +29 -32
- data/lib/rubocop/cop/mixin/string_help.rb +3 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -15
- data/lib/rubocop/cop/mixin/surrounding_space.rb +78 -9
- data/lib/rubocop/cop/mixin/target_rails_version.rb +16 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
- data/lib/rubocop/cop/mixin/too_many_lines.rb +39 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +37 -38
- data/lib/rubocop/cop/mixin/unused_argument.rb +6 -16
- data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
- data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +36 -5
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +42 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/naming/constant_name.rb +58 -0
- data/lib/rubocop/cop/{style → naming}/file_name.rb +72 -29
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
- data/lib/rubocop/cop/naming/method_name.rb +40 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
- data/lib/rubocop/cop/naming/variable_name.rb +50 -0
- data/lib/rubocop/cop/naming/variable_number.rb +61 -0
- data/lib/rubocop/cop/offense.rb +9 -5
- data/lib/rubocop/cop/performance/caller.rb +69 -0
- data/lib/rubocop/cop/performance/case_when_splat.rb +65 -89
- data/lib/rubocop/cop/performance/casecmp.rb +37 -25
- data/lib/rubocop/cop/performance/compare_with_block.rb +117 -0
- data/lib/rubocop/cop/performance/count.rb +33 -43
- data/lib/rubocop/cop/performance/detect.rb +30 -31
- data/lib/rubocop/cop/performance/double_start_end_with.rb +55 -26
- data/lib/rubocop/cop/performance/end_with.rb +9 -9
- data/lib/rubocop/cop/performance/fixed_size.rb +21 -17
- data/lib/rubocop/cop/performance/flat_map.rb +30 -33
- data/lib/rubocop/cop/performance/hash_each_methods.rb +129 -0
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +14 -14
- data/lib/rubocop/cop/performance/range_include.rb +5 -4
- data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -29
- data/lib/rubocop/cop/performance/redundant_match.rb +19 -15
- data/lib/rubocop/cop/performance/redundant_merge.rb +100 -52
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +17 -14
- data/lib/rubocop/cop/performance/regexp_match.rb +224 -0
- data/lib/rubocop/cop/performance/reverse_each.rb +3 -6
- data/lib/rubocop/cop/performance/sample.rb +84 -83
- data/lib/rubocop/cop/performance/size.rb +22 -15
- data/lib/rubocop/cop/performance/start_with.rb +9 -9
- data/lib/rubocop/cop/performance/string_replacement.rb +35 -70
- data/lib/rubocop/cop/performance/times_map.rb +33 -24
- data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
- data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
- data/lib/rubocop/cop/rails/action_filter.rb +67 -47
- data/lib/rubocop/cop/rails/active_support_aliases.rb +68 -0
- data/lib/rubocop/cop/rails/application_job.rb +40 -0
- data/lib/rubocop/cop/rails/application_record.rb +40 -0
- data/lib/rubocop/cop/rails/blank.rb +142 -0
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
- data/lib/rubocop/cop/rails/date.rb +47 -42
- data/lib/rubocop/cop/rails/delegate.rb +55 -33
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +51 -0
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +82 -0
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +45 -0
- data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
- data/lib/rubocop/cop/rails/exit.rb +17 -11
- data/lib/rubocop/cop/rails/file_path.rb +72 -0
- data/lib/rubocop/cop/rails/find_by.rb +14 -20
- data/lib/rubocop/cop/rails/find_each.rb +8 -21
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +9 -2
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +84 -0
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +102 -0
- data/lib/rubocop/cop/rails/inverse_of.rb +218 -0
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
- data/lib/rubocop/cop/rails/not_null_column.rb +67 -0
- data/lib/rubocop/cop/rails/output.rb +15 -13
- data/lib/rubocop/cop/rails/output_safety.rb +65 -17
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +30 -29
- data/lib/rubocop/cop/rails/presence.rb +118 -0
- data/lib/rubocop/cop/rails/present.rb +143 -0
- data/lib/rubocop/cop/rails/read_write_attribute.rb +20 -26
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +133 -0
- data/lib/rubocop/cop/rails/relative_date_constant.rb +88 -0
- data/lib/rubocop/cop/rails/request_referer.rb +28 -13
- data/lib/rubocop/cop/rails/reversible_migration.rb +281 -0
- data/lib/rubocop/cop/rails/safe_navigation.rb +90 -0
- data/lib/rubocop/cop/rails/save_bang.rb +104 -19
- data/lib/rubocop/cop/rails/scope_args.rb +5 -10
- data/lib/rubocop/cop/rails/skips_model_validations.rb +70 -0
- data/lib/rubocop/cop/rails/time_zone.rb +34 -21
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +17 -14
- data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
- data/lib/rubocop/cop/rails/validation.rb +16 -20
- data/lib/rubocop/cop/registry.rb +172 -0
- data/lib/rubocop/cop/security/eval.rb +30 -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/yaml_load.rb +37 -0
- data/lib/rubocop/cop/severity.rb +1 -2
- data/lib/rubocop/cop/style/alias.rb +54 -33
- data/lib/rubocop/cop/style/and_or.rb +77 -63
- data/lib/rubocop/cop/style/array_join.rb +13 -9
- data/lib/rubocop/cop/style/ascii_comments.rb +25 -7
- data/lib/rubocop/cop/style/attr.rb +24 -11
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -16
- data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -11
- data/lib/rubocop/cop/style/begin_block.rb +1 -2
- data/lib/rubocop/cop/style/block_comments.rb +20 -11
- data/lib/rubocop/cop/style/block_delimiters.rb +122 -51
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +142 -54
- data/lib/rubocop/cop/style/case_equality.rb +15 -4
- data/lib/rubocop/cop/style/character_literal.rb +12 -5
- data/lib/rubocop/cop/style/class_and_module_children.rb +85 -6
- data/lib/rubocop/cop/style/class_check.rb +35 -19
- data/lib/rubocop/cop/style/class_methods.rb +13 -14
- data/lib/rubocop/cop/style/class_vars.rb +5 -5
- data/lib/rubocop/cop/style/collection_methods.rb +12 -13
- data/lib/rubocop/cop/style/colon_method_call.rb +24 -16
- data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
- data/lib/rubocop/cop/style/command_literal.rb +98 -32
- data/lib/rubocop/cop/style/comment_annotation.rb +41 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +161 -112
- data/lib/rubocop/cop/style/copyright.rb +32 -34
- data/lib/rubocop/cop/style/date_time.rb +44 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +32 -9
- data/lib/rubocop/cop/style/dir.rb +48 -0
- data/lib/rubocop/cop/style/documentation.rb +44 -58
- data/lib/rubocop/cop/style/documentation_method.rb +76 -0
- data/lib/rubocop/cop/style/double_negation.rb +3 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +14 -13
- data/lib/rubocop/cop/style/each_with_object.rb +28 -25
- data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +18 -30
- data/lib/rubocop/cop/style/empty_else.rb +82 -51
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
- data/lib/rubocop/cop/style/empty_literal.rb +76 -48
- data/lib/rubocop/cop/style/empty_method.rb +112 -0
- data/lib/rubocop/cop/style/encoding.rb +10 -40
- data/lib/rubocop/cop/style/end_block.rb +1 -2
- data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
- data/lib/rubocop/cop/style/even_odd.rb +25 -44
- data/lib/rubocop/cop/style/flip_flop.rb +13 -3
- data/lib/rubocop/cop/style/for.rb +19 -15
- data/lib/rubocop/cop/style/format_string.rb +88 -42
- data/lib/rubocop/cop/style/format_string_token.rb +163 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +90 -15
- data/lib/rubocop/cop/style/global_vars.rb +14 -5
- data/lib/rubocop/cop/style/guard_clause.rb +22 -62
- data/lib/rubocop/cop/style/hash_syntax.rb +109 -59
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +73 -32
- data/lib/rubocop/cop/style/if_inside_else.rb +16 -20
- data/lib/rubocop/cop/style/if_unless_modifier.rb +48 -39
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +6 -12
- data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -2
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -7
- data/lib/rubocop/cop/style/infinite_loop.rb +33 -32
- data/lib/rubocop/cop/style/inline_comment.rb +17 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +149 -0
- data/lib/rubocop/cop/style/lambda.rb +66 -63
- data/lib/rubocop/cop/style/lambda_call.rb +50 -20
- data/lib/rubocop/cop/style/line_end_concatenation.rb +38 -17
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +90 -0
- data/lib/rubocop/cop/style/{method_call_parentheses.rb → method_call_without_args_parentheses.rb} +32 -25
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +9 -9
- data/lib/rubocop/cop/style/method_def_parentheses.rb +101 -29
- data/lib/rubocop/cop/style/method_missing.rb +14 -20
- data/lib/rubocop/cop/style/min_max.rb +68 -0
- data/lib/rubocop/cop/style/missing_else.rb +61 -21
- data/lib/rubocop/cop/style/mixin_grouping.rb +145 -0
- data/lib/rubocop/cop/style/mixin_usage.rb +82 -0
- data/lib/rubocop/cop/style/module_function.rb +44 -18
- data/lib/rubocop/cop/style/multiline_block_chain.rb +8 -15
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +21 -14
- data/lib/rubocop/cop/style/multiline_memoization.rb +93 -0
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +21 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +77 -0
- data/lib/rubocop/cop/style/mutable_constant.rb +17 -9
- data/lib/rubocop/cop/style/negated_if.rb +76 -25
- data/lib/rubocop/cop/style/negated_while.rb +4 -22
- data/lib/rubocop/cop/style/nested_modifier.rb +17 -47
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +32 -28
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -6
- data/lib/rubocop/cop/style/next.rb +72 -53
- data/lib/rubocop/cop/style/nil_comparison.rb +10 -14
- data/lib/rubocop/cop/style/non_nil_check.rb +69 -62
- data/lib/rubocop/cop/style/not.rb +19 -13
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +16 -7
- data/lib/rubocop/cop/style/numeric_literals.rb +33 -12
- data/lib/rubocop/cop/style/numeric_predicate.rb +30 -32
- data/lib/rubocop/cop/style/one_line_conditional.rb +21 -17
- data/lib/rubocop/cop/style/option_hash.rb +11 -37
- data/lib/rubocop/cop/style/optional_arguments.rb +20 -9
- data/lib/rubocop/cop/style/or_assignment.rb +88 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +83 -64
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +37 -19
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +50 -15
- data/lib/rubocop/cop/style/percent_q_literals.rb +40 -17
- data/lib/rubocop/cop/style/perl_backrefs.rb +9 -3
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +48 -14
- data/lib/rubocop/cop/style/proc.rb +13 -10
- data/lib/rubocop/cop/style/raise_args.rb +46 -50
- data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +16 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -5
- data/lib/rubocop/cop/style/redundant_freeze.rb +7 -10
- data/lib/rubocop/cop/style/redundant_parentheses.rb +70 -31
- data/lib/rubocop/cop/style/redundant_return.rb +61 -23
- data/lib/rubocop/cop/style/redundant_self.rb +62 -60
- data/lib/rubocop/cop/style/regexp_literal.rb +100 -34
- data/lib/rubocop/cop/style/rescue_modifier.rb +15 -17
- data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
- data/lib/rubocop/cop/style/return_nil.rb +89 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +197 -0
- data/lib/rubocop/cop/style/self_assignment.rb +20 -17
- data/lib/rubocop/cop/style/semicolon.rb +25 -17
- data/lib/rubocop/cop/style/send.rb +14 -4
- data/lib/rubocop/cop/style/signal_exception.rb +105 -7
- data/lib/rubocop/cop/style/single_line_block_params.rb +27 -21
- data/lib/rubocop/cop/style/single_line_methods.rb +45 -31
- data/lib/rubocop/cop/style/special_global_vars.rb +32 -28
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +24 -53
- data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
- data/lib/rubocop/cop/style/string_literals.rb +31 -5
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +20 -2
- data/lib/rubocop/cop/style/string_methods.rb +22 -9
- data/lib/rubocop/cop/style/struct_inheritance.rb +5 -17
- data/lib/rubocop/cop/style/symbol_array.rb +39 -65
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -2
- data/lib/rubocop/cop/style/symbol_proc.rb +35 -52
- data/lib/rubocop/cop/style/ternary_parentheses.rb +143 -42
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +31 -20
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +26 -8
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +97 -37
- data/lib/rubocop/cop/style/trivial_accessors.rb +72 -66
- data/lib/rubocop/cop/style/unless_else.rb +19 -13
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +24 -10
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +22 -24
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +28 -22
- data/lib/rubocop/cop/style/variable_interpolation.rb +23 -10
- data/lib/rubocop/cop/style/when_then.rb +18 -4
- data/lib/rubocop/cop/style/while_until_do.rb +34 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +32 -12
- data/lib/rubocop/cop/style/word_array.rb +45 -102
- data/lib/rubocop/cop/style/yoda_condition.rb +107 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +55 -32
- data/lib/rubocop/cop/team.rb +33 -35
- data/lib/rubocop/cop/util.rb +120 -54
- data/lib/rubocop/cop/variable_force/assignment.rb +5 -9
- data/lib/rubocop/cop/variable_force/branch.rb +318 -0
- data/lib/rubocop/cop/variable_force/branchable.rb +21 -0
- data/lib/rubocop/cop/variable_force/reference.rb +1 -2
- data/lib/rubocop/cop/variable_force/scope.rb +37 -26
- data/lib/rubocop/cop/variable_force/variable.rb +12 -12
- data/lib/rubocop/cop/variable_force/variable_table.rb +3 -4
- data/lib/rubocop/cop/variable_force.rb +72 -39
- data/lib/rubocop/error.rb +0 -1
- data/lib/rubocop/formatter/base_formatter.rb +4 -9
- data/lib/rubocop/formatter/clang_style_formatter.rb +2 -3
- data/lib/rubocop/formatter/colorizable.rb +9 -10
- data/lib/rubocop/formatter/disabled_config_formatter.rb +48 -35
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +0 -1
- data/lib/rubocop/formatter/file_list_formatter.rb +0 -1
- data/lib/rubocop/formatter/formatter_set.rb +16 -13
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +6 -1
- data/lib/rubocop/formatter/html_formatter.rb +5 -5
- data/lib/rubocop/formatter/json_formatter.rb +9 -4
- data/lib/rubocop/formatter/offense_count_formatter.rb +2 -1
- data/lib/rubocop/formatter/progress_formatter.rb +0 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +7 -17
- data/lib/rubocop/formatter/tap_formatter.rb +71 -0
- data/lib/rubocop/formatter/text_util.rb +0 -1
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +6 -5
- data/lib/rubocop/magic_comment.rb +210 -0
- data/lib/rubocop/name_similarity.rb +0 -1
- data/lib/rubocop/node_pattern.rb +181 -118
- data/lib/rubocop/options.rb +154 -88
- data/lib/rubocop/path_util.rb +38 -4
- data/lib/rubocop/platform.rb +11 -0
- data/lib/rubocop/processed_source.rb +23 -20
- data/lib/rubocop/rake_task.rb +16 -24
- data/lib/rubocop/remote_config.rb +40 -13
- data/lib/rubocop/result_cache.rb +33 -24
- data/lib/rubocop/rspec/cop_helper.rb +21 -7
- data/lib/rubocop/rspec/expect_offense.rb +165 -0
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +1 -2
- data/lib/rubocop/rspec/shared_contexts.rb +24 -9
- data/lib/rubocop/rspec/shared_examples.rb +10 -19
- data/lib/rubocop/rspec/support.rb +5 -5
- data/lib/rubocop/runner.rb +74 -39
- data/lib/rubocop/string_interpreter.rb +0 -1
- data/lib/rubocop/string_util.rb +11 -6
- data/lib/rubocop/target_finder.rb +70 -8
- data/lib/rubocop/token.rb +79 -2
- data/lib/rubocop/version.rb +2 -5
- data/lib/rubocop/warning.rb +0 -1
- data/lib/rubocop.rb +569 -398
- metadata +301 -112
- data/lib/rubocop/ast_node/builder.rb +0 -31
- data/lib/rubocop/ast_node/sexp.rb +0 -14
- data/lib/rubocop/ast_node.rb +0 -623
- data/lib/rubocop/cop/lint/eval.rb +0 -23
- data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -39
- data/lib/rubocop/cop/lint/useless_array_splat.rb +0 -56
- data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -42
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -152
- data/lib/rubocop/cop/mixin/hash_node.rb +0 -15
- data/lib/rubocop/cop/mixin/if_node.rb +0 -37
- data/lib/rubocop/cop/mixin/on_method_def.rb +0 -31
- data/lib/rubocop/cop/mixin/space_inside.rb +0 -79
- data/lib/rubocop/cop/performance/hash_each.rb +0 -86
- data/lib/rubocop/cop/performance/push_splat.rb +0 -47
- data/lib/rubocop/cop/style/accessor_method_name.rb +0 -46
- data/lib/rubocop/cop/style/align_array.rb +0 -21
- data/lib/rubocop/cop/style/align_hash.rb +0 -256
- data/lib/rubocop/cop/style/case_indentation.rb +0 -92
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -30
- data/lib/rubocop/cop/style/constant_name.rb +0 -30
- data/lib/rubocop/cop/style/empty_line_between_defs.rb +0 -76
- data/lib/rubocop/cop/style/empty_lines_around_class_body.rb +0 -40
- data/lib/rubocop/cop/style/end_of_line.rb +0 -31
- data/lib/rubocop/cop/style/initial_indentation.rb +0 -38
- data/lib/rubocop/cop/style/leading_comment_space.rb +0 -33
- data/lib/rubocop/cop/style/method_name.rb +0 -29
- data/lib/rubocop/cop/style/multiline_method_call_indentation.rb +0 -176
- data/lib/rubocop/cop/style/op_method.rb +0 -44
- data/lib/rubocop/cop/style/predicate_name.rb +0 -68
- data/lib/rubocop/cop/style/space_after_comma.rb +0 -22
- data/lib/rubocop/cop/style/space_after_not.rb +0 -42
- data/lib/rubocop/cop/style/space_around_operators.rb +0 -132
- data/lib/rubocop/cop/style/space_before_block_braces.rb +0 -65
- data/lib/rubocop/cop/style/space_before_comma.rb +0 -17
- data/lib/rubocop/cop/style/space_before_semicolon.rb +0 -17
- data/lib/rubocop/cop/style/space_inside_block_braces.rb +0 -166
- data/lib/rubocop/cop/style/space_inside_brackets.rb +0 -21
- data/lib/rubocop/cop/style/space_inside_parens.rb +0 -17
- data/lib/rubocop/cop/style/space_inside_string_interpolation.rb +0 -52
- data/lib/rubocop/cop/style/variable_name.rb +0 -40
- data/lib/rubocop/cop/variable_force/locatable.rb +0 -197
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module RuboCop
|
@@ -7,9 +6,11 @@ module RuboCop
|
|
7
6
|
# Helper module to provide common methods to classes needed for the
|
8
7
|
# ConditionalAssignment Cop.
|
9
8
|
module ConditionalAssignmentHelper
|
9
|
+
extend NodePattern::Macros
|
10
|
+
|
10
11
|
EQUAL = '='.freeze
|
11
12
|
END_ALIGNMENT = 'Lint/EndAlignment'.freeze
|
12
|
-
ALIGN_WITH = '
|
13
|
+
ALIGN_WITH = 'EnforcedStyleAlignWith'.freeze
|
13
14
|
KEYWORD = 'keyword'.freeze
|
14
15
|
|
15
16
|
# `elsif` branches show up in the `node` as an `else`. We need
|
@@ -32,16 +33,15 @@ module RuboCop
|
|
32
33
|
branch.begin_type? ? [*branch].last : branch
|
33
34
|
end
|
34
35
|
|
36
|
+
# rubocop:disable Metrics/AbcSize
|
35
37
|
def lhs(node)
|
36
38
|
case node.type
|
37
39
|
when :send
|
38
40
|
lhs_for_send(node)
|
39
41
|
when :op_asgn
|
40
42
|
"#{node.children[0].source} #{node.children[1]}= "
|
41
|
-
when :and_asgn
|
42
|
-
"#{node.children[0].source}
|
43
|
-
when :or_asgn
|
44
|
-
"#{node.children[0].source} ||= "
|
43
|
+
when :and_asgn, :or_asgn
|
44
|
+
"#{node.children[0].source} #{node.loc.operator.source} "
|
45
45
|
when :casgn
|
46
46
|
"#{node.children[1]} = "
|
47
47
|
when *ConditionalAssignment::VARIABLE_ASSIGNMENT_TYPES
|
@@ -50,17 +50,21 @@ module RuboCop
|
|
50
50
|
node.source
|
51
51
|
end
|
52
52
|
end
|
53
|
+
# rubocop:enable Metrics/AbcSize
|
53
54
|
|
54
55
|
def indent(cop, source)
|
55
|
-
|
56
|
-
|
57
|
-
cop.config[END_ALIGNMENT][ALIGN_WITH] == KEYWORD
|
56
|
+
conf = cop.config.for_cop(END_ALIGNMENT)
|
57
|
+
if conf[ALIGN_WITH] == KEYWORD
|
58
58
|
' ' * source.length
|
59
59
|
else
|
60
60
|
''
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
+
def end_with_eq?(sym)
|
65
|
+
sym.to_s.end_with?(EQUAL)
|
66
|
+
end
|
67
|
+
|
64
68
|
private
|
65
69
|
|
66
70
|
def expand_elsif(node, elsif_branches = [])
|
@@ -76,27 +80,35 @@ module RuboCop
|
|
76
80
|
end
|
77
81
|
|
78
82
|
def lhs_for_send(node)
|
79
|
-
receiver = node.receiver
|
83
|
+
receiver = node.receiver ? node.receiver.source : ''
|
80
84
|
|
81
|
-
if node.
|
82
|
-
indices = node.
|
85
|
+
if node.method?(:[]=)
|
86
|
+
indices = node.arguments[0...-1].map(&:source).join(', ')
|
83
87
|
"#{receiver}[#{indices}] = "
|
84
|
-
elsif node.
|
85
|
-
![:!=, :==, :===, :>=, :<=].include?(node.method_name)
|
88
|
+
elsif node.setter_method?
|
86
89
|
"#{receiver}.#{node.method_name[0...-1]} = "
|
87
90
|
else
|
88
91
|
"#{receiver} #{node.method_name} "
|
89
92
|
end
|
90
93
|
end
|
94
|
+
|
95
|
+
def setter_method?(method_name)
|
96
|
+
method_name.to_s.end_with?(EQUAL) &&
|
97
|
+
!%i[!= == === >= <=].include?(method_name)
|
98
|
+
end
|
99
|
+
|
100
|
+
def assignment_rhs_exist?(node)
|
101
|
+
parent = node.parent
|
102
|
+
return true unless parent
|
103
|
+
!(parent.mlhs_type? || parent.resbody_type?)
|
104
|
+
end
|
91
105
|
end
|
92
106
|
|
93
107
|
# Check for `if` and `case` statements where each branch is used for
|
94
108
|
# assignment to the same variable when using the return of the
|
95
109
|
# condition can be used instead.
|
96
110
|
#
|
97
|
-
# @example
|
98
|
-
# EnforcedStyle: assign_to_condition
|
99
|
-
#
|
111
|
+
# @example EnforcedStyle: assign_to_condition (default)
|
100
112
|
# # bad
|
101
113
|
# if foo
|
102
114
|
# bar = 1
|
@@ -141,7 +153,7 @@ module RuboCop
|
|
141
153
|
# 2
|
142
154
|
# end
|
143
155
|
#
|
144
|
-
#
|
156
|
+
# @example EnforcedStyle: assign_inside_condition
|
145
157
|
# # bad
|
146
158
|
# bar = if foo
|
147
159
|
# 1
|
@@ -186,7 +198,6 @@ module RuboCop
|
|
186
198
|
# bar = 2
|
187
199
|
# end
|
188
200
|
class ConditionalAssignment < Cop
|
189
|
-
include IfNode
|
190
201
|
include ConditionalAssignmentHelper
|
191
202
|
include ConfigurableEnforcedStyle
|
192
203
|
include IgnoredNode
|
@@ -196,24 +207,30 @@ module RuboCop
|
|
196
207
|
ASSIGN_TO_CONDITION_MSG =
|
197
208
|
'Assign variables inside of conditionals'.freeze
|
198
209
|
VARIABLE_ASSIGNMENT_TYPES =
|
199
|
-
[
|
200
|
-
ASSIGNMENT_TYPES =
|
201
|
-
|
202
|
-
IF = 'if'.freeze
|
203
|
-
UNLESS = 'unless'.freeze
|
210
|
+
%i[casgn cvasgn gvasgn ivasgn lvasgn].freeze
|
211
|
+
ASSIGNMENT_TYPES = VARIABLE_ASSIGNMENT_TYPES +
|
212
|
+
%i[and_asgn or_asgn op_asgn masgn].freeze
|
204
213
|
LINE_LENGTH = 'Metrics/LineLength'.freeze
|
205
|
-
INDENTATION_WIDTH = '
|
214
|
+
INDENTATION_WIDTH = 'Layout/IndentationWidth'.freeze
|
206
215
|
ENABLED = 'Enabled'.freeze
|
207
216
|
MAX = 'Max'.freeze
|
208
217
|
SINGLE_LINE_CONDITIONS_ONLY = 'SingleLineConditionsOnly'.freeze
|
209
218
|
WIDTH = 'Width'.freeze
|
210
|
-
|
211
|
-
|
219
|
+
|
220
|
+
def_node_matcher :condition?, '{if case}'
|
221
|
+
|
222
|
+
# The shovel operator `<<` does not have its own type. It is a `send`
|
223
|
+
# type.
|
224
|
+
def_node_matcher :assignment_type?, <<-PATTERN
|
225
|
+
{
|
226
|
+
#{ASSIGNMENT_TYPES.join(' ')}
|
227
|
+
(send _recv {:[]= :<< :=~ :!~ :<=> #end_with_eq?} ...)
|
228
|
+
}
|
229
|
+
PATTERN
|
212
230
|
|
213
231
|
ASSIGNMENT_TYPES.each do |type|
|
214
232
|
define_method "on_#{type}" do |node|
|
215
233
|
return if part_of_ignored_node?(node)
|
216
|
-
return unless style == :assign_inside_condition
|
217
234
|
|
218
235
|
check_assignment_to_condition(node)
|
219
236
|
end
|
@@ -221,45 +238,30 @@ module RuboCop
|
|
221
238
|
|
222
239
|
def on_send(node)
|
223
240
|
return unless assignment_type?(node)
|
224
|
-
return unless style == :assign_inside_condition
|
225
241
|
|
226
242
|
check_assignment_to_condition(node)
|
227
243
|
end
|
228
244
|
|
229
|
-
def check_assignment_to_condition(node)
|
230
|
-
ignore_node(node)
|
231
|
-
|
232
|
-
assignment = assignment_node(node)
|
233
|
-
return unless condition?(assignment)
|
234
|
-
|
235
|
-
_condition, *branches, else_branch = *assignment
|
236
|
-
return unless else_branch # empty else
|
237
|
-
return if single_line_conditions_only? &&
|
238
|
-
[*branches, else_branch].any?(&:begin_type?)
|
239
|
-
|
240
|
-
add_offense(node, :expression, ASSIGN_TO_CONDITION_MSG)
|
241
|
-
end
|
242
|
-
|
243
245
|
def on_if(node)
|
244
246
|
return unless style == :assign_to_condition
|
245
|
-
return if elsif?
|
247
|
+
return if node.elsif?
|
246
248
|
|
247
|
-
|
249
|
+
else_branch = node.else_branch
|
248
250
|
elsif_branches, else_branch = expand_elses(else_branch)
|
249
|
-
return unless else_branch # empty else
|
250
251
|
|
251
|
-
|
252
|
+
return unless else_branch
|
253
|
+
|
254
|
+
branches = [node.if_branch, *elsif_branches, else_branch]
|
252
255
|
|
253
256
|
check_node(node, branches)
|
254
257
|
end
|
255
258
|
|
256
259
|
def on_case(node)
|
257
260
|
return unless style == :assign_to_condition
|
258
|
-
|
259
|
-
return unless else_branch # empty else
|
261
|
+
return unless node.else_branch
|
260
262
|
|
261
|
-
when_branches = expand_when_branches(when_branches)
|
262
|
-
branches = [*when_branches, else_branch]
|
263
|
+
when_branches = expand_when_branches(node.when_branches)
|
264
|
+
branches = [*when_branches, node.else_branch]
|
263
265
|
|
264
266
|
check_node(node, branches)
|
265
267
|
end
|
@@ -274,35 +276,65 @@ module RuboCop
|
|
274
276
|
|
275
277
|
private
|
276
278
|
|
279
|
+
def check_assignment_to_condition(node)
|
280
|
+
return unless candidate_node?(node)
|
281
|
+
|
282
|
+
ignore_node(node)
|
283
|
+
|
284
|
+
assignment = assignment_node(node)
|
285
|
+
return unless candidate_condition?(assignment)
|
286
|
+
|
287
|
+
_condition, *branches, else_branch = *assignment
|
288
|
+
|
289
|
+
return unless else_branch
|
290
|
+
return if allowed_single_line?([*branches, else_branch])
|
291
|
+
|
292
|
+
add_offense(node, message: ASSIGN_TO_CONDITION_MSG)
|
293
|
+
end
|
294
|
+
|
295
|
+
def candidate_node?(node)
|
296
|
+
style == :assign_inside_condition && assignment_rhs_exist?(node)
|
297
|
+
end
|
298
|
+
|
299
|
+
def_node_matcher :candidate_condition?, '[{if case} !#allowed_ternary?]'
|
300
|
+
|
301
|
+
def allowed_ternary?(assignment)
|
302
|
+
assignment.if_type? && assignment.ternary? && !include_ternary?
|
303
|
+
end
|
304
|
+
|
305
|
+
def allowed_single_line?(branches)
|
306
|
+
single_line_conditions_only? && branches.any?(&:begin_type?)
|
307
|
+
end
|
308
|
+
|
277
309
|
def assignment_node(node)
|
278
310
|
*_variable, assignment = *node
|
279
311
|
|
280
|
-
|
312
|
+
# ignore pseudo-assignments without rhs in for nodes
|
313
|
+
return if node.parent && node.parent.for_type?
|
314
|
+
|
315
|
+
if assignment.begin_type? && assignment.children.one?
|
281
316
|
assignment, = *assignment
|
282
317
|
end
|
283
318
|
|
284
319
|
assignment
|
285
320
|
end
|
286
321
|
|
287
|
-
def condition?(node)
|
288
|
-
CONDITION_TYPES.include?(node.type)
|
289
|
-
end
|
290
|
-
|
291
322
|
def move_assignment_outside_condition(node)
|
292
|
-
if
|
323
|
+
if node.case_type?
|
324
|
+
CaseCorrector.correct(self, node)
|
325
|
+
elsif node.ternary?
|
293
326
|
TernaryCorrector.correct(node)
|
294
|
-
elsif node.
|
327
|
+
elsif node.if?
|
295
328
|
IfCorrector.correct(self, node)
|
296
|
-
elsif node.
|
329
|
+
elsif node.unless?
|
297
330
|
UnlessCorrector.correct(self, node)
|
298
|
-
else
|
299
|
-
CaseCorrector.correct(self, node)
|
300
331
|
end
|
301
332
|
end
|
302
333
|
|
303
334
|
def move_assignment_inside_condition(node)
|
304
335
|
*_assignment, condition = *node
|
305
|
-
|
336
|
+
|
337
|
+
if ternary_condition?(condition)
|
306
338
|
TernaryCorrector.move_assignment_inside_condition(node)
|
307
339
|
elsif condition.case_type?
|
308
340
|
CaseCorrector.move_assignment_inside_condition(node)
|
@@ -311,6 +343,10 @@ module RuboCop
|
|
311
343
|
end
|
312
344
|
end
|
313
345
|
|
346
|
+
def ternary_condition?(node)
|
347
|
+
[node, node.children.first].any? { |n| n.if_type? && n.ternary? }
|
348
|
+
end
|
349
|
+
|
314
350
|
def lhs_all_match?(branches)
|
315
351
|
first_lhs = lhs(branches.first)
|
316
352
|
branches.all? { |branch| lhs(branch) == first_lhs }
|
@@ -318,35 +354,26 @@ module RuboCop
|
|
318
354
|
|
319
355
|
def assignment_types_match?(*nodes)
|
320
356
|
return unless assignment_type?(nodes.first)
|
321
|
-
first_type = nodes.first.type
|
322
|
-
nodes.all? { |node| node.type == first_type }
|
323
|
-
end
|
324
357
|
|
325
|
-
|
326
|
-
|
327
|
-
def assignment_type?(branch)
|
328
|
-
return true if ASSIGNMENT_TYPES.include?(branch.type)
|
358
|
+
nodes.map(&:type).uniq.one?
|
359
|
+
end
|
329
360
|
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
361
|
+
def check_node(node, branches)
|
362
|
+
return if allowed_ternary?(node)
|
363
|
+
return unless allowed_statements?(branches)
|
364
|
+
return if allowed_single_line?(branches)
|
365
|
+
return if correction_exceeds_line_limit?(node, branches)
|
335
366
|
|
336
|
-
|
367
|
+
add_offense(node)
|
337
368
|
end
|
338
369
|
|
339
|
-
def
|
340
|
-
return unless branches.all?
|
341
|
-
last_statements = branches.map { |branch| tail(branch) }
|
342
|
-
return unless lhs_all_match?(last_statements)
|
343
|
-
return if last_statements.any?(&:masgn_type?)
|
344
|
-
return unless assignment_types_match?(*last_statements)
|
370
|
+
def allowed_statements?(branches)
|
371
|
+
return false unless branches.all?
|
345
372
|
|
346
|
-
|
347
|
-
return if correction_exceeds_line_limit?(node, branches)
|
373
|
+
statements = branches.map { |branch| tail(branch) }
|
348
374
|
|
349
|
-
|
375
|
+
lhs_all_match?(statements) && statements.none?(&:masgn_type?) &&
|
376
|
+
assignment_types_match?(*statements)
|
350
377
|
end
|
351
378
|
|
352
379
|
# If `Metrics/LineLength` is enabled, we do not want to introduce an
|
@@ -357,37 +384,45 @@ module RuboCop
|
|
357
384
|
# of the longest line + the length of the corrected assignment is
|
358
385
|
# greater than the max configured line length
|
359
386
|
def correction_exceeds_line_limit?(node, branches)
|
360
|
-
return false unless
|
387
|
+
return false unless line_length_cop_enabled?
|
388
|
+
|
361
389
|
assignment = lhs(tail(branches[0]))
|
362
|
-
max_line_length = config.for_cop(LINE_LENGTH)[MAX]
|
363
|
-
indentation_width = config.for_cop(INDENTATION_WIDTH)[WIDTH] || 2
|
364
|
-
return true if longest_rhs(branches) + indentation_width +
|
365
|
-
assignment.length > max_line_length
|
366
390
|
|
391
|
+
longest_line_exceeds_line_limit?(node, assignment)
|
392
|
+
end
|
393
|
+
|
394
|
+
def longest_line_exceeds_line_limit?(node, assignment)
|
367
395
|
longest_line(node, assignment).length > max_line_length
|
368
396
|
end
|
369
397
|
|
370
398
|
def longest_line(node, assignment)
|
371
|
-
assignment_regex =
|
399
|
+
assignment_regex = /\s*#{Regexp.escape(assignment).gsub('\ ', '\s*')}/
|
372
400
|
lines = node.source.lines.map do |line|
|
373
401
|
line.chomp.sub(assignment_regex, '')
|
374
402
|
end
|
375
403
|
longest_line = lines.max_by(&:length)
|
376
|
-
|
404
|
+
assignment + longest_line
|
377
405
|
end
|
378
406
|
|
379
|
-
def
|
380
|
-
|
407
|
+
def line_length_cop_enabled?
|
408
|
+
config.for_cop(LINE_LENGTH)[ENABLED]
|
381
409
|
end
|
382
410
|
|
383
|
-
def
|
384
|
-
|
385
|
-
|
411
|
+
def max_line_length
|
412
|
+
config.for_cop(LINE_LENGTH)[MAX]
|
413
|
+
end
|
414
|
+
|
415
|
+
def indentation_width
|
416
|
+
config.for_cop(INDENTATION_WIDTH)[WIDTH] || 2
|
386
417
|
end
|
387
418
|
|
388
419
|
def single_line_conditions_only?
|
389
420
|
cop_config[SINGLE_LINE_CONDITIONS_ONLY]
|
390
421
|
end
|
422
|
+
|
423
|
+
def include_ternary?
|
424
|
+
cop_config['IncludeTernaryExpressions']
|
425
|
+
end
|
391
426
|
end
|
392
427
|
|
393
428
|
# Helper module to provide common methods to ConditionalAssignment
|
@@ -432,7 +467,15 @@ module RuboCop
|
|
432
467
|
|
433
468
|
def replace_branch_assignment(corrector, branch)
|
434
469
|
_variable, *_operator, assignment = *branch
|
435
|
-
|
470
|
+
source = assignment.source
|
471
|
+
|
472
|
+
replacement = if assignment.array_type? && !assignment.bracketed?
|
473
|
+
"[#{source}]"
|
474
|
+
else
|
475
|
+
source
|
476
|
+
end
|
477
|
+
|
478
|
+
corrector.replace(branch.source_range, replacement)
|
436
479
|
end
|
437
480
|
|
438
481
|
def correct_branches(corrector, branches)
|
@@ -450,21 +493,8 @@ module RuboCop
|
|
450
493
|
include ConditionalCorrectorHelper
|
451
494
|
|
452
495
|
def correct(node)
|
453
|
-
condition, if_branch, else_branch = *node
|
454
|
-
_variable, *_operator, if_rhs = *if_branch
|
455
|
-
_else_variable, *_operator, else_rhs = *else_branch
|
456
|
-
condition = condition.source
|
457
|
-
if_rhs = if_rhs.source
|
458
|
-
else_rhs = else_rhs.source
|
459
|
-
|
460
|
-
ternary = "#{condition} ? #{if_rhs} : #{else_rhs}"
|
461
|
-
if if_branch.send_type? && if_branch.method_name != :[]=
|
462
|
-
ternary = "(#{ternary})"
|
463
|
-
end
|
464
|
-
correction = "#{lhs(if_branch)}#{ternary}"
|
465
|
-
|
466
496
|
lambda do |corrector|
|
467
|
-
corrector.replace(node.source_range, correction)
|
497
|
+
corrector.replace(node.source_range, correction(node))
|
468
498
|
end
|
469
499
|
end
|
470
500
|
|
@@ -484,9 +514,28 @@ module RuboCop
|
|
484
514
|
|
485
515
|
private
|
486
516
|
|
517
|
+
def correction(node)
|
518
|
+
condition, if_branch, else_branch = *node
|
519
|
+
|
520
|
+
"#{lhs(if_branch)}#{ternary(condition, if_branch, else_branch)}"
|
521
|
+
end
|
522
|
+
|
523
|
+
def ternary(condition, if_branch, else_branch)
|
524
|
+
_variable, *_operator, if_rhs = *if_branch
|
525
|
+
_else_variable, *_operator, else_rhs = *else_branch
|
526
|
+
|
527
|
+
expr = "#{condition.source} ? #{if_rhs.source} : #{else_rhs.source}"
|
528
|
+
|
529
|
+
element_assignment?(if_branch) ? "(#{expr})" : expr
|
530
|
+
end
|
531
|
+
|
532
|
+
def element_assignment?(node)
|
533
|
+
node.send_type? && node.method_name != :[]=
|
534
|
+
end
|
535
|
+
|
487
536
|
def extract_branches(node)
|
488
537
|
*_var, rhs = *node
|
489
|
-
condition, = *rhs if rhs.begin_type? && rhs.children.
|
538
|
+
condition, = *rhs if rhs.begin_type? && rhs.children.one?
|
490
539
|
_condition, if_branch, else_branch = *(condition || rhs)
|
491
540
|
|
492
541
|
[if_branch, else_branch]
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module RuboCop
|
@@ -9,19 +8,43 @@ module RuboCop
|
|
9
8
|
# The default regexp for an acceptable copyright notice can be found in
|
10
9
|
# config/default.yml. The default can be changed as follows:
|
11
10
|
#
|
12
|
-
#
|
13
|
-
#
|
11
|
+
# Style/Copyright:
|
12
|
+
# Notice: '^Copyright (\(c\) )?2\d{3} Acme Inc'
|
14
13
|
#
|
15
14
|
# This regex string is treated as an unanchored regex. For each file
|
16
15
|
# that RuboCop scans, a comment that matches this regex must be found or
|
17
16
|
# an offense is reported.
|
18
17
|
#
|
19
18
|
class Copyright < Cop
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
MSG = 'Include a copyright notice matching /%<notice>s/ before ' \
|
20
|
+
'any code.'.freeze
|
21
|
+
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in' \
|
22
|
+
'your RuboCop config'.freeze
|
23
|
+
|
24
|
+
def investigate(processed_source)
|
25
|
+
return if notice.empty?
|
26
|
+
return if notice_found?(processed_source)
|
27
|
+
range = source_range(processed_source.buffer, 1, 0)
|
28
|
+
add_offense(insert_notice_before(processed_source),
|
29
|
+
location: range, message: format(MSG, notice: notice))
|
23
30
|
end
|
24
31
|
|
32
|
+
def autocorrect(token)
|
33
|
+
raise Warning, AUTOCORRECT_EMPTY_WARNING if autocorrect_notice.empty?
|
34
|
+
regex = Regexp.new(notice)
|
35
|
+
unless autocorrect_notice =~ regex
|
36
|
+
raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must " \
|
37
|
+
"match Notice /#{notice}/"
|
38
|
+
end
|
39
|
+
|
40
|
+
lambda do |corrector|
|
41
|
+
range = token.nil? ? range_between(0, 0) : token.pos
|
42
|
+
corrector.insert_before(range, "#{autocorrect_notice}\n")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
25
48
|
def notice
|
26
49
|
cop_config['Notice']
|
27
50
|
end
|
@@ -30,13 +53,6 @@ module RuboCop
|
|
30
53
|
cop_config['AutocorrectNotice']
|
31
54
|
end
|
32
55
|
|
33
|
-
def investigate(processed_source)
|
34
|
-
return if notice.empty?
|
35
|
-
return if notice_found?(processed_source)
|
36
|
-
range = source_range(processed_source.buffer, 1, 0)
|
37
|
-
add_offense(insert_notice_before(processed_source), range, message)
|
38
|
-
end
|
39
|
-
|
40
56
|
def insert_notice_before(processed_source)
|
41
57
|
token_index = 0
|
42
58
|
token_index += 1 if shebang_token?(processed_source, token_index)
|
@@ -47,43 +63,25 @@ module RuboCop
|
|
47
63
|
def shebang_token?(processed_source, token_index)
|
48
64
|
return false if token_index >= processed_source.tokens.size
|
49
65
|
token = processed_source.tokens[token_index]
|
50
|
-
token.
|
66
|
+
token.comment? && token.text =~ /^#!.*$/
|
51
67
|
end
|
52
68
|
|
53
69
|
def encoding_token?(processed_source, token_index)
|
54
70
|
return false if token_index >= processed_source.tokens.size
|
55
71
|
token = processed_source.tokens[token_index]
|
56
|
-
token.
|
57
|
-
token.text =~ /^#.*coding\s?[:=]\s?(?:UTF|utf)-8/
|
72
|
+
token.comment? && token.text =~ /^#.*coding\s?[:=]\s?(?:UTF|utf)-8/
|
58
73
|
end
|
59
74
|
|
60
75
|
def notice_found?(processed_source)
|
61
76
|
notice_found = false
|
62
77
|
notice_regexp = Regexp.new(notice)
|
63
78
|
processed_source.tokens.each do |token|
|
64
|
-
break unless token.
|
79
|
+
break unless token.comment?
|
65
80
|
notice_found = !(token.text =~ notice_regexp).nil?
|
66
81
|
break if notice_found
|
67
82
|
end
|
68
83
|
notice_found
|
69
84
|
end
|
70
|
-
|
71
|
-
def autocorrect(token)
|
72
|
-
raise Warning, 'An AutocorrectNotice must be defined in ' \
|
73
|
-
'your RuboCop config' if autocorrect_notice.empty?
|
74
|
-
regex = Regexp.new(notice)
|
75
|
-
raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must " \
|
76
|
-
"match Notice /#{notice}/" unless autocorrect_notice =~ regex
|
77
|
-
|
78
|
-
lambda do |corrector|
|
79
|
-
range = if token.nil?
|
80
|
-
Parser::Source::Range.new('', 0, 0)
|
81
|
-
else
|
82
|
-
token.pos
|
83
|
-
end
|
84
|
-
corrector.insert_before(range, "#{autocorrect_notice}\n")
|
85
|
-
end
|
86
|
-
end
|
87
85
|
end
|
88
86
|
end
|
89
87
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for uses of `DateTime` that should be replaced by
|
7
|
+
# `Date` or `Time`.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
#
|
11
|
+
# # bad - uses `DateTime` for current time
|
12
|
+
# DateTime.now
|
13
|
+
#
|
14
|
+
# # good - uses `Time` for current time
|
15
|
+
# Time.now
|
16
|
+
#
|
17
|
+
# # bad - uses `DateTime` for modern date
|
18
|
+
# DateTime.iso8601('2016-06-29')
|
19
|
+
#
|
20
|
+
# # good - uses `Date` for modern date
|
21
|
+
# Date.iso8601('2016-06-29')
|
22
|
+
#
|
23
|
+
# # good - uses `DateTime` with start argument for historical date
|
24
|
+
# DateTime.iso8601('1751-04-23', Date::ENGLAND)
|
25
|
+
class DateTime < Cop
|
26
|
+
MSG = 'Prefer Date or Time over DateTime.'.freeze
|
27
|
+
|
28
|
+
def_node_matcher :date_time?, <<-PATTERN
|
29
|
+
(send (const {nil? (cbase)} :DateTime) ...)
|
30
|
+
PATTERN
|
31
|
+
|
32
|
+
def_node_matcher :historic_date?, <<-PATTERN
|
33
|
+
(send _ _ _ (const (const nil? :Date) _))
|
34
|
+
PATTERN
|
35
|
+
|
36
|
+
def on_send(node)
|
37
|
+
return unless date_time?(node)
|
38
|
+
return if historic_date?(node)
|
39
|
+
add_offense(node)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module RuboCop
|
@@ -7,20 +6,44 @@ module RuboCop
|
|
7
6
|
# This cop checks for parentheses in the definition of a method,
|
8
7
|
# that does not take any arguments. Both instance and
|
9
8
|
# class/singleton methods are checked.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# def foo()
|
14
|
+
# # does a thing
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# def foo
|
19
|
+
# # does a thing
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# # also good
|
23
|
+
# def foo() does_a_thing end
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
#
|
27
|
+
# # bad
|
28
|
+
# def Baz.foo()
|
29
|
+
# # does a thing
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# # good
|
33
|
+
# def Baz.foo
|
34
|
+
# # does a thing
|
35
|
+
# end
|
10
36
|
class DefWithParentheses < Cop
|
11
|
-
include OnMethodDef
|
12
|
-
|
13
37
|
MSG = "Omit the parentheses in defs when the method doesn't accept " \
|
14
38
|
'any arguments.'.freeze
|
15
39
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
return if start_line == end_line
|
40
|
+
def on_def(node)
|
41
|
+
return if node.single_line?
|
42
|
+
return unless !node.arguments? && node.arguments.loc.begin
|
21
43
|
|
22
|
-
add_offense(
|
44
|
+
add_offense(node.arguments, location: :begin)
|
23
45
|
end
|
46
|
+
alias on_defs on_def
|
24
47
|
|
25
48
|
def autocorrect(node)
|
26
49
|
lambda do |corrector|
|