rubocop 0.13.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubocop might be problematic. Click here for more details.

Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +42 -0
  4. data/README.md +59 -54
  5. data/config/default.yml +124 -95
  6. data/config/disabled.yml +4 -0
  7. data/config/enabled.yml +286 -264
  8. data/lib/rubocop.rb +10 -3
  9. data/lib/rubocop/cli.rb +10 -171
  10. data/lib/rubocop/cop/cop.rb +14 -11
  11. data/lib/rubocop/cop/lint/debugger.rb +35 -0
  12. data/lib/rubocop/cop/lint/syntax.rb +34 -0
  13. data/lib/rubocop/cop/offence.rb +15 -23
  14. data/lib/rubocop/cop/style/align_array.rb +1 -10
  15. data/lib/rubocop/cop/style/align_hash.rb +14 -2
  16. data/lib/rubocop/cop/style/align_parameters.rb +1 -11
  17. data/lib/rubocop/cop/style/and_or.rb +13 -11
  18. data/lib/rubocop/cop/style/attr.rb +1 -1
  19. data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
  20. data/lib/rubocop/cop/style/blocks.rb +14 -6
  21. data/lib/rubocop/cop/style/character_literal.rb +1 -1
  22. data/lib/rubocop/cop/style/class_length.rb +38 -0
  23. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  24. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  25. data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
  26. data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
  27. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  28. data/lib/rubocop/cop/style/even_odd.rb +7 -3
  29. data/lib/rubocop/cop/style/hash_methods.rb +1 -1
  30. data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
  31. data/lib/rubocop/cop/style/lambda_call.rb +36 -11
  32. data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
  33. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
  34. data/lib/rubocop/cop/style/method_length.rb +2 -13
  35. data/lib/rubocop/cop/style/method_name.rb +42 -0
  36. data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
  37. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  38. data/lib/rubocop/cop/style/raise_args.rb +60 -0
  39. data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
  40. data/lib/rubocop/cop/style/redundant_return.rb +14 -5
  41. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  42. data/lib/rubocop/cop/style/semicolon.rb +13 -4
  43. data/lib/rubocop/cop/style/signal_exception.rb +63 -14
  44. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  45. data/lib/rubocop/cop/style/string_help.rb +4 -1
  46. data/lib/rubocop/cop/style/string_literals.rb +34 -11
  47. data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
  48. data/lib/rubocop/cop/style/tab.rb +1 -1
  49. data/lib/rubocop/cop/style/variable_name.rb +44 -0
  50. data/lib/rubocop/cop/style/when_then.rb +1 -1
  51. data/lib/rubocop/cop/style/while_until_do.rb +1 -1
  52. data/lib/rubocop/cop/team.rb +4 -7
  53. data/lib/rubocop/cop/util.rb +12 -0
  54. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  55. data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
  56. data/lib/rubocop/formatter/json_formatter.rb +1 -0
  57. data/lib/rubocop/formatter/progress_formatter.rb +9 -13
  58. data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
  59. data/lib/rubocop/options.rb +184 -0
  60. data/lib/rubocop/processed_source.rb +4 -0
  61. data/lib/rubocop/version.rb +1 -1
  62. data/rubocop.gemspec +1 -1
  63. data/spec/rubocop/cli_spec.rb +870 -1001
  64. data/spec/rubocop/config_spec.rb +13 -13
  65. data/spec/rubocop/config_store_spec.rb +38 -37
  66. data/spec/rubocop/cop/commissioner_spec.rb +42 -46
  67. data/spec/rubocop/cop/cop_spec.rb +72 -77
  68. data/spec/rubocop/cop/corrector_spec.rb +51 -55
  69. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
  70. data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
  71. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  72. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
  73. data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
  74. data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
  75. data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
  76. data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
  77. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
  78. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
  79. data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
  80. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
  81. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
  82. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
  83. data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
  84. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
  85. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
  86. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
  87. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
  88. data/spec/rubocop/cop/lint/void_spec.rb +50 -56
  89. data/spec/rubocop/cop/offence_spec.rb +101 -131
  90. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
  91. data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
  92. data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
  93. data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
  94. data/spec/rubocop/cop/style/alias_spec.rb +30 -36
  95. data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
  96. data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
  97. data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
  98. data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
  99. data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
  100. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
  101. data/spec/rubocop/cop/style/attr_spec.rb +11 -17
  102. data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
  103. data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
  104. data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
  105. data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
  106. data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
  107. data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
  108. data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
  109. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
  110. data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
  111. data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
  112. data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
  113. data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
  114. data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
  115. data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
  116. data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
  117. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
  118. data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
  119. data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
  120. data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
  121. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
  122. data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
  123. data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
  124. data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
  125. data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
  126. data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
  127. data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
  128. data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
  129. data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
  130. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
  131. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
  132. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
  133. data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
  134. data/spec/rubocop/cop/style/for_spec.rb +18 -24
  135. data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
  136. data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
  137. data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
  138. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
  139. data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
  140. data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
  141. data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
  142. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
  143. data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
  144. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
  145. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  146. data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
  147. data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
  148. data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
  149. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
  150. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
  151. data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
  152. data/spec/rubocop/cop/style/not_spec.rb +13 -19
  153. data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
  154. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
  155. data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
  156. data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
  157. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
  158. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
  159. data/spec/rubocop/cop/style/proc_spec.rb +13 -19
  160. data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
  161. data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
  162. data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
  163. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  164. data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
  165. data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
  166. data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
  167. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
  168. data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
  169. data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
  170. data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
  171. data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
  172. data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
  173. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
  174. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
  175. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
  176. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
  177. data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
  178. data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
  179. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
  180. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
  181. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
  182. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
  183. data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
  184. data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
  185. data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
  186. data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
  187. data/spec/rubocop/cop/style/tab_spec.rb +9 -15
  188. data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
  189. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
  190. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
  191. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
  192. data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
  193. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
  194. data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
  195. data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
  196. data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
  197. data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
  198. data/spec/rubocop/cop/team_spec.rb +125 -127
  199. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
  200. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
  201. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
  202. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
  203. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
  204. data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
  205. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
  206. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
  207. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
  208. data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
  209. data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
  210. data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
  211. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
  212. data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
  213. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
  214. data/spec/rubocop/options_spec.rb +233 -0
  215. data/spec/rubocop/processed_source_spec.rb +85 -42
  216. data/spec/rubocop/source_parser_spec.rb +108 -110
  217. data/spec/rubocop/target_finder_spec.rb +125 -127
  218. data/spec/rubocop/token_spec.rb +15 -17
  219. metadata +32 -8
  220. data/lib/rubocop/backports/bsearch.rb +0 -39
  221. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
  222. data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -2,272 +2,266 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module VariableInspector
