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,242 +2,236 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Lint
8
- describe ShadowingOuterLocalVariable do
9
- subject(:cop) { ShadowingOuterLocalVariable.new }
10
-
11
- context 'when a block argument has same name ' +
12
- 'as an outer scope variable' do
13
- let(:source) do
14
- [
15
- 'def some_method',
16
- ' foo = 1',
17
- ' puts foo',
18
- ' 1.times do |foo|',
19
- ' end',
20
- 'end'
21
- ]
22
- end
23
-
24
- it 'registers an offence' do
25
- inspect_source(cop, source)
26
- expect(cop.offences.size).to eq(1)
27
- expect(cop.offences.first.message)
28
- .to include('Shadowing outer local variable - foo')
29
- expect(cop.offences.first.line).to eq(4)
30
- end
31
-
32
- include_examples 'mimics MRI 2.0'
33
- end
34
-
35
- context 'when a splat block argument has same name ' +
36
- 'as an outer scope variable' do
37
- let(:source) do
38
- [
39
- 'def some_method',
40
- ' foo = 1',
41
- ' puts foo',
42
- ' 1.times do |*foo|',
43
- ' end',
44
- 'end'
45
- ]
46
- end
47
-
48
- it 'registers an offence' do
49
- inspect_source(cop, source)
50
- expect(cop.offences.size).to eq(1)
51
- expect(cop.offences.first.message)
52
- .to include('Shadowing outer local variable - foo')
53
- expect(cop.offences.first.line).to eq(4)
54
- end
55
-
56
- include_examples 'mimics MRI 2.0'
57
- end
58
-
59
- context 'when a block block argument has same name ' +
60
- 'as an outer scope variable' do
61
- let(:source) do
62
- [
63
- 'def some_method',
64
- ' foo = 1',
65
- ' puts foo',
66
- ' proc_taking_block = proc do |&foo|',
67
- ' end',
68
- ' proc_taking_block.call do',
69
- ' end',
70
- 'end'
71
- ]
72
- end
73
-
74
- it 'registers an offence' do
75
- inspect_source(cop, source)
76
- expect(cop.offences.size).to eq(1)
77
- expect(cop.offences.first.message)
78
- .to include('Shadowing outer local variable - foo')
79
- expect(cop.offences.first.line).to eq(4)
80
- end
81
-
82
- include_examples 'mimics MRI 2.0'
83
- end
84
-
85
- context 'when a block local variable has same name ' +
86
- 'as an outer scope variable' do
87
- let(:source) do
88
- [
89
- 'def some_method',
90
- ' foo = 1',
91
- ' puts foo',
92
- ' 1.times do |i; foo|',
93
- ' puts foo',
94
- ' end',
95
- 'end'
96
- ]
97
- end
98
-
99
- it 'registers an offence' do
100
- inspect_source(cop, source)
101
- expect(cop.offences.size).to eq(1)
102
- expect(cop.offences.first.message)
103
- .to include('Shadowing outer local variable - foo')
104
- expect(cop.offences.first.line).to eq(4)
105
- end
106
-
107
- include_examples 'mimics MRI 2.0', 'shadowing'
108
- end
109
-
110
- context 'when a block argument has different name ' +
111
- 'with outer scope variables' do
112
- let(:source) do
113
- [
114
- 'def some_method',
115
- ' foo = 1',
116
- ' puts foo',
117
- ' 1.times do |bar|',
118
- ' end',
119
- 'end'
120
- ]
121
- end
122
-
123
- include_examples 'accepts'
124
- include_examples 'mimics MRI 2.0'
125
- end
126
-
127
- context 'when an outer scope variable is reassigned in a block' do
128
- let(:source) do
129
- [
130
- 'def some_method',
131
- ' foo = 1',
132
- ' puts foo',
133
- ' 1.times do',
134
- ' foo = 2',
135
- ' end',
136
- 'end'
137
- ]
138
- end
139
-
140
- include_examples 'accepts'
141
- include_examples 'mimics MRI 2.0'
142
- end
143
-
144
- context 'when an outer scope variable is referenced in a block' do
145
- let(:source) do
146
- [
147
- 'def some_method',
148
- ' foo = 1',
149
- ' puts foo',
150
- ' 1.times do',
151
- ' puts foo',
152
- ' end',
153
- 'end'
154
- ]
155
- end
156
-
157
- include_examples 'accepts'
158
- include_examples 'mimics MRI 2.0'
159
- end
160
-
161
- context 'when multiple block arguments have same name "_"' do
162
- let(:source) do
163
- [
164
- 'def some_method',
165
- ' 1.times do |_, foo, _|',
166
- ' end',
167
- 'end'
168
- ]
169
- end
170
-
171
- include_examples 'accepts'
172
- include_examples 'mimics MRI 2.0'
173
- end
174
-
175
- context 'when multiple block arguments have ' +
176
- 'a same name starts with "_"' do
177
- let(:source) do
178
- [
179
- 'def some_method',
180
- ' 1.times do |_foo, bar, _foo|',
181
- ' end',
182
- 'end'
183
- ]
184
- end
185
-
186
- include_examples 'accepts'
187
- include_examples 'mimics MRI 2.0'
188
- end
189
-
190
- context 'when a block argument has same name "_" ' +
191
- 'as outer scope variable "_"' do
192
- let(:source) do
193
- [
194
- 'def some_method',
195
- ' _ = 1',
196
- ' puts _',
197
- ' 1.times do |_|',
198
- ' end',
199
- 'end'
200
- ]
201
- end
202
-
203
- include_examples 'accepts'
204
- include_examples 'mimics MRI 2.0'
205
- end
206
-
207
- context 'when a block argument has a same name starts with "_" ' +
208
- 'as an outer scope variable' do
209
- let(:source) do
210
- [
211
- 'def some_method',
212
- ' _foo = 1',
213
- ' puts _foo',
214
- ' 1.times do |_foo|',
215
- ' end',
216
- 'end'
217
- ]
218
- end
219
-
220
- include_examples 'accepts'
221
- include_examples 'mimics MRI 2.0'
222
- end
223
-
224
- context 'when a method argument has same name ' +
225
- 'as an outer scope variable' do
226
- let(:source) do
227
- [
228
- 'class SomeClass',
229
- ' foo = 1',
230
- ' puts foo',
231
- ' def some_method(foo)',
232
- ' end',
233
- 'end'
234
- ]
235
- end
236
-
237
- include_examples 'accepts'
238
- include_examples 'mimics MRI 2.0'
239
- end
240
- end
5
+ describe Rubocop::Cop::Lint::ShadowingOuterLocalVariable do
6
+ subject(:cop) { described_class.new }
7
+
8
+ context 'when a block argument has same name ' +
9
+ 'as an outer scope variable' do
10
+ let(:source) do
11
+ [
12
+ 'def some_method',
13
+ ' foo = 1',
14
+ ' puts foo',
15
+ ' 1.times do |foo|',
16
+ ' end',
17
+ 'end'
18
+ ]
241
19
  end
