rubocop 0.29.1 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +73 -1
- data/README.md +11 -2
- data/config/default.yml +194 -6
- data/config/disabled.yml +25 -1
- data/config/enabled.yml +74 -12
- data/lib/rubocop.rb +19 -2
- data/lib/rubocop/config.rb +23 -3
- data/lib/rubocop/config_loader.rb +9 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +26 -0
- data/lib/rubocop/cop/cop.rb +33 -17
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +16 -4
- data/lib/rubocop/cop/lint/block_alignment.rb +5 -14
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +61 -0
- data/lib/rubocop/cop/lint/void.rb +11 -3
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +17 -0
- data/lib/rubocop/cop/performance/detect.rb +72 -0
- data/lib/rubocop/cop/performance/flat_map.rb +64 -0
- data/lib/rubocop/cop/performance/reverse_each.rb +43 -0
- data/lib/rubocop/cop/performance/sample.rb +58 -0
- data/lib/rubocop/cop/performance/size.rb +64 -0
- data/lib/rubocop/cop/rails/date.rb +121 -0
- data/lib/rubocop/cop/rails/find_by.rb +52 -0
- data/lib/rubocop/cop/rails/find_each.rb +41 -0
- data/lib/rubocop/cop/rails/time_zone.rb +93 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +45 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +186 -0
- data/lib/rubocop/cop/style/closing_parenthesis_indentation.rb +76 -0
- data/lib/rubocop/cop/style/command_literal.rb +120 -0
- data/lib/rubocop/cop/style/copyright.rb +87 -0
- data/lib/rubocop/cop/style/documentation.rb +32 -0
- data/lib/rubocop/cop/style/empty_else.rb +85 -16
- data/lib/rubocop/cop/style/encoding.rb +14 -2
- data/lib/rubocop/cop/style/end_of_line.rb +5 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +86 -23
- data/lib/rubocop/cop/style/if_unless_modifier.rb +15 -0
- data/lib/rubocop/cop/style/indentation_consistency.rb +13 -6
- data/lib/rubocop/cop/style/indentation_width.rb +34 -10
- data/lib/rubocop/cop/style/lambda.rb +32 -17
- data/lib/rubocop/cop/style/line_end_concatenation.rb +4 -0
- data/lib/rubocop/cop/style/missing_else.rb +72 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +89 -58
- data/lib/rubocop/cop/style/space_around_operators.rb +13 -2
- data/lib/rubocop/cop/style/space_before_block_braces.rb +3 -3
- data/lib/rubocop/cop/style/space_inside_block_braces.rb +9 -5
- data/lib/rubocop/cop/style/symbol_literal.rb +36 -0
- data/lib/rubocop/cop/style/trailing_blank_lines.rb +7 -0
- data/lib/rubocop/cop/style/trailing_comma.rb +21 -7
- data/lib/rubocop/cop/style/trivial_accessors.rb +17 -3
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +4 -6
- data/lib/rubocop/cop/style/while_until_modifier.rb +10 -0
- data/lib/rubocop/cop/util.rb +24 -19
- data/lib/rubocop/cop/variable_force.rb +14 -0
- data/lib/rubocop/cop/variable_force/reference.rb +10 -4
- data/lib/rubocop/formatter/html_formatter.rb +10 -4
- data/lib/rubocop/formatter/text_util.rb +5 -7
- data/lib/rubocop/options.rb +47 -45
- data/lib/rubocop/path_util.rb +12 -8
- data/lib/rubocop/processed_source.rb +12 -1
- data/lib/rubocop/rake_task.rb +2 -2
- data/lib/rubocop/version.rb +1 -1
- data/relnotes/v0.30.0.md +145 -0
- data/rubocop.gemspec +15 -3
- metadata +22 -545
- data/.gitignore +0 -54
- data/.rspec +0 -1
- data/.rubocop.yml +0 -11
- data/.rubocop_todo.yml +0 -28
- data/.travis.yml +0 -22
- data/Gemfile +0 -15
- data/Rakefile +0 -41
- data/lib/rubocop/cop/style/blocks.rb +0 -80
- data/lib/rubocop/cop/style/unneeded_percent_x.rb +0 -25
- data/logo/rubocop-final-logo.eps +0 -0
- data/spec/.rubocop.yml +0 -5
- data/spec/fixtures/html_formatter/expected.html +0 -495
- data/spec/fixtures/html_formatter/project/app/controllers/application_controller.rb +0 -5
- data/spec/fixtures/html_formatter/project/app/controllers/books_controller.rb +0 -74
- data/spec/fixtures/html_formatter/project/app/models/book.rb +0 -5
- data/spec/isolated_environment_spec.rb +0 -24
- data/spec/project_spec.rb +0 -119
- data/spec/rubocop/cli_spec.rb +0 -2740
- data/spec/rubocop/comment_config_spec.rb +0 -105
- data/spec/rubocop/config_loader_spec.rb +0 -377
- data/spec/rubocop/config_spec.rb +0 -235
- data/spec/rubocop/config_store_spec.rb +0 -53
- data/spec/rubocop/cop/commissioner_spec.rb +0 -85
- data/spec/rubocop/cop/cop_spec.rb +0 -135
- data/spec/rubocop/cop/corrector_spec.rb +0 -59
- data/spec/rubocop/cop/force_spec.rb +0 -29
- data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +0 -113
- data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +0 -35
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +0 -130
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +0 -533
- data/spec/rubocop/cop/lint/condition_position_spec.rb +0 -51
- data/spec/rubocop/cop/lint/debugger_spec.rb +0 -73
- data/spec/rubocop/cop/lint/def_end_alignment_spec.rb +0 -108
- data/spec/rubocop/cop/lint/deprecated_class_methods_spec.rb +0 -38
- data/spec/rubocop/cop/lint/duplicate_methods_spec.rb +0 -189
- data/spec/rubocop/cop/lint/else_layout_spec.rb +0 -65
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +0 -27
- data/spec/rubocop/cop/lint/empty_interpolation_spec.rb +0 -18
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +0 -91
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +0 -29
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +0 -39
- data/spec/rubocop/cop/lint/eval_spec.rb +0 -33
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +0 -30
- data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +0 -33
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +0 -172
- data/spec/rubocop/cop/lint/literal_in_interpolation_spec.rb +0 -31
- data/spec/rubocop/cop/lint/loop_spec.rb +0 -27
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +0 -57
- data/spec/rubocop/cop/lint/require_parentheses_spec.rb +0 -82
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +0 -123
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +0 -237
- data/spec/rubocop/cop/lint/space_before_first_arg_spec.rb +0 -66
- data/spec/rubocop/cop/lint/string_conversion_in_interpolation_spec.rb +0 -51
- data/spec/rubocop/cop/lint/syntax_spec.rb +0 -34
- data/spec/rubocop/cop/lint/underscore_prefixed_variable_name_spec.rb +0 -179
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +0 -63
- data/spec/rubocop/cop/lint/unused_block_argument_spec.rb +0 -231
- data/spec/rubocop/cop/lint/unused_method_argument_spec.rb +0 -278
- data/spec/rubocop/cop/lint/useless_access_modifier_spec.rb +0 -192
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +0 -1778
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +0 -30
- data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +0 -48
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +0 -211
- data/spec/rubocop/cop/lint/void_spec.rb +0 -64
- data/spec/rubocop/cop/metrics/abc_size_spec.rb +0 -109
- data/spec/rubocop/cop/metrics/block_nesting_spec.rb +0 -156
- data/spec/rubocop/cop/metrics/class_length_spec.rb +0 -131
- data/spec/rubocop/cop/metrics/cyclomatic_complexity_spec.rb +0 -204
- data/spec/rubocop/cop/metrics/line_length_spec.rb +0 -136
- data/spec/rubocop/cop/metrics/method_length_spec.rb +0 -147
- data/spec/rubocop/cop/metrics/parameter_lists_spec.rb +0 -44
- data/spec/rubocop/cop/metrics/perceived_complexity_spec.rb +0 -222
- data/spec/rubocop/cop/offense_spec.rb +0 -133
- data/spec/rubocop/cop/rails/action_filter_spec.rb +0 -64
- data/spec/rubocop/cop/rails/default_scope_spec.rb +0 -37
- data/spec/rubocop/cop/rails/delegate_spec.rb +0 -177
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +0 -13
- data/spec/rubocop/cop/rails/output_spec.rb +0 -37
- data/spec/rubocop/cop/rails/read_write_attribute_spec.rb +0 -130
- data/spec/rubocop/cop/rails/scope_args_spec.rb +0 -25
- data/spec/rubocop/cop/rails/validation_spec.rb +0 -28
- data/spec/rubocop/cop/severity_spec.rb +0 -113
- data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +0 -421
- data/spec/rubocop/cop/style/accessor_method_name_spec.rb +0 -81
- data/spec/rubocop/cop/style/alias_spec.rb +0 -59
- data/spec/rubocop/cop/style/align_array_spec.rb +0 -123
- data/spec/rubocop/cop/style/align_hash_spec.rb +0 -411
- data/spec/rubocop/cop/style/align_parameters_spec.rb +0 -431
- data/spec/rubocop/cop/style/and_or_spec.rb +0 -235
- data/spec/rubocop/cop/style/array_join_spec.rb +0 -29
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +0 -21
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +0 -36
- data/spec/rubocop/cop/style/attr_spec.rb +0 -29
- data/spec/rubocop/cop/style/bare_percent_literals_spec.rb +0 -132
- data/spec/rubocop/cop/style/begin_block_spec.rb +0 -13
- data/spec/rubocop/cop/style/block_comments_spec.rb +0 -45
- data/spec/rubocop/cop/style/block_end_newline_spec.rb +0 -61
- data/spec/rubocop/cop/style/blocks_spec.rb +0 -121
- data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +0 -288
- data/spec/rubocop/cop/style/case_equality_spec.rb +0 -13
- data/spec/rubocop/cop/style/case_indentation_spec.rb +0 -293
- data/spec/rubocop/cop/style/character_literal_spec.rb +0 -37
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +0 -40
- data/spec/rubocop/cop/style/class_and_module_children_spec.rb +0 -133
- data/spec/rubocop/cop/style/class_check_spec.rb +0 -41
- data/spec/rubocop/cop/style/class_methods_spec.rb +0 -80
- data/spec/rubocop/cop/style/class_vars_spec.rb +0 -19
- data/spec/rubocop/cop/style/collection_methods_spec.rb +0 -48
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +0 -65
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +0 -86
- data/spec/rubocop/cop/style/comment_indentation_spec.rb +0 -179
- data/spec/rubocop/cop/style/constant_name_spec.rb +0 -65
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +0 -43
- data/spec/rubocop/cop/style/deprecated_hash_methods_spec.rb +0 -45
- data/spec/rubocop/cop/style/documentation_spec.rb +0 -146
- data/spec/rubocop/cop/style/dot_position_spec.rb +0 -132
- data/spec/rubocop/cop/style/double_negation_spec.rb +0 -22
- data/spec/rubocop/cop/style/each_with_object_spec.rb +0 -73
- data/spec/rubocop/cop/style/else_alignment_spec.rb +0 -506
- data/spec/rubocop/cop/style/empty_else_spec.rb +0 -100
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +0 -135
- data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +0 -178
- data/spec/rubocop/cop/style/empty_lines_around_block_body_spec.rb +0 -103
- data/spec/rubocop/cop/style/empty_lines_around_class_body_spec.rb +0 -135
- data/spec/rubocop/cop/style/empty_lines_around_method_body_spec.rb +0 -90
- data/spec/rubocop/cop/style/empty_lines_around_module_body_spec.rb +0 -79
- data/spec/rubocop/cop/style/empty_lines_spec.rb +0 -51
- data/spec/rubocop/cop/style/empty_literal_spec.rb +0 -117
- data/spec/rubocop/cop/style/encoding_spec.rb +0 -139
- data/spec/rubocop/cop/style/end_block_spec.rb +0 -13
- data/spec/rubocop/cop/style/end_of_line_spec.rb +0 -65
- data/spec/rubocop/cop/style/even_odd_spec.rb +0 -164
- data/spec/rubocop/cop/style/extra_spacing_spec.rb +0 -68
- data/spec/rubocop/cop/style/file_name_spec.rb +0 -84
- data/spec/rubocop/cop/style/first_parameter_indentation_spec.rb +0 -304
- data/spec/rubocop/cop/style/flip_flop_spec.rb +0 -23
- data/spec/rubocop/cop/style/for_spec.rb +0 -105
- data/spec/rubocop/cop/style/format_string_spec.rb +0 -184
- data/spec/rubocop/cop/style/global_vars_spec.rb +0 -34
- data/spec/rubocop/cop/style/guard_clause_spec.rb +0 -172
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +0 -137
- data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +0 -146
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +0 -24
- data/spec/rubocop/cop/style/indent_array_spec.rb +0 -173
- data/spec/rubocop/cop/style/indent_hash_spec.rb +0 -367
- data/spec/rubocop/cop/style/indentation_consistency_spec.rb +0 -509
- data/spec/rubocop/cop/style/indentation_width_spec.rb +0 -885
- data/spec/rubocop/cop/style/infinite_loop_spec.rb +0 -48
- data/spec/rubocop/cop/style/inline_comment_spec.rb +0 -13
- data/spec/rubocop/cop/style/lambda_call_spec.rb +0 -65
- data/spec/rubocop/cop/style/lambda_spec.rb +0 -76
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +0 -64
- data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +0 -184
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +0 -59
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +0 -60
- data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +0 -108
- data/spec/rubocop/cop/style/method_name_spec.rb +0 -125
- data/spec/rubocop/cop/style/module_function_spec.rb +0 -24
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +0 -78
- data/spec/rubocop/cop/style/multiline_block_layout_spec.rb +0 -199
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +0 -134
- data/spec/rubocop/cop/style/multiline_operation_indentation_spec.rb +0 -464
- data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +0 -18
- data/spec/rubocop/cop/style/negated_if_spec.rb +0 -102
- data/spec/rubocop/cop/style/negated_while_spec.rb +0 -64
- data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +0 -21
- data/spec/rubocop/cop/style/next_spec.rb +0 -301
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +0 -29
- data/spec/rubocop/cop/style/non_nil_check_spec.rb +0 -132
- data/spec/rubocop/cop/style/not_spec.rb +0 -28
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +0 -80
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +0 -13
- data/spec/rubocop/cop/style/op_method_spec.rb +0 -85
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +0 -161
- data/spec/rubocop/cop/style/percent_literal_delimiters_spec.rb +0 -316
- data/spec/rubocop/cop/style/percent_q_literals_spec.rb +0 -122
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +0 -22
- data/spec/rubocop/cop/style/predicate_name_spec.rb +0 -57
- data/spec/rubocop/cop/style/proc_spec.rb +0 -27
- data/spec/rubocop/cop/style/raise_args_spec.rb +0 -87
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +0 -121
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +0 -59
- data/spec/rubocop/cop/style/redundant_return_spec.rb +0 -171
- data/spec/rubocop/cop/style/redundant_self_spec.rb +0 -186
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +0 -188
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +0 -116
- data/spec/rubocop/cop/style/self_assignment_spec.rb +0 -49
- data/spec/rubocop/cop/style/semicolon_spec.rb +0 -114
- data/spec/rubocop/cop/style/signal_exception_spec.rb +0 -289
- data/spec/rubocop/cop/style/single_line_block_params_spec.rb +0 -82
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +0 -94
- data/spec/rubocop/cop/style/single_space_before_first_arg_spec.rb +0 -63
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +0 -55
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +0 -30
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +0 -84
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +0 -70
- data/spec/rubocop/cop/style/space_after_not_spec.rb +0 -22
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +0 -23
- data/spec/rubocop/cop/style/space_around_block_parameters_spec.rb +0 -155
- data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +0 -95
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +0 -330
- data/spec/rubocop/cop/style/space_before_block_braces_spec.rb +0 -73
- data/spec/rubocop/cop/style/space_before_comma_spec.rb +0 -42
- data/spec/rubocop/cop/style/space_before_comment_spec.rb +0 -34
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +0 -70
- data/spec/rubocop/cop/style/space_before_semicolon_spec.rb +0 -28
- data/spec/rubocop/cop/style/space_inside_block_braces_spec.rb +0 -317
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +0 -83
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +0 -147
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +0 -44
- data/spec/rubocop/cop/style/space_inside_range_literal_spec.rb +0 -64
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +0 -62
- data/spec/rubocop/cop/style/string_literals_in_interpolation_spec.rb +0 -99
- data/spec/rubocop/cop/style/string_literals_spec.rb +0 -228
- data/spec/rubocop/cop/style/struct_inheritance_spec.rb +0 -44
- data/spec/rubocop/cop/style/symbol_array_spec.rb +0 -37
- data/spec/rubocop/cop/style/symbol_proc_spec.rb +0 -100
- data/spec/rubocop/cop/style/tab_spec.rb +0 -47
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +0 -83
- data/spec/rubocop/cop/style/trailing_comma_spec.rb +0 -390
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +0 -31
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +0 -558
- data/spec/rubocop/cop/style/unless_else_spec.rb +0 -23
- data/spec/rubocop/cop/style/unneeded_capital_w_spec.rb +0 -90
- data/spec/rubocop/cop/style/unneeded_percent_q_spec.rb +0 -127
- data/spec/rubocop/cop/style/unneeded_percent_x_spec.rb +0 -34
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +0 -76
- data/spec/rubocop/cop/style/variable_name_spec.rb +0 -107
- data/spec/rubocop/cop/style/when_then_spec.rb +0 -42
- data/spec/rubocop/cop/style/while_until_do_spec.rb +0 -55
- data/spec/rubocop/cop/style/while_until_modifier_spec.rb +0 -93
- data/spec/rubocop/cop/style/word_array_spec.rb +0 -117
- data/spec/rubocop/cop/team_spec.rb +0 -190
- data/spec/rubocop/cop/util_spec.rb +0 -102
- data/spec/rubocop/cop/variable_force/assignment_spec.rb +0 -200
- data/spec/rubocop/cop/variable_force/locatable_spec.rb +0 -699
- data/spec/rubocop/cop/variable_force/reference_spec.rb +0 -19
- data/spec/rubocop/cop/variable_force/scope_spec.rb +0 -319
- data/spec/rubocop/cop/variable_force/variable_spec.rb +0 -59
- data/spec/rubocop/cop/variable_force/variable_table_spec.rb +0 -276
- data/spec/rubocop/cop/variable_force_spec.rb +0 -26
- data/spec/rubocop/formatter/base_formatter_spec.rb +0 -191
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +0 -114
- data/spec/rubocop/formatter/colorizable_spec.rb +0 -107
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +0 -50
- data/spec/rubocop/formatter/disabled_lines_formatter_spec.rb +0 -67
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +0 -63
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +0 -33
- data/spec/rubocop/formatter/formatter_set_spec.rb +0 -141
- data/spec/rubocop/formatter/fuubar_style_formatter_spec.rb +0 -129
- data/spec/rubocop/formatter/html_formatter_spec.rb +0 -48
- data/spec/rubocop/formatter/json_formatter_spec.rb +0 -152
- data/spec/rubocop/formatter/offense_count_formatter_spec.rb +0 -75
- data/spec/rubocop/formatter/progress_formatter_spec.rb +0 -182
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +0 -135
- data/spec/rubocop/formatter/text_util_spec.rb +0 -55
- data/spec/rubocop/options_spec.rb +0 -181
- data/spec/rubocop/path_util_spec.rb +0 -77
- data/spec/rubocop/processed_source_spec.rb +0 -184
- data/spec/rubocop/rake_task_spec.rb +0 -122
- data/spec/rubocop/runner_spec.rb +0 -99
- data/spec/rubocop/string_util_spec.rb +0 -46
- data/spec/rubocop/target_finder_spec.rb +0 -245
- data/spec/rubocop/token_spec.rb +0 -29
- data/spec/spec_helper.rb +0 -39
- data/spec/support/cop_helper.rb +0 -75
- data/spec/support/cops/class_must_be_a_module_cop.rb +0 -19
- data/spec/support/cops/module_must_be_a_class_cop.rb +0 -19
- data/spec/support/coverage.rb +0 -15
- data/spec/support/custom_matchers.rb +0 -58
- data/spec/support/file_helper.rb +0 -23
- data/spec/support/jruby_workaround.rb +0 -15
- data/spec/support/mri_syntax_checker.rb +0 -73
- data/spec/support/shared_contexts.rb +0 -53
- data/spec/support/shared_examples.rb +0 -55
- data/spec/support/statement_modifier_helper.rb +0 -41
@@ -1,59 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::Corrector do
|
6
|
-
describe '#rewrite' do
|
7
|
-
it 'allows removal of a range' do
|
8
|
-
source = 'true and false'
|
9
|
-
processed_source = parse_source(source)
|
10
|
-
|
11
|
-
correction = lambda do |corrector|
|
12
|
-
node = processed_source.ast
|
13
|
-
corrector.remove(node.loc.operator)
|
14
|
-
end
|
15
|
-
|
16
|
-
corrector = described_class.new(processed_source.buffer, [correction])
|
17
|
-
expect(corrector.rewrite).to eq 'true false'
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'allows insertion before a source range' do
|
21
|
-
source = 'true and false'
|
22
|
-
processed_source = parse_source(source)
|
23
|
-
|
24
|
-
correction = lambda do |corrector|
|
25
|
-
node = processed_source.ast
|
26
|
-
corrector.insert_before(node.loc.operator, ';nil ')
|
27
|
-
end
|
28
|
-
|
29
|
-
corrector = described_class.new(processed_source.buffer, [correction])
|
30
|
-
expect(corrector.rewrite).to eq 'true ;nil and false'
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'allows insertion after a source range' do
|
34
|
-
source = 'true and false'
|
35
|
-
processed_source = parse_source(source)
|
36
|
-
|
37
|
-
correction = lambda do |corrector|
|
38
|
-
node = processed_source.ast
|
39
|
-
corrector.insert_after(node.loc.operator, ' nil;')
|
40
|
-
end
|
41
|
-
|
42
|
-
corrector = described_class.new(processed_source.buffer, [correction])
|
43
|
-
expect(corrector.rewrite).to eq 'true and nil; false'
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'allows replacement of a range' do
|
47
|
-
source = 'true and false'
|
48
|
-
processed_source = parse_source(source)
|
49
|
-
|
50
|
-
correction = lambda do |corrector|
|
51
|
-
node = processed_source.ast
|
52
|
-
corrector.replace(node.loc.operator, 'or')
|
53
|
-
end
|
54
|
-
|
55
|
-
corrector = described_class.new(processed_source.buffer, [correction])
|
56
|
-
expect(corrector.rewrite).to eq 'true or false'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::Force do
|
6
|
-
subject(:force) { described_class.new(cops) }
|
7
|
-
let(:cops) { [double('cop1'), double('cop2')] }
|
8
|
-
|
9
|
-
describe '.force_name' do
|
10
|
-
it 'returns the class name without namespace' do
|
11
|
-
expect(RuboCop::Cop::VariableForce.force_name).to eq('VariableForce')
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#run_hook' do
|
16
|
-
it 'invokes a hook in all cops' do
|
17
|
-
cops.each do |cop|
|
18
|
-
expect(cop).to receive(:some_hook).with(:foo, :bar)
|
19
|
-
end
|
20
|
-
|
21
|
-
force.run_hook(:some_hook, :foo, :bar)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'does not invoke a hook if the cop does not respond to the hook' do
|
25
|
-
expect(cops.last).to receive(:some_hook).with(:foo, :bar)
|
26
|
-
force.run_hook(:some_hook, :foo, :bar)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,113 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::Lint::AmbiguousOperator do
|
6
|
-
subject(:cop) { described_class.new }
|
7
|
-
|
8
|
-
before do
|
9
|
-
inspect_source(cop, source)
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'with a splat operator in the first argument' do
|
13
|
-
context 'without parentheses' do
|
14
|
-
context 'without whitespaces on the right of the operator' do
|
15
|
-
let(:source) do
|
16
|
-
[
|
17
|
-
'array = [1, 2, 3]',
|
18
|
-
'puts *array'
|
19
|
-
]
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'registers an offense' do
|
23
|
-
expect(cop.offenses.size).to eq(1)
|
24
|
-
expect(cop.offenses.first.message).to eq(
|
25
|
-
'Ambiguous splat operator. ' \
|
26
|
-
"Parenthesize the method arguments if it's surely a splat " \
|
27
|
-
'operator, ' \
|
28
|
-
'or add a whitespace to the right of the `*` if it should be a ' \
|
29
|
-
'multiplication.'
|
30
|
-
)
|
31
|
-
expect(cop.highlights).to eq(['*'])
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'with a whitespace on the right of the operator' do
|
36
|
-
let(:source) do
|
37
|
-
[
|
38
|
-
'array = [1, 2, 3]',
|
39
|
-
'puts * array'
|
40
|
-
]
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'accepts' do
|
44
|
-
expect(cop.offenses).to be_empty
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'with parentheses' do
|
50
|
-
let(:source) do
|
51
|
-
[
|
52
|
-
'array = [1, 2, 3]',
|
53
|
-
'puts(*array)'
|
54
|
-
]
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'accepts' do
|
58
|
-
expect(cop.offenses).to be_empty
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context 'with a block ampersand in the first argument' do
|
64
|
-
context 'without parentheses' do
|
65
|
-
context 'without whitespaces on the right of the operator' do
|
66
|
-
let(:source) do
|
67
|
-
[
|
68
|
-
'process = proc { do_something }',
|
69
|
-
'2.times &process'
|
70
|
-
]
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'registers an offense' do
|
74
|
-
expect(cop.offenses.size).to eq(1)
|
75
|
-
expect(cop.offenses.first.message).to eq(
|
76
|
-
'Ambiguous block operator. ' \
|
77
|
-
"Parenthesize the method arguments if it's surely a block " \
|
78
|
-
'operator, ' \
|
79
|
-
'or add a whitespace to the right of the `&` if it should be a ' \
|
80
|
-
'binary AND.'
|
81
|
-
)
|
82
|
-
expect(cop.highlights).to eq(['&'])
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context 'with a whitespace on the right of the operator' do
|
87
|
-
let(:source) do
|
88
|
-
[
|
89
|
-
'process = proc { do_something }',
|
90
|
-
'2.times & process'
|
91
|
-
]
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'accepts' do
|
95
|
-
expect(cop.offenses).to be_empty
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
context 'with parentheses' do
|
101
|
-
let(:source) do
|
102
|
-
[
|
103
|
-
'process = proc { do_something }',
|
104
|
-
'2.times(&process)'
|
105
|
-
]
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'accepts' do
|
109
|
-
expect(cop.offenses).to be_empty
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::Lint::AmbiguousRegexpLiteral do
|
6
|
-
subject(:cop) { described_class.new }
|
7
|
-
|
8
|
-
before do
|
9
|
-
inspect_source(cop, source)
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'with a regexp literal in the first argument' do
|
13
|
-
context 'without parentheses' do
|
14
|
-
let(:source) { 'p /pattern/' }
|
15
|
-
|
16
|
-
it 'registers an offense' do
|
17
|
-
expect(cop.offenses.size).to eq(1)
|
18
|
-
expect(cop.offenses.first.message).to eq(
|
19
|
-
'Ambiguous regexp literal. Parenthesize the method arguments ' \
|
20
|
-
"if it's surely a regexp literal, or add a whitespace to the " \
|
21
|
-
'right of the `/` if it should be a division.'
|
22
|
-
)
|
23
|
-
expect(cop.highlights).to eq(['/'])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'with parentheses' do
|
28
|
-
let(:source) { 'p(/pattern/)' }
|
29
|
-
|
30
|
-
it 'accepts' do
|
31
|
-
expect(cop.offenses).to be_empty
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,130 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::Lint::AssignmentInCondition, :config do
|
6
|
-
subject(:cop) { described_class.new(config) }
|
7
|
-
let(:cop_config) { { 'AllowSafeAssignment' => true } }
|
8
|
-
|
9
|
-
it 'registers an offense for lvar assignment in condition' do
|
10
|
-
inspect_source(cop,
|
11
|
-
['if test = 10',
|
12
|
-
'end'
|
13
|
-
])
|
14
|
-
expect(cop.offenses.size).to eq(1)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'registers an offense for lvar assignment in while condition' do
|
18
|
-
inspect_source(cop,
|
19
|
-
['while test = 10',
|
20
|
-
'end'
|
21
|
-
])
|
22
|
-
expect(cop.offenses.size).to eq(1)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'registers an offense for lvar assignment in until condition' do
|
26
|
-
inspect_source(cop,
|
27
|
-
['until test = 10',
|
28
|
-
'end'
|
29
|
-
])
|
30
|
-
expect(cop.offenses.size).to eq(1)
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'registers an offense for ivar assignment in condition' do
|
34
|
-
inspect_source(cop,
|
35
|
-
['if @test = 10',
|
36
|
-
'end'
|
37
|
-
])
|
38
|
-
expect(cop.offenses.size).to eq(1)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'registers an offense for clvar assignment in condition' do
|
42
|
-
inspect_source(cop,
|
43
|
-
['if @@test = 10',
|
44
|
-
'end'
|
45
|
-
])
|
46
|
-
expect(cop.offenses.size).to eq(1)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'registers an offense for gvar assignment in condition' do
|
50
|
-
inspect_source(cop,
|
51
|
-
['if $test = 10',
|
52
|
-
'end'
|
53
|
-
])
|
54
|
-
expect(cop.offenses.size).to eq(1)
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'registers an offense for constant assignment in condition' do
|
58
|
-
inspect_source(cop,
|
59
|
-
['if TEST = 10',
|
60
|
-
'end'
|
61
|
-
])
|
62
|
-
expect(cop.offenses.size).to eq(1)
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'registers an offense for collection element assignment in condition' do
|
66
|
-
inspect_source(cop,
|
67
|
-
['if a[3] = 10',
|
68
|
-
'end'
|
69
|
-
])
|
70
|
-
expect(cop.offenses.size).to eq(1)
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'accepts == in condition' do
|
74
|
-
inspect_source(cop,
|
75
|
-
['if test == 10',
|
76
|
-
'end'
|
77
|
-
])
|
78
|
-
expect(cop.offenses).to be_empty
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'accepts = in a block that is called in a condition' do
|
82
|
-
inspect_source(cop,
|
83
|
-
'return 1 if any_errors? { o = inspect(file) }')
|
84
|
-
expect(cop.offenses).to be_empty
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'accepts ||= in condition' do
|
88
|
-
inspect_source(cop,
|
89
|
-
'raise StandardError unless foo ||= bar')
|
90
|
-
expect(cop.offenses).to be_empty
|
91
|
-
end
|
92
|
-
|
93
|
-
context 'safe assignment is allowed' do
|
94
|
-
it 'accepts = in condition surrounded with braces' do
|
95
|
-
inspect_source(cop,
|
96
|
-
['if (test = 10)',
|
97
|
-
'end'
|
98
|
-
])
|
99
|
-
expect(cop.offenses).to be_empty
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'accepts []= in condition surrounded with braces' do
|
103
|
-
inspect_source(cop,
|
104
|
-
['if (test[0] = 10)',
|
105
|
-
'end'
|
106
|
-
])
|
107
|
-
expect(cop.offenses).to be_empty
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context 'safe assignment is not allowed' do
|
112
|
-
let(:cop_config) { { 'AllowSafeAssignment' => false } }
|
113
|
-
|
114
|
-
it 'does not accept = in condition surrounded with braces' do
|
115
|
-
inspect_source(cop,
|
116
|
-
['if (test = 10)',
|
117
|
-
'end'
|
118
|
-
])
|
119
|
-
expect(cop.offenses.size).to eq(1)
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'does not accept []= in condition surrounded with braces' do
|
123
|
-
inspect_source(cop,
|
124
|
-
['if (test[0] = 10)',
|
125
|
-
'end'
|
126
|
-
])
|
127
|
-
expect(cop.offenses.size).to eq(1)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
@@ -1,533 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::Lint::BlockAlignment do
|
6
|
-
subject(:cop) { described_class.new }
|
7
|
-
|
8
|
-
context 'when the block has no arguments' do
|
9
|
-
it 'registers an offense for mismatched block end' do
|
10
|
-
inspect_source(cop,
|
11
|
-
['test do',
|
12
|
-
' end'
|
13
|
-
])
|
14
|
-
expect(cop.messages)
|
15
|
-
.to eq(['`end` at 2, 2 is not aligned with `test do` at 1, 0'])
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'auto-corrects alignment' do
|
19
|
-
new_source = autocorrect_source(cop, ['test do',
|
20
|
-
' end'
|
21
|
-
])
|
22
|
-
|
23
|
-
expect(new_source).to eq(['test do',
|
24
|
-
'end'].join("\n"))
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'when the block has arguments' do
|
29
|
-
it 'registers an offense for mismatched block end' do
|
30
|
-
inspect_source(cop,
|
31
|
-
['test do |ala|',
|
32
|
-
' end'
|
33
|
-
])
|
34
|
-
expect(cop.messages)
|
35
|
-
.to eq(['`end` at 2, 2 is not aligned with `test do |ala|` at 1, 0'])
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'auto-corrects alignment' do
|
39
|
-
new_source = autocorrect_source(cop, ['test do |ala|',
|
40
|
-
' end'
|
41
|
-
])
|
42
|
-
|
43
|
-
expect(new_source).to eq(['test do |ala|',
|
44
|
-
'end'].join("\n"))
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'accepts a block end that does not begin its line' do
|
49
|
-
inspect_source(cop,
|
50
|
-
[' scope :bar, lambda { joins(:baz)',
|
51
|
-
' .distinct }'
|
52
|
-
])
|
53
|
-
expect(cop.offenses).to be_empty
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'when the block is a logical operand' do
|
57
|
-
it 'accepts a correctly aligned block end' do
|
58
|
-
inspect_source(cop,
|
59
|
-
['(value.is_a? Array) && value.all? do |subvalue|',
|
60
|
-
' type_check_value(subvalue, array_type)',
|
61
|
-
'end',
|
62
|
-
'a || b do',
|
63
|
-
'end'
|
64
|
-
])
|
65
|
-
expect(cop.offenses).to be_empty
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'accepts end aligned with a variable' do
|
70
|
-
inspect_source(cop,
|
71
|
-
['variable = test do |ala|',
|
72
|
-
'end'
|
73
|
-
])
|
74
|
-
expect(cop.offenses).to be_empty
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'when there is an assignment chain' do
|
78
|
-
it 'registers an offense for an end aligned with the 2nd variable' do
|
79
|
-
inspect_source(cop,
|
80
|
-
['a = b = c = test do |ala|',
|
81
|
-
' end'
|
82
|
-
])
|
83
|
-
expect(cop.messages)
|
84
|
-
.to eq(['`end` at 2, 4 is not aligned with' \
|
85
|
-
' `a = b = c = test do |ala|` at 1, 0'])
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'accepts end aligned with the first variable' do
|
89
|
-
inspect_source(cop,
|
90
|
-
['a = b = c = test do |ala|',
|
91
|
-
'end'
|
92
|
-
])
|
93
|
-
expect(cop.offenses).to be_empty
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'auto-corrects alignment to the first variable' do
|
97
|
-
new_source = autocorrect_source(cop,
|
98
|
-
['a = b = c = test do |ala|',
|
99
|
-
' end'
|
100
|
-
])
|
101
|
-
|
102
|
-
expect(new_source).to eq(['a = b = c = test do |ala|',
|
103
|
-
'end'
|
104
|
-
].join("\n"))
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'and the block is an operand' do
|
109
|
-
it 'accepts end aligned with a variable' do
|
110
|
-
inspect_source(cop,
|
111
|
-
['b = 1 + preceding_line.reduce(0) do |a, e|',
|
112
|
-
' a + e.length + newline_length',
|
113
|
-
'end + 1'
|
114
|
-
])
|
115
|
-
expect(cop.offenses).to be_empty
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
it 'registers an offense for mismatched block end with a variable' do
|
120
|
-
inspect_source(cop,
|
121
|
-
['variable = test do |ala|',
|
122
|
-
' end'
|
123
|
-
])
|
124
|
-
expect(cop.messages)
|
125
|
-
.to eq(['`end` at 2, 2 is not aligned with `variable = test do |ala|`' \
|
126
|
-
' at 1, 0'])
|
127
|
-
end
|
128
|
-
|
129
|
-
context 'when the block is defined on the next line' do
|
130
|
-
it 'accepts end aligned with the block expression' do
|
131
|
-
inspect_source(cop,
|
132
|
-
['variable =',
|
133
|
-
' a_long_method_that_dont_fit_on_the_line do |v|',
|
134
|
-
' v.foo',
|
135
|
-
' end'
|
136
|
-
])
|
137
|
-
expect(cop.offenses).to be_empty
|
138
|
-
end
|
139
|
-
|
140
|
-
it 'registers an offenses for mismatched end alignment' do
|
141
|
-
inspect_source(cop,
|
142
|
-
['variable =',
|
143
|
-
' a_long_method_that_dont_fit_on_the_line do |v|',
|
144
|
-
' v.foo',
|
145
|
-
'end'
|
146
|
-
])
|
147
|
-
expect(cop.messages)
|
148
|
-
.to eq(['`end` at 4, 0 is not aligned with' \
|
149
|
-
' `a_long_method_that_dont_fit_on_the_line do |v|` at 2, 2'])
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'auto-corrects alignment' do
|
153
|
-
new_source = autocorrect_source(
|
154
|
-
cop,
|
155
|
-
['variable =',
|
156
|
-
' a_long_method_that_dont_fit_on_the_line do |v|',
|
157
|
-
' v.foo',
|
158
|
-
'end'
|
159
|
-
])
|
160
|
-
|
161
|
-
expect(new_source)
|
162
|
-
.to eq(['variable =',
|
163
|
-
' a_long_method_that_dont_fit_on_the_line do |v|',
|
164
|
-
' v.foo',
|
165
|
-
' end'
|
166
|
-
].join("\n"))
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
context 'when the method part is a call chain that spans several lines' do
|
171
|
-
# Example from issue 346 of bbatsov/rubocop on github:
|
172
|
-
it 'accepts pretty alignment style' do
|
173
|
-
src = [
|
174
|
-
'def foo(bar)',
|
175
|
-
' bar.get_stuffs',
|
176
|
-
' .reject do |stuff| ',
|
177
|
-
' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
|
178
|
-
' end.select do |stuff|',
|
179
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
180
|
-
' end',
|
181
|
-
' .select do |stuff|',
|
182
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
183
|
-
' end',
|
184
|
-
'end']
|
185
|
-
inspect_source(cop, src)
|
186
|
-
expect(cop.offenses).to be_empty
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'registers offenses for misaligned ends' do
|
190
|
-
src = [
|
191
|
-
'def foo(bar)',
|
192
|
-
' bar.get_stuffs',
|
193
|
-
' .reject do |stuff|',
|
194
|
-
' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
|
195
|
-
' end.select do |stuff|',
|
196
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
197
|
-
' end',
|
198
|
-
' .select do |stuff|',
|
199
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
200
|
-
' end',
|
201
|
-
'end']
|
202
|
-
inspect_source(cop, src)
|
203
|
-
expect(cop.messages)
|
204
|
-
.to eq(['`end` at 5, 8 is not aligned with `bar.get_stuffs` at 2, 2' \
|
205
|
-
' or `.reject do |stuff|` at 3, 6',
|
206
|
-
'`end` at 7, 4 is not aligned with `bar.get_stuffs` at 2, 2' \
|
207
|
-
' or `end.select do |stuff|` at 5, 8',
|
208
|
-
'`end` at 10, 8 is not aligned with `bar.get_stuffs` at 2, 2' \
|
209
|
-
' or `.select do |stuff|` at 8, 6'])
|
210
|
-
end
|
211
|
-
|
212
|
-
# Example from issue 393 of bbatsov/rubocop on github:
|
213
|
-
it 'accepts end indented as the start of the block' do
|
214
|
-
src = ['my_object.chaining_this_very_long_method(with_a_parameter)',
|
215
|
-
' .and_one_with_a_block do',
|
216
|
-
' do_something',
|
217
|
-
'end',
|
218
|
-
'', # Other variant:
|
219
|
-
'my_object.chaining_this_very_long_method(',
|
220
|
-
' with_a_parameter).and_one_with_a_block do',
|
221
|
-
' do_something',
|
222
|
-
'end']
|
223
|
-
inspect_source(cop, src)
|
224
|
-
expect(cop.offenses).to be_empty
|
225
|
-
end
|
226
|
-
|
227
|
-
# Example from issue 447 of bbatsov/rubocop on github:
|
228
|
-
it 'accepts two kinds of end alignment' do
|
229
|
-
src = [
|
230
|
-
# Aligned with start of line where do is:
|
231
|
-
'params = default_options.merge(options)',
|
232
|
-
' .delete_if { |k, v| v.nil? }',
|
233
|
-
' .each_with_object({}) do |(k, v), new_hash|',
|
234
|
-
' new_hash[k.to_s] = v.to_s',
|
235
|
-
' end',
|
236
|
-
# Aligned with start of the whole expression:
|
237
|
-
'params = default_options.merge(options)',
|
238
|
-
' .delete_if { |k, v| v.nil? }',
|
239
|
-
' .each_with_object({}) do |(k, v), new_hash|',
|
240
|
-
' new_hash[k.to_s] = v.to_s',
|
241
|
-
'end'
|
242
|
-
]
|
243
|
-
inspect_source(cop, src)
|
244
|
-
expect(cop.offenses).to be_empty
|
245
|
-
end
|
246
|
-
|
247
|
-
it 'auto-corrects misaligned ends with the start of the expression' do
|
248
|
-
src = [
|
249
|
-
'def foo(bar)',
|
250
|
-
' bar.get_stuffs',
|
251
|
-
' .reject do |stuff|',
|
252
|
-
' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
|
253
|
-
' end.select do |stuff|',
|
254
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
255
|
-
' end',
|
256
|
-
' .select do |stuff|',
|
257
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
258
|
-
' end',
|
259
|
-
'end']
|
260
|
-
|
261
|
-
aligned_src = [
|
262
|
-
'def foo(bar)',
|
263
|
-
' bar.get_stuffs',
|
264
|
-
' .reject do |stuff|',
|
265
|
-
' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
|
266
|
-
' end.select do |stuff|',
|
267
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
268
|
-
' end',
|
269
|
-
' .select do |stuff|',
|
270
|
-
' stuff.another_very_long_expression_that_doesnt_fit_the_line',
|
271
|
-
' end',
|
272
|
-
'end'].join("\n")
|
273
|
-
|
274
|
-
new_source = autocorrect_source(cop, src)
|
275
|
-
expect(new_source).to eq(aligned_src)
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
|
-
context 'when variables of a mass assignment spans several lines' do
|
280
|
-
it 'accepts end aligned with the variables' do
|
281
|
-
src = ['e,',
|
282
|
-
'f = [5, 6].map do |i|',
|
283
|
-
' i - 5',
|
284
|
-
'end']
|
285
|
-
inspect_source(cop, src)
|
286
|
-
expect(cop.offenses).to be_empty
|
287
|
-
end
|
288
|
-
|
289
|
-
it 'registers an offense for end aligned with the block' do
|
290
|
-
src = ['e,',
|
291
|
-
'f = [5, 6].map do |i|',
|
292
|
-
' i - 5',
|
293
|
-
' end']
|
294
|
-
inspect_source(cop, src)
|
295
|
-
expect(cop.messages)
|
296
|
-
.to eq(['`end` at 4, 4 is not aligned with `e,` at 1, 0 or' \
|
297
|
-
' `f = [5, 6].map do |i|` at 2, 0'])
|
298
|
-
end
|
299
|
-
|
300
|
-
it 'can not auto-correct' do
|
301
|
-
src = ['e,',
|
302
|
-
'f = [5, 6].map do |i|',
|
303
|
-
' i - 5',
|
304
|
-
' end']
|
305
|
-
|
306
|
-
new_source = autocorrect_source(cop, src)
|
307
|
-
expect(new_source).to eq(src.join("\n"))
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
it 'accepts end aligned with an instance variable' do
|
312
|
-
inspect_source(cop,
|
313
|
-
['@variable = test do |ala|',
|
314
|
-
'end'
|
315
|
-
])
|
316
|
-
expect(cop.offenses).to be_empty
|
317
|
-
end
|
318
|
-
|
319
|
-
it 'registers an offense for mismatched block end with' \
|
320
|
-
' an instance variable' do
|
321
|
-
inspect_source(cop,
|
322
|
-
['@variable = test do |ala|',
|
323
|
-
' end'
|
324
|
-
])
|
325
|
-
expect(cop.messages)
|
326
|
-
.to eq(['`end` at 2, 2 is not aligned with `@variable = test do |ala|`' \
|
327
|
-
' at 1, 0'])
|
328
|
-
end
|
329
|
-
|
330
|
-
it 'accepts end aligned with a class variable' do
|
331
|
-
inspect_source(cop,
|
332
|
-
['@@variable = test do |ala|',
|
333
|
-
'end'
|
334
|
-
])
|
335
|
-
expect(cop.offenses).to be_empty
|
336
|
-
end
|
337
|
-
|
338
|
-
it 'registers an offense for mismatched block end with a class variable' do
|
339
|
-
inspect_source(cop,
|
340
|
-
['@@variable = test do |ala|',
|
341
|
-
' end'
|
342
|
-
])
|
343
|
-
expect(cop.messages)
|
344
|
-
.to eq(['`end` at 2, 2 is not aligned with `@@variable = test do |ala|`' \
|
345
|
-
' at 1, 0'])
|
346
|
-
end
|
347
|
-
|
348
|
-
it 'accepts end aligned with a global variable' do
|
349
|
-
inspect_source(cop,
|
350
|
-
['$variable = test do |ala|',
|
351
|
-
'end'
|
352
|
-
])
|
353
|
-
expect(cop.offenses).to be_empty
|
354
|
-
end
|
355
|
-
|
356
|
-
it 'registers an offense for mismatched block end with a global variable' do
|
357
|
-
inspect_source(cop,
|
358
|
-
['$variable = test do |ala|',
|
359
|
-
' end'
|
360
|
-
])
|
361
|
-
expect(cop.messages)
|
362
|
-
.to eq(['`end` at 2, 2 is not aligned with `$variable = test do |ala|`' \
|
363
|
-
' at 1, 0'])
|
364
|
-
end
|
365
|
-
|
366
|
-
it 'accepts end aligned with a constant' do
|
367
|
-
inspect_source(cop,
|
368
|
-
['CONSTANT = test do |ala|',
|
369
|
-
'end'
|
370
|
-
])
|
371
|
-
expect(cop.offenses).to be_empty
|
372
|
-
end
|
373
|
-
|
374
|
-
it 'registers an offense for mismatched block end with a constant' do
|
375
|
-
inspect_source(cop,
|
376
|
-
['Module::CONSTANT = test do |ala|',
|
377
|
-
' end'
|
378
|
-
])
|
379
|
-
expect(cop.messages)
|
380
|
-
.to eq(['`end` at 2, 2 is not aligned with' \
|
381
|
-
' `Module::CONSTANT = test do |ala|` at 1, 0'])
|
382
|
-
end
|
383
|
-
|
384
|
-
it 'accepts end aligned with a method call' do
|
385
|
-
inspect_source(cop,
|
386
|
-
['parser.children << lambda do |token|',
|
387
|
-
' token << 1',
|
388
|
-
'end'
|
389
|
-
])
|
390
|
-
expect(cop.offenses).to be_empty
|
391
|
-
end
|
392
|
-
|
393
|
-
it 'registers an offense for mismatched block end with a method call' do
|
394
|
-
inspect_source(cop,
|
395
|
-
['parser.children << lambda do |token|',
|
396
|
-
' token << 1',
|
397
|
-
' end'
|
398
|
-
])
|
399
|
-
expect(cop.messages)
|
400
|
-
.to eq(['`end` at 3, 2 is not aligned with' \
|
401
|
-
' `parser.children << lambda do |token|` at 1, 0'])
|
402
|
-
end
|
403
|
-
|
404
|
-
it 'accepts end aligned with a method call with arguments' do
|
405
|
-
inspect_source(cop,
|
406
|
-
['@h[:f] = f.each_pair.map do |f, v|',
|
407
|
-
' v = 1',
|
408
|
-
'end'
|
409
|
-
])
|
410
|
-
expect(cop.offenses).to be_empty
|
411
|
-
end
|
412
|
-
|
413
|
-
it 'registers an offense for mismatched end with a method call' \
|
414
|
-
' with arguments' do
|
415
|
-
inspect_source(cop,
|
416
|
-
['@h[:f] = f.each_pair.map do |f, v|',
|
417
|
-
' v = 1',
|
418
|
-
' end'
|
419
|
-
])
|
420
|
-
expect(cop.messages)
|
421
|
-
.to eq(['`end` at 3, 2 is not aligned with' \
|
422
|
-
' `@h[:f] = f.each_pair.map do |f, v|` at 1, 0'])
|
423
|
-
end
|
424
|
-
|
425
|
-
it 'does not raise an error for nested block in a method call' do
|
426
|
-
inspect_source(cop,
|
427
|
-
'expect(arr.all? { |o| o.valid? })')
|
428
|
-
expect(cop.offenses).to be_empty
|
429
|
-
end
|
430
|
-
|
431
|
-
it 'accepts end aligned with the block when the block is a method argument' do
|
432
|
-
inspect_source(cop,
|
433
|
-
['expect(arr.all? do |o|',
|
434
|
-
' o.valid?',
|
435
|
-
' end)'
|
436
|
-
])
|
437
|
-
expect(cop.offenses).to be_empty
|
438
|
-
end
|
439
|
-
|
440
|
-
it 'registers an offense for mismatched end not aligned with the block' \
|
441
|
-
' that is an argument' do
|
442
|
-
inspect_source(cop,
|
443
|
-
['expect(arr.all? do |o|',
|
444
|
-
' o.valid?',
|
445
|
-
' end)'
|
446
|
-
])
|
447
|
-
expect(cop.messages)
|
448
|
-
.to eq(['`end` at 3, 2 is not aligned with `arr.all? do |o|` at 1, 7 or' \
|
449
|
-
' `expect(arr.all? do |o|` at 1, 0'])
|
450
|
-
end
|
451
|
-
|
452
|
-
it 'accepts end aligned with an op-asgn (+=, -=)' do
|
453
|
-
inspect_source(cop,
|
454
|
-
['rb += files.select do |file|',
|
455
|
-
' file << something',
|
456
|
-
'end'
|
457
|
-
])
|
458
|
-
expect(cop.offenses).to be_empty
|
459
|
-
end
|
460
|
-
|
461
|
-
it 'registers an offense for mismatched block end with an op-asgn (+=, -=)' do
|
462
|
-
inspect_source(cop,
|
463
|
-
['rb += files.select do |file|',
|
464
|
-
' file << something',
|
465
|
-
' end'
|
466
|
-
])
|
467
|
-
expect(cop.messages)
|
468
|
-
.to eq(['`end` at 3, 2 is not aligned with `rb` at 1, 0'])
|
469
|
-
end
|
470
|
-
|
471
|
-
it 'accepts end aligned with an and-asgn (&&=)' do
|
472
|
-
inspect_source(cop,
|
473
|
-
['variable &&= test do |ala|',
|
474
|
-
'end'
|
475
|
-
])
|
476
|
-
expect(cop.offenses).to be_empty
|
477
|
-
end
|
478
|
-
|
479
|
-
it 'registers an offense for mismatched block end with an and-asgn (&&=)' do
|
480
|
-
inspect_source(cop,
|
481
|
-
['variable &&= test do |ala|',
|
482
|
-
' end'
|
483
|
-
])
|
484
|
-
expect(cop.messages)
|
485
|
-
.to eq(['`end` at 2, 2 is not aligned with `variable &&= test do |ala|`' \
|
486
|
-
' at 1, 0'])
|
487
|
-
end
|
488
|
-
|
489
|
-
it 'accepts end aligned with an or-asgn (||=)' do
|
490
|
-
inspect_source(cop,
|
491
|
-
['variable ||= test do |ala|',
|
492
|
-
'end'
|
493
|
-
])
|
494
|
-
expect(cop.offenses).to be_empty
|
495
|
-
end
|
496
|
-
|
497
|
-
it 'registers an offense for mismatched block end with an or-asgn (||=)' do
|
498
|
-
inspect_source(cop,
|
499
|
-
['variable ||= test do |ala|',
|
500
|
-
' end'
|
501
|
-
])
|
502
|
-
expect(cop.messages)
|
503
|
-
.to eq(['`end` at 2, 2 is not aligned with `variable ||= test do |ala|`' \
|
504
|
-
' at 1, 0'])
|
505
|
-
end
|
506
|
-
|
507
|
-
it 'accepts end aligned with a mass assignment' do
|
508
|
-
inspect_source(cop,
|
509
|
-
['var1, var2 = lambda do |test|',
|
510
|
-
' [1, 2]',
|
511
|
-
'end'
|
512
|
-
])
|
513
|
-
expect(cop.offenses).to be_empty
|
514
|
-
end
|
515
|
-
|
516
|
-
it 'accepts end aligned with a call chain left hand side' do
|
517
|
-
inspect_source(cop,
|
518
|
-
['parser.diagnostics.consumer = lambda do |diagnostic|',
|
519
|
-
' diagnostics << diagnostic',
|
520
|
-
'end'])
|
521
|
-
expect(cop.offenses).to be_empty
|
522
|
-
end
|
523
|
-
|
524
|
-
it 'registers an offense for mismatched block end with a mass assignment' do
|
525
|
-
inspect_source(cop,
|
526
|
-
['var1, var2 = lambda do |test|',
|
527
|
-
' [1, 2]',
|
528
|
-
' end'
|
529
|
-
])
|
530
|
-
expect(cop.messages)
|
531
|
-
.to eq(['`end` at 3, 2 is not aligned with `var1, var2` at 1, 0'])
|
532
|
-
end
|
533
|
-
end
|