8
- describe VariableTable do
9
- include AST::Sexp
10
-
11
- subject(:variable_table) { VariableTable.new }
12
-
13
- describe '#push_scope' do
14
- it 'returns pushed scope object' do
15
- node = s(:def)
16
- scope = variable_table.push_scope(node)
17
- expect(scope).to equal(variable_table.current_scope)
18
- expect(scope.node).to equal(node)
19
- end
20
- end
5
+ describe Rubocop::Cop::VariableInspector::VariableTable do
6
+ include AST::Sexp
21
7
 
22
- describe '#pop_scope' do
23
- before do
24
- node = s(:def)
25
- variable_table.push_scope(node)
26
- end
8
+ subject(:variable_table) { described_class.new }
27
9
 
28
- it 'returns popped scope object' do
29
- last_scope = variable_table.current_scope
30
- popped_scope = variable_table.pop_scope
31
- expect(popped_scope).to equal(last_scope)
32
- end
33
- end
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
34
18
 
35
- describe '#current_scope_level' do
36
- before do
37
- variable_table.push_scope(s(:def))
38
- end
19
+ describe '#pop_scope' do
20
+ before do
21
+ node = s(:def)
22
+ variable_table.push_scope(node)
23
+ end
39
24
 
40
- it 'increases by pushing scope' do
41
- last_scope_level = variable_table.current_scope_level
42
- variable_table.push_scope(s(:def))
43
- expect(variable_table.current_scope_level)
44
- .to eq(last_scope_level + 1)
45
- end
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
46
59
 
47
- it 'decreases by popping scope' do
48
- last_scope_level = variable_table.current_scope_level
49
- variable_table.pop_scope
50
- expect(variable_table.current_scope_level)
51
- .to eq(last_scope_level - 1)
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)
52
102
  end
53
103
  end
54
104
 
55
- describe '#declare_variable' do
105
+ context 'and also exists in outer scope' do
56
106
  before do
57
- 2.times do
58
- node = s(:def)
59
- variable_table.push_scope(node)
60
- end
107
+ variable_table.declare_variable(:bar, s(:lvasgn, :bar))
61
108
  end
62
109
 
63
- it 'adds variable to current scope with its name as key' do
64
- node = s(:lvasgn, :foo)
65
- variable_table.declare_variable(:foo, node)
110
+ it 'returns the current scope variable' do
111
+ found_variable = variable_table.find_variable(:bar)
112
+ expect(found_variable.name).to equal(:bar)
66
113
  expect(variable_table.current_scope.variables)
67
- .to have_key(:foo)
114
+ .to have_value(found_variable)
68
115
  expect(variable_table.scope_stack[-2].variables)