20
+
21
+ it 'registers an offence' do
22
+ inspect_source(cop, source)
23
+ expect(cop.offences.size).to eq(1)
24
+ expect(cop.offences.first.message)
25
+ .to include('Shadowing outer local variable - foo')
26
+ expect(cop.offences.first.line).to eq(4)
27
+ end
28
+
29
+ include_examples 'mimics MRI 2.0'
30
+ end
31
+
32
+ context 'when a splat block argument has same name ' +
33
+ 'as an outer scope variable' do
34
+ let(:source) do
35
+ [
36
+ 'def some_method',
37
+ ' foo = 1',
38
+ ' puts foo',
39
+ ' 1.times do |*foo|',
40
+ ' end',
41
+ 'end'
42
+ ]
43
+ end
44
+
45
+ it 'registers an offence' do
46
+ inspect_source(cop, source)
47
+ expect(cop.offences.size).to eq(1)
48
+ expect(cop.offences.first.message)
49
+ .to include('Shadowing outer local variable - foo')
50
+ expect(cop.offences.first.line).to eq(4)
51
+ end
52
+
53
+ include_examples 'mimics MRI 2.0'
54
+ end
55
+
56
+ context 'when a block block argument has same name ' +
57
+ 'as an outer scope variable' do
58
+ let(:source) do
59
+ [
60
+ 'def some_method',
61
+ ' foo = 1',
62
+ ' puts foo',
63
+ ' proc_taking_block = proc do |&foo|',
64
+ ' end',
65
+ ' proc_taking_block.call do',
66
+ ' end',
67
+ 'end'
68
+ ]
69
+ end
70
+
71
+ it 'registers an offence' do
72
+ inspect_source(cop, source)
73
+ expect(cop.offences.size).to eq(1)
74
+ expect(cop.offences.first.message)
75
+ .to include('Shadowing outer local variable - foo')
76
+ expect(cop.offences.first.line).to eq(4)
77
+ end
78
+
79
+ include_examples 'mimics MRI 2.0'
80
+ end
81
+
82
+ context 'when a block local variable has same name ' +
83
+ 'as an outer scope variable' do
84
+ let(:source) do
85
+ [
86
+ 'def some_method',
87
+ ' foo = 1',
88
+ ' puts foo',
89
+ ' 1.times do |i; foo|',
90
+ ' puts foo',
91
+ ' end',
92
+ 'end'
93
+ ]
94
+ end
95
+
96
+ it 'registers an offence' do
97
+ inspect_source(cop, source)
98
+ expect(cop.offences.size).to eq(1)
99
+ expect(cop.offences.first.message)
100
+ .to include('Shadowing outer local variable - foo')
101
+ expect(cop.offences.first.line).to eq(4)
102
+ end
103
+
104
+ include_examples 'mimics MRI 2.0', 'shadowing'
105
+ end
106
+
107
+ context 'when a block argument has different name ' +
108
+ 'with outer scope variables' do
109
+ let(:source) do
110
+ [
111
+ 'def some_method',
112
+ ' foo = 1',
113
+ ' puts foo',
114
+ ' 1.times do |bar|',
115
+ ' end',
116
+ 'end'
117
+ ]
118
+ end
119
+
120
+ include_examples 'accepts'
121
+ include_examples 'mimics MRI 2.0'
122
+ end
123
+
124
+ context 'when an outer scope variable is reassigned in a block' do
125
+ let(:source) do
126
+ [
127
+ 'def some_method',
128
+ ' foo = 1',
129
+ ' puts foo',
130
+ ' 1.times do',
131
+ ' foo = 2',
132
+ ' end',
133
+ 'end'
134
+ ]
135
+ end
136
+
137
+ include_examples 'accepts'
138
+ include_examples 'mimics MRI 2.0'
139
+ end
140
+
141
+ context 'when an outer scope variable is referenced in a block' do
142
+ let(:source) do
143
+ [
144
+ 'def some_method',
145
+ ' foo = 1',
146
+ ' puts foo',
147
+ ' 1.times do',
148
+ ' puts foo',
149
+ ' end',
150
+ 'end'
151
+ ]
152
+ end
153
+
154
+ include_examples 'accepts'
155
+ include_examples 'mimics MRI 2.0'
156
+ end
157
+
158
+ context 'when multiple block arguments have same name "_"' do
159
+ let(:source) do
160
+ [
161
+ 'def some_method',
162
+ ' 1.times do |_, foo, _|',
163
+ ' end',
164
+ 'end'
165
+ ]
166
+ end
167
+
168
+ include_examples 'accepts'
169
+ include_examples 'mimics MRI 2.0'
170
+ end
171
+
172
+ context 'when multiple block arguments have ' +
173
+ 'a same name starts with "_"' do
174
+ let(:source) do
175
+ [
176
+ 'def some_method',
177
+ ' 1.times do |_foo, bar, _foo|',
178
+ ' end',
179
+ 'end'
180
+ ]
181
+ end
182
+
183
+ include_examples 'accepts'
184
+ include_examples 'mimics MRI 2.0'
185
+ end
186
+
187
+ context 'when a block argument has same name "_" ' +
188
+ 'as outer scope variable "_"' do
189
+ let(:source) do
190
+ [
191
+ 'def some_method',
192
+ ' _ = 1',
193
+ ' puts _',
194
+ ' 1.times do |_|',
195
+ ' end',
196
+ 'end'
197
+ ]
198
+ end
199
+
200
+ include_examples 'accepts'
201
+ include_examples 'mimics MRI 2.0'
202
+ end
203
+
204
+ context 'when a block argument has a same name starts with "_" ' +
205
+ 'as an outer scope variable' do
206
+ let(:source) do
207
+ [
208
+ 'def some_method',
209
+ ' _foo = 1',
210
+ ' puts _foo',
211
+ ' 1.times do |_foo|',
212
+ ' end',
213
+ 'end'
214
+ ]
215
+ end
216
+
217
+ include_examples 'accepts'
218
+ include_examples 'mimics MRI 2.0'
219
+ end
220
+
221
+ context 'when a method argument has same name ' +
222
+ 'as an outer scope variable' do
223
+ let(:source) do
224
+ [
225
+ 'class SomeClass',
226
+ ' foo = 1',
227
+ ' puts foo',
228
+ ' def some_method(foo)',
229
+ ' end',
230
+ 'end'
231
+ ]
232
+ end
233
+
234
+ include_examples 'accepts'
235
+ include_examples 'mimics MRI 2.0'
242
236
  end
243
237
  end