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,19 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'astrolabe/sexp'
|
5
|
-
|
6
|
-
describe RuboCop::Cop::VariableForce::Reference do
|
7
|
-
include Astrolabe::Sexp
|
8
|
-
|
9
|
-
describe '.new' do
|
10
|
-
context 'when non variable reference node is passed' do
|
11
|
-
it 'raises error' do
|
12
|
-
node = s(:def)
|
13
|
-
scope = RuboCop::Cop::VariableForce::Scope.new(s(:class))
|
14
|
-
expect { described_class.new(node, scope) }
|
15
|
-
.to raise_error(ArgumentError)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,319 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::VariableForce::Scope do
|
6
|
-
include AST::Sexp
|
7
|
-
|
8
|
-
describe '.new' do
|
9
|
-
context 'when non scope node is passed' do
|
10
|
-
it 'raises error' do
|
11
|
-
node = s(:lvasgn)
|
12
|
-
expect { described_class.new(node) }.to raise_error(ArgumentError)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'when begin node is passed' do
|
17
|
-
it 'accepts that as pseudo scope for top level scope' do
|
18
|
-
node = s(:begin)
|
19
|
-
expect { described_class.new(node) }.not_to raise_error
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
let(:ast) do
|
25
|
-
ast = RuboCop::ProcessedSource.new(source).ast
|
26
|
-
RuboCop::Cop::VariableForce.wrap_with_top_level_scope_node(ast)
|
27
|
-
end
|
28
|
-
|
29
|
-
let(:scope_node_type) { :def }
|
30
|
-
|
31
|
-
let(:scope_node) { ast.each_node(scope_node_type).first }
|
32
|
-
|
33
|
-
subject(:scope) { described_class.new(scope_node) }
|
34
|
-
|
35
|
-
describe '#name' do
|
36
|
-
context 'when the scope is instance method definition' do
|
37
|
-
let(:source) { <<-END }
|
38
|
-
def some_method
|
39
|
-
end
|
40
|
-
END
|
41
|
-
|
42
|
-
let(:scope_node_type) { :def }
|
43
|
-
|
44
|
-
it 'returns the method name' do
|
45
|
-
expect(scope.name).to eq(:some_method)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'when the scope is singleton method definition' do
|
50
|
-
let(:source) { <<-END }
|
51
|
-
def self.some_method
|
52
|
-
end
|
53
|
-
END
|
54
|
-
|
55
|
-
let(:scope_node_type) { :defs }
|
56
|
-
|
57
|
-
it 'returns the method name' do
|
58
|
-
expect(scope.name).to eq(:some_method)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe '#body_node' do
|
64
|
-
shared_examples 'returns the body node' do
|
65
|
-
it 'returns the body node' do
|
66
|
-
expect(scope.body_node.children[1]).to eq(:this_is_target)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context 'when the scope is instance method' do
|
71
|
-
let(:source) do
|
72
|
-
<<-END
|
73
|
-
def some_method
|
74
|
-
this_is_target
|
75
|
-
end
|
76
|
-
END
|
77
|
-
end
|
78
|
-
|
79
|
-
let(:scope_node_type) { :def }
|
80
|
-
|
81
|
-
include_examples 'returns the body node'
|
82
|
-
end
|
83
|
-
|
84
|
-
context 'when the scope is singleton method' do
|
85
|
-
let(:source) do
|
86
|
-
<<-END
|
87
|
-
def self.some_method
|
88
|
-
this_is_target
|
89
|
-
end
|
90
|
-
END
|
91
|
-
end
|
92
|
-
|
93
|
-
let(:scope_node_type) { :defs }
|
94
|
-
|
95
|
-
include_examples 'returns the body node'
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'when the scope is module' do
|
99
|
-
let(:source) do
|
100
|
-
<<-END
|
101
|
-
module SomeModule
|
102
|
-
this_is_target
|
103
|
-
end
|
104
|
-
END
|
105
|
-
end
|
106
|
-
|
107
|
-
let(:scope_node_type) { :module }
|
108
|
-
|
109
|
-
include_examples 'returns the body node'
|
110
|
-
end
|
111
|
-
|
112
|
-
context 'when the scope is class' do
|
113
|
-
let(:source) do
|
114
|
-
<<-END
|
115
|
-
class SomeClass
|
116
|
-
this_is_target
|
117
|
-
end
|
118
|
-
END
|
119
|
-
end
|
120
|
-
|
121
|
-
let(:scope_node_type) { :class }
|
122
|
-
|
123
|
-
include_examples 'returns the body node'
|
124
|
-
end
|
125
|
-
|
126
|
-
context 'when the scope is singleton class' do
|
127
|
-
let(:source) do
|
128
|
-
<<-END
|
129
|
-
class << self
|
130
|
-
this_is_target
|
131
|
-
end
|
132
|
-
END
|
133
|
-
end
|
134
|
-
|
135
|
-
let(:scope_node_type) { :sclass }
|
136
|
-
|
137
|
-
include_examples 'returns the body node'
|
138
|
-
end
|
139
|
-
|
140
|
-
context 'when the scope is block' do
|
141
|
-
let(:source) do
|
142
|
-
<<-END
|
143
|
-
1.times do
|
144
|
-
this_is_target
|
145
|
-
end
|
146
|
-
END
|
147
|
-
end
|
148
|
-
|
149
|
-
let(:scope_node_type) { :block }
|
150
|
-
|
151
|
-
include_examples 'returns the body node'
|
152
|
-
end
|
153
|
-
|
154
|
-
context 'when the scope is top level' do
|
155
|
-
let(:source) do
|
156
|
-
<<-END
|
157
|
-
this_is_target
|
158
|
-
END
|
159
|
-
end
|
160
|
-
|
161
|
-
let(:scope_node_type) { :begin }
|
162
|
-
|
163
|
-
include_examples 'returns the body node'
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
describe '#each_node' do
|
168
|
-
shared_examples 'yields' do |description|
|
169
|
-
it "yields #{description}" do
|
170
|
-
yielded_types = []
|
171
|
-
|
172
|
-
scope.each_node do |node|
|
173
|
-
yielded_types << node.type
|
174
|
-
end
|
175
|
-
|
176
|
-
expect(yielded_types).to eq(expected_types.map(&:to_sym))
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
describe 'outer scope boundary handling' do
|
181
|
-
context 'when the scope is instance method' do
|
182
|
-
let(:source) { <<-END }
|
183
|
-
def some_method(arg1, arg2)
|
184
|
-
:body
|
185
|
-
end
|
186
|
-
END
|
187
|
-
|
188
|
-
let(:scope_node_type) { :def }
|
189
|
-
let(:expected_types) { %w(args arg arg sym) }
|
190
|
-
include_examples 'yields', 'the argument and the body nodes'
|
191
|
-
end
|
192
|
-
|
193
|
-
context 'when the scope is singleton method' do
|
194
|
-
let(:source) { <<-END }
|
195
|
-
def self.some_method(arg1, arg2)
|
196
|
-
:body
|
197
|
-
end
|
198
|
-
END
|
199
|
-
|
200
|
-
let(:scope_node_type) { :defs }
|
201
|
-
let(:expected_types) { %w(args arg arg sym) }
|
202
|
-
include_examples 'yields', 'the argument and the body nodes'
|
203
|
-
end
|
204
|
-
|
205
|
-
context 'when the scope is module' do
|
206
|
-
let(:source) { <<-END }
|
207
|
-
module SomeModule
|
208
|
-
:body
|
209
|
-
end
|
210
|
-
END
|
211
|
-
|
212
|
-
let(:scope_node_type) { :module }
|
213
|
-
let(:expected_types) { %w(sym) }
|
214
|
-
include_examples 'yields', 'the body nodes'
|
215
|
-
end
|
216
|
-
|
217
|
-
context 'when the scope is class' do
|
218
|
-
let(:source) { <<-END }
|
219
|
-
some_super_class = Class.new
|
220
|
-
|
221
|
-
class SomeClass < some_super_class
|
222
|
-
:body
|
223
|
-
end
|
224
|
-
END
|
225
|
-
|
226
|
-
let(:scope_node_type) { :class }
|
227
|
-
let(:expected_types) { %w(sym) }
|
228
|
-
include_examples 'yields', 'the body nodes'
|
229
|
-
end
|
230
|
-
|
231
|
-
context 'when the scope is singleton class' do
|
232
|
-
let(:source) { <<-END }
|
233
|
-
some_object = Object.new
|
234
|
-
|
235
|
-
class << some_object
|
236
|
-
:body
|
237
|
-
end
|
238
|
-
END
|
239
|
-
|
240
|
-
let(:scope_node_type) { :sclass }
|
241
|
-
let(:expected_types) { %w(sym) }
|
242
|
-
include_examples 'yields', 'the body nodes'
|
243
|
-
end
|
244
|
-
|
245
|
-
context 'when the scope is block' do
|
246
|
-
let(:source) { <<-END }
|
247
|
-
1.times do |arg1, arg2|
|
248
|
-
:body
|
249
|
-
end
|
250
|
-
END
|
251
|
-
|
252
|
-
let(:scope_node_type) { :block }
|
253
|
-
let(:expected_types) { %w(args arg arg sym) }
|
254
|
-
include_examples 'yields', 'the argument and the body nodes'
|
255
|
-
end
|
256
|
-
|
257
|
-
context 'when the scope is top level' do
|
258
|
-
let(:source) { <<-END }
|
259
|
-
:body
|
260
|
-
END
|
261
|
-
|
262
|
-
let(:scope_node_type) { :begin }
|
263
|
-
let(:expected_types) { %w(sym) }
|
264
|
-
include_examples 'yields', 'the body nodes'
|
265
|
-
end
|
266
|
-
end
|
267
|
-
|
268
|
-
describe 'inner scope boundary handling' do
|
269
|
-
context "when there's a method invocation with block" do
|
270
|
-
let(:source) { <<-END }
|
271
|
-
foo = 1
|
272
|
-
|
273
|
-
do_something(1, 2) do |arg|
|
274
|
-
:body
|
275
|
-
end
|
276
|
-
|
277
|
-
foo
|
278
|
-
END
|
279
|
-
|
280
|
-
let(:scope_node_type) { :begin }
|
281
|
-
let(:expected_types) { %w(lvasgn int block send int int lvar) }
|
282
|
-
include_examples 'yields', 'only the block node and the child send node'
|
283
|
-
end
|
284
|
-
|
285
|
-
context "when there's a singleton method definition" do
|
286
|
-
let(:source) { <<-END }
|
287
|
-
foo = 1
|
288
|
-
|
289
|
-
def self.some_method(arg1, arg2)
|
290
|
-
:body
|
291
|
-
end
|
292
|
-
|
293
|
-
foo
|
294
|
-
END
|
295
|
-
|
296
|
-
let(:scope_node_type) { :begin }
|
297
|
-
let(:expected_types) { %w(lvasgn int defs self lvar) }
|
298
|
-
include_examples 'yields', 'only the defs node and the method host node'
|
299
|
-
end
|
300
|
-
|
301
|
-
context 'when there are grouped nodes with a begin node' do
|
302
|
-
let(:source) { <<-END }
|
303
|
-
foo = 1
|
304
|
-
|
305
|
-
if true
|
306
|
-
do_something
|
307
|
-
do_anything
|
308
|
-
end
|
309
|
-
|
310
|
-
foo
|
311
|
-
END
|
312
|
-
|
313
|
-
let(:scope_node_type) { :begin }
|
314
|
-
let(:expected_types) { %w(lvasgn int if true begin send send lvar) }
|
315
|
-
include_examples 'yields', 'them without confused with top level scope'
|
316
|
-
end
|
317
|
-
end
|
318
|
-
end
|
319
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'astrolabe/sexp'
|
5
|
-
|
6
|
-
describe RuboCop::Cop::VariableForce::Variable do
|
7
|
-
include Astrolabe::Sexp
|
8
|
-
|
9
|
-
describe '.new' do
|
10
|
-
context 'when non variable declaration node is passed' do
|
11
|
-
it 'raises error' do
|
12
|
-
name = :foo
|
13
|
-
declaration_node = s(:def)
|
14
|
-
scope = RuboCop::Cop::VariableForce::Scope.new(s(:class))
|
15
|
-
expect { described_class.new(name, declaration_node, scope) }
|
16
|
-
.to raise_error(ArgumentError)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#referenced?' do
|
22
|
-
let(:name) { :foo }
|
23
|
-
let(:declaration_node) { s(:arg, name) }
|
24
|
-
let(:scope) { double('scope').as_null_object }
|
25
|
-
let(:variable) { described_class.new(name, declaration_node, scope) }
|
26
|
-
|
27
|
-
subject { variable.referenced? }
|
28
|
-
|
29
|
-
context 'when the variable is not assigned' do
|
30
|
-
it { should be_falsey }
|
31
|
-
|
32
|
-
context 'and the variable is referenced' do
|
33
|
-
before do
|
34
|
-
variable.reference!(s(:lvar, name))
|
35
|
-
end
|
36
|
-
|
37
|
-
it { should be_truthy }
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'when the variable has an assignment' do
|
42
|
-
before do
|
43
|
-
variable.assign(s(:lvasgn, name))
|
44
|
-
end
|
45
|
-
|
46
|
-
context 'and the variable is not yet referenced' do
|
47
|
-
it { should be_falsey }
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'and the variable is referenced' do
|
51
|
-
before do
|
52
|
-
variable.reference!(s(:lvar, name))
|
53
|
-
end
|
54
|
-
|
55
|
-
it { should be_truthy }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,276 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RuboCop::Cop::VariableForce::VariableTable do
|
6
|
-
include AST::Sexp
|
7
|
-
|
8
|
-
subject(:variable_table) { described_class.new }
|
9
|
-
|
10
|
-
describe '#push_scope' do
|
11
|
-
it 'returns pushed scope object' do
|
12
|
-
node = s(:def)
|
13
|
-
scope = variable_table.push_scope(node)
|
14
|
-
expect(scope).to equal(variable_table.current_scope)
|
15
|
-
expect(scope.node).to equal(node)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#pop_scope' do
|
20
|
-
before do
|
21
|
-
node = s(:def)
|
22
|
-
variable_table.push_scope(node)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'returns popped scope object' do
|
26
|
-
last_scope = variable_table.current_scope
|
27
|
-
popped_scope = variable_table.pop_scope
|
28
|
-
expect(popped_scope).to equal(last_scope)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#current_scope_level' do
|
33
|
-
before do
|
34
|
-
variable_table.push_scope(s(:def))
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'increases by pushing scope' do
|
38
|
-
last_scope_level = variable_table.current_scope_level
|
39
|
-
variable_table.push_scope(s(:def))
|
40
|
-
expect(variable_table.current_scope_level)
|
41
|
-
.to eq(last_scope_level + 1)
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'decreases by popping scope' do
|
45
|
-
last_scope_level = variable_table.current_scope_level
|
46
|
-
variable_table.pop_scope
|
47
|
-
expect(variable_table.current_scope_level)
|
48
|
-
.to eq(last_scope_level - 1)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe '#declare_variable' do
|
53
|
-
before do
|
54
|
-
2.times do
|
55
|
-
node = s(:def)
|
56
|
-
variable_table.push_scope(node)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'adds variable to current scope with its name as key' do
|
61
|
-
node = s(:lvasgn, :foo)
|
62
|
-
variable_table.declare_variable(:foo, node)
|
63
|
-
expect(variable_table.current_scope.variables)
|
64
|
-
.to have_key(:foo)
|
65
|
-
expect(variable_table.scope_stack[-2].variables)
|
66
|
-
.to be_empty
|
67
|
-
variable = variable_table.current_scope.variables[:foo]
|
68
|
-
expect(variable.declaration_node).to equal(node)
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'returns the added variable' do
|
72
|
-
node = s(:lvasgn, :foo)
|
73
|
-
variable = variable_table.declare_variable(:foo, node)
|
74
|
-
expect(variable.declaration_node).to equal(node)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe '#find_variable' do
|
79
|
-
before do
|
80
|
-
variable_table.push_scope(s(:class))
|
81
|
-
variable_table.declare_variable(:baz, s(:lvasgn, :baz))
|
82
|
-
|
83
|
-
variable_table.push_scope(s(:def))
|
84
|
-
variable_table.declare_variable(:bar, s(:lvasgn, :bar))
|
85
|
-
end
|
86
|
-
|
87
|
-
context 'when current scope is block' do
|
88
|
-
before do
|
89
|
-
variable_table.push_scope(s(:block))
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'when a variable with the target name exists ' \
|
93
|
-
'in current scope' do
|
94
|
-
before do
|
95
|
-
variable_table.declare_variable(:foo, s(:lvasgn, :foo))
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'and does not exist in outer scope' do
|
99
|
-
it 'returns the current scope variable' do
|
100
|
-
found_variable = variable_table.find_variable(:foo)
|
101
|
-
expect(found_variable.name).to eq(:foo)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'and also exists in outer scope' do
|
106
|
-
before do
|
107
|
-
variable_table.declare_variable(:bar, s(:lvasgn, :bar))
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'returns the current scope variable' do
|
111
|
-
found_variable = variable_table.find_variable(:bar)
|
112
|
-
expect(found_variable.name).to equal(:bar)
|
113
|
-
expect(variable_table.current_scope.variables)
|
114
|
-
.to have_value(found_variable)
|
115
|
-
expect(variable_table.scope_stack[-2].variables)
|
116
|
-
.not_to have_value(found_variable)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context 'when a variable with the target name does not exist ' \
|
122
|
-
'in current scope' do
|
123
|
-
context 'but exists in the direct outer scope' do
|
124
|
-
it 'returns the direct outer scope variable' do
|
125
|
-
found_variable = variable_table.find_variable(:bar)
|
126
|
-
expect(found_variable.name).to equal(:bar)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
context 'but exists in a indirect outer scope' do
|
131
|
-
context 'when the direct outer scope is block' do
|
132
|
-
before do
|
133
|
-
variable_table.pop_scope
|
134
|
-
variable_table.pop_scope
|
135
|
-
|
136
|
-
variable_table.push_scope(s(:block))
|
137
|
-
variable_table.push_scope(s(:block))
|
138
|
-
end
|
139
|
-
|
140
|
-
it 'returns the indirect outer scope variable' do
|
141
|
-
found_variable = variable_table.find_variable(:baz)
|
142
|
-
expect(found_variable.name).to equal(:baz)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'when the direct outer scope is not block' do
|
147
|
-
it 'returns nil' do
|
148
|
-
found_variable = variable_table.find_variable(:baz)
|
149
|
-
expect(found_variable).to be_nil
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context 'and does not exist in all outer scopes' do
|
155
|
-
it 'returns nil' do
|
156
|
-
found_variable = variable_table.find_variable(:non)
|
157
|
-
expect(found_variable).to be_nil
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'when current scope is not block' do
|
164
|
-
before do
|
165
|
-
variable_table.push_scope(s(:def))
|
166
|
-
end
|
167
|
-
|
168
|
-
context 'when a variable with the target name exists ' \
|
169
|
-
'in current scope' do
|
170
|
-
before do
|
171
|
-
variable_table.declare_variable(:foo, s(:lvasgn, :foo))
|
172
|
-
end
|
173
|
-
|
174
|
-
context 'and does not exist in outer scope' do
|
175
|
-
it 'returns the current scope variable' do
|
176
|
-
found_variable = variable_table.find_variable(:foo)
|
177
|
-
expect(found_variable.name).to eq(:foo)
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
context 'and also exists in outer scope' do
|
182
|
-
it 'returns the current scope variable' do
|
183
|
-
found_variable = variable_table.find_variable(:foo)
|
184
|
-
expect(found_variable.name).to equal(:foo)
|
185
|
-
expect(variable_table.current_scope.variables)
|
186
|
-
.to have_value(found_variable)
|
187
|
-
expect(variable_table.scope_stack[-2].variables)
|
188
|
-
.not_to have_value(found_variable)
|
189
|
-
end
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
context 'when a variable with the target name does not exist ' \
|
194
|
-
'in current scope' do
|
195
|
-
context 'but exists in the direct outer scope' do
|
196
|
-
it 'returns nil' do
|
197
|
-
found_variable = variable_table.find_variable(:bar)
|
198
|
-
expect(found_variable).to be_nil
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
context 'and does not exist in all outer scopes' do
|
203
|
-
it 'returns nil' do
|
204
|
-
found_variable = variable_table.find_variable(:non)
|
205
|
-
expect(found_variable).to be_nil
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
describe '#find_variable with an empty scope stack' do
|
213
|
-
it 'returns nil' do
|
214
|
-
found_variable = variable_table.find_variable(:unknown)
|
215
|
-
expect(found_variable).to be_nil
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
describe '#accessible_variables' do
|
220
|
-
let(:accessible_variable_names) do
|
221
|
-
variable_table.accessible_variables.map(&:name)
|
222
|
-
end
|
223
|
-
|
224
|
-
before do
|
225
|
-
variable_table.push_scope(s(:class))
|
226
|
-
end
|
227
|
-
|
228
|
-
context 'when there are no variables' do
|
229
|
-
it 'returns empty array' do
|
230
|
-
expect(variable_table.accessible_variables).to be_empty
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
context 'when the current scope has some variables' do
|
235
|
-
before do
|
236
|
-
variable_table.declare_variable(:foo, s(:lvasgn, :foo))
|
237
|
-
variable_table.declare_variable(:bar, s(:lvasgn, :bar))
|
238
|
-
end
|
239
|
-
|
240
|
-
it 'returns all the variables' do
|
241
|
-
expect(accessible_variable_names).to match_array([:foo, :bar])
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
context 'when the direct outer scope has some variables' do
|
246
|
-
before do
|
247
|
-
variable_table.declare_variable(:foo, s(:lvasgn, :foo))
|
248
|
-
end
|
249
|
-
|
250
|
-
context 'and the current scope is block' do
|
251
|
-
before do
|
252
|
-
variable_table.push_scope(s(:block))
|
253
|
-
variable_table.declare_variable(:bar, s(:lvasgn, :bar))
|
254
|
-
variable_table.declare_variable(:baz, s(:lvasgn, :baz))
|
255
|
-
end
|
256
|
-
|
257
|
-
it 'returns the current and direct outer scope variables' do
|
258
|
-
expect(accessible_variable_names)
|
259
|
-
.to match_array([:foo, :bar, :baz])
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
context 'and the current scope is not block' do
|
264
|
-
before do
|
265
|
-
variable_table.push_scope(s(:def))
|
266
|
-
variable_table.declare_variable(:bar, s(:lvasgn, :bar))
|
267
|
-
variable_table.declare_variable(:baz, s(:lvasgn, :baz))
|
268
|
-
end
|
269
|
-
|
270
|
-
it 'returns only the current scope variables' do
|
271
|
-
expect(accessible_variable_names).to match_array([:bar, :baz])
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|