69
- .to be_empty
70
- variable = variable_table.current_scope.variables[:foo]
71
- expect(variable.declaration_node).to equal(node)
72
- end
73
-
74
- it 'returns the added variable' do
75
- node = s(:lvasgn, :foo)
76
- variable = variable_table.declare_variable(:foo, node)
77
- expect(variable.declaration_node).to equal(node)
116
+ .not_to have_value(found_variable)
78
117
  end
79
118
  end
119
+ end
80
120
 
81
- describe '#find_variable' do
82
- before do
83
- variable_table.push_scope(s(:class))
84
- variable_table.declare_variable(:baz, s(:lvasgn, :baz))
85
-
86
- variable_table.push_scope(s(:def))
87
- variable_table.declare_variable(:bar, s(:lvasgn, :bar))
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)
88
127
  end
128
+ end
89
129
 
90
- context 'when current scope is block' do
130
+ context 'but exists in a indirect outer scope' do
131
+ context 'when the direct outer scope is block' do
91
132
  before do
133
+ variable_table.pop_scope
134
+ variable_table.pop_scope
135
+
136
+ variable_table.push_scope(s(:block))
92
137
  variable_table.push_scope(s(:block))
93
138
  end
94
139
 
95
- context 'when a variable with the target name exists ' +
96
- 'in current scope' do
97
- before do
98
- variable_table.declare_variable(:foo, s(:lvasgn, :foo))
99
- end
100
-
101
- context 'and does not exist in outer scope' do
102
- it 'returns the current scope variable' do
103
- found_variable = variable_table.find_variable(:foo)
104
- expect(found_variable.name).to eq(:foo)
105
- end
106
- end
107
-
108
- context 'and also exists in outer scope' do
109
- before do
110
- variable_table.declare_variable(:bar, s(:lvasgn, :bar))
111
- end
112
-
113
- it 'returns the current scope variable' do
114
- found_variable = variable_table.find_variable(:bar)
115
- expect(found_variable.name).to equal(:bar)
116
- expect(variable_table.current_scope.variables)
117
- .to have_value(found_variable)
118
- expect(variable_table.scope_stack[-2].variables)
119
- .not_to have_value(found_variable)
120
- end
121
- end
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)
122
143
  end
144
+ end
123
145
 
124
- context 'when a variable with the target name does not exist ' +
125
- 'in current scope' do
126
- context 'but exists in the direct outer scope' do
127
- it 'returns the direct outer scope variable' do
128
- found_variable = variable_table.find_variable(:bar)
129
- expect(found_variable.name).to equal(:bar)
130
- end
131
- end
132
-
133
- context 'but exists in a indirect outer scope' do
134
- context 'when the direct outer scope is block' do
135
- before do
136
- variable_table.pop_scope
137
- variable_table.pop_scope
138
-
139
- variable_table.push_scope(s(:block))
140
- variable_table.push_scope(s(:block))
141
- end
142
-
143
- it 'returns the indirect outer scope variable' do
144
- found_variable = variable_table.find_variable(:baz)
145
- expect(found_variable.name).to equal(:baz)
146
- end
147
- end
148
-
149
- context 'when the direct outer scope is not block' do
150
- it 'returns nil' do
151
- found_variable = variable_table.find_variable(:baz)
152
- expect(found_variable).to be_nil
153
- end
154
- end
155
- end
156
-
157
- context 'and does not exist in all outer scopes' do
158
- it 'returns nil' do
159
- found_variable = variable_table.find_variable(:non)
160
- expect(found_variable).to be_nil
161
- end
162
- end
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
163
150
  end
164
151
  end
152
+ end
165
153
 
166
- context 'when current scope is not block' do
167
- before do
168
- variable_table.push_scope(s(:def))
169
- end
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
170
162
 
171
- context 'when a variable with the target name exists ' +
172
- 'in current scope' do
173
- before do
174
- variable_table.declare_variable(:foo, s(:lvasgn, :foo))
175
- end
176
-
177
- context 'and does not exist in outer scope' do
178
- it 'returns the current scope variable' do
179
- found_variable = variable_table.find_variable(:foo)
180
- expect(found_variable.name).to eq(:foo)
181
- end
182
- end
183
-
184
- context 'and also exists in outer scope' do
185
- it 'returns the current scope variable' do
186
- found_variable = variable_table.find_variable(:foo)
187
- expect(found_variable.name).to equal(:foo)
188
- expect(variable_table.current_scope.variables)
189
- .to have_value(found_variable)
190
- expect(variable_table.scope_stack[-2].variables)
191
- .not_to have_value(found_variable)
192
- end
193
- end
194
- end
163
+ context 'when current scope is not block' do
164
+ before do
165
+ variable_table.push_scope(s(:def))
166
+ end
195
167
 
196
- context 'when a variable with the target name does not exist ' +
197
- 'in current scope' do
198
- context 'but exists in the direct outer scope' do
199
- it 'returns nil' do
200
- found_variable = variable_table.find_variable(:bar)
201
- expect(found_variable).to be_nil
202
- end
203
- end
204
-
205
- context 'and does not exist in all outer scopes' do
206
- it 'returns nil' do
207
- found_variable = variable_table.find_variable(:non)
208
- expect(found_variable).to be_nil
209
- end
210
- end
211
- end
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)
212
178
  end
213
179
  end
214
180
 
215
- describe '#accessible_variables' do
216
- let(:accessible_variable_names) do
217
- variable_table.accessible_variables.map(&:name)
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)
218
189
  end
190
+ end
191
+ end
219
192
 
220
- before do
221
- variable_table.push_scope(s(:class))
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
222
199
  end
200
+ end
223
201
 
224
- context 'when there are no variables' do
225
- it 'returns empty array' do
226
- expect(variable_table.accessible_variables).to be_empty
227
- end
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
228
206
  end
207
+ end
208
+ end
209
+ end
210
+ end
229
211
 
230
- context 'when the current scope has some variables' do
231
- before do
232
- variable_table.declare_variable(:foo, s(:lvasgn, :foo))
233
- variable_table.declare_variable(:bar, s(:lvasgn, :bar))
234
- end
212
+ describe '#accessible_variables' do
213
+ let(:accessible_variable_names) do
214
+ variable_table.accessible_variables.map(&:name)
215
+ end
235
216
 
236
- it 'returns all the variables' do
237
- expect(accessible_variable_names).to match_array([:foo, :bar])
238
- end
239
- end
217
+ before do
218
+ variable_table.push_scope(s(:class))
219
+ end
240
220
 
241
- context 'when the direct outer scope has some variables' do
242
- before do
243
- variable_table.declare_variable(:foo, s(:lvasgn, :foo))
244
- end
221
+ context 'when there are no variables' do
222
+ it 'returns empty array' do
223
+ expect(variable_table.accessible_variables).to be_empty
224
+ end
225
+ end
245
226
 
246
- context 'and the current scope is block' do
247
- before do
248
- variable_table.push_scope(s(:block))
249
- variable_table.declare_variable(:bar, s(:lvasgn, :bar))
250
- variable_table.declare_variable(:baz, s(:lvasgn, :baz))
251
- end
252
-
253
- it 'returns the current and direct outer scope variables' do
254
- expect(accessible_variable_names)
255
- .to match_array([:foo, :bar, :baz])
256
- end
257
- end
227
+ context 'when the current scope has some variables' do
228
+ before do
229
+ variable_table.declare_variable(:foo, s(:lvasgn, :foo))
230
+ variable_table.declare_variable(:bar, s(:lvasgn, :bar))
231
+ end
232
+
233
+ it 'returns all the variables' do
234
+ expect(accessible_variable_names).to match_array([:foo, :bar])
235
+ end
236
+ end
258
237
 
259
- context 'and the current scope is not block' do
260
- before do
261
- variable_table.push_scope(s(:def))
262
- variable_table.declare_variable(:bar, s(:lvasgn, :bar))
263
- variable_table.declare_variable(:baz, s(:lvasgn, :baz))
264
- end
238
+ context 'when the direct outer scope has some variables' do
239
+ before do
240
+ variable_table.declare_variable(:foo, s(:lvasgn, :foo))
241
+ end
265
242
 
266
- it 'returns only the current scope variables' do
267
- expect(accessible_variable_names).to match_array([:bar, :baz])
268
- end
269
- end
270
- end
243
+ context 'and the current scope is block' do
244
+ before do
245
+ variable_table.push_scope(s(:block))
246
+ variable_table.declare_variable(:bar, s(:lvasgn, :bar))
247
+ variable_table.declare_variable(:baz, s(:lvasgn, :baz))
248
+ end
249
+
250
+ it 'returns the current and direct outer scope variables' do
251
+ expect(accessible_variable_names)
252
+ .to match_array([:foo, :bar, :baz])
253
+ end
254
+ end
255
+
256
+ context 'and the current scope is not block' do
257
+ before do
258
+ variable_table.push_scope(s(:def))
259
+ variable_table.declare_variable(:bar, s(:lvasgn, :bar))
260
+ variable_table.declare_variable(:baz, s(:lvasgn, :baz))
261
+ end
262
+
263
+ it 'returns only the current scope variables' do
264
+ expect(accessible_variable_names).to match_array([:bar, :baz])
271
265
  end
272
266
  end
273
267
  end