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,50 +2,44 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe HashMethods do
9
- subject(:cop) { described_class.new }
10
-
11
- it 'registers an offence for has_key? with one arg' do
12
- inspect_source(cop,
13
- ['o.has_key?(o)'])
14
- expect(cop.offences.size).to eq(1)
15
- expect(cop.messages)
16
- .to eq(['has_key? is deprecated in favor of key?.'])
17
- end
18
-
19
- it 'accepts has_key? with no args' do
20
- inspect_source(cop,
21
- ['o.has_key?'])
22
- expect(cop.offences).to be_empty
23
- end
24
-
25
- it 'registers an offence for has_value? with one arg' do
26
- inspect_source(cop,
27
- ['o.has_value?(o)'])
28
- expect(cop.offences.size).to eq(1)
29
- expect(cop.messages)
30
- .to eq(['has_value? is deprecated in favor of value?.'])
31
- end
32
-
33
- it 'accepts has_value? with no args' do
34
- inspect_source(cop,
35
- ['o.has_value?'])
36
- expect(cop.offences).to be_empty
37
- end
38
-
39
- it 'auto-corrects has_key? with key?' do
40
- new_source = autocorrect_source(cop, 'hash.has_key?(:test)')
41
- expect(new_source).to eq('hash.key?(:test)')
42
- end
43
-
44
- it 'auto-corrects has_value? with value?' do
45
- new_source = autocorrect_source(cop, 'hash.has_value?(value)')
46
- expect(new_source).to eq('hash.value?(value)')
47
- end
48
- end
49
- end
5
+ describe Rubocop::Cop::Style::HashMethods do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for has_key? with one arg' do
9
+ inspect_source(cop,
10
+ ['o.has_key?(o)'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['has_key? is deprecated in favor of key?.'])
14
+ end
15
+
16
+ it 'accepts has_key? with no args' do
17
+ inspect_source(cop,
18
+ ['o.has_key?'])
19
+ expect(cop.offences).to be_empty
20
+ end
21
+
22
+ it 'registers an offence for has_value? with one arg' do
23
+ inspect_source(cop,
24
+ ['o.has_value?(o)'])
25
+ expect(cop.offences.size).to eq(1)
26
+ expect(cop.messages)
27
+ .to eq(['has_value? is deprecated in favor of value?.'])
28
+ end
29
+
30
+ it 'accepts has_value? with no args' do
31
+ inspect_source(cop,
32
+ ['o.has_value?'])
33
+ expect(cop.offences).to be_empty
34
+ end
35
+
36
+ it 'auto-corrects has_key? with key?' do
37
+ new_source = autocorrect_source(cop, 'hash.has_key?(:test)')
38
+ expect(new_source).to eq('hash.key?(:test)')
39
+ end
40
+
41
+ it 'auto-corrects has_value? with value?' do
42
+ new_source = autocorrect_source(cop, 'hash.has_value?(value)')
43
+ expect(new_source).to eq('hash.value?(value)')
50
44
  end
51
45
  end
@@ -2,71 +2,99 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe HashSyntax do
9
- subject(:cop) { described_class.new }
10
-
11
- it 'registers offence for hash rocket syntax when new is possible' do
12
- inspect_source(cop, ['x = { :a => 0 }'])
13
- expect(cop.messages).to eq(
14
- ['Ruby 1.8 hash syntax detected'])
15
- end
16
-
17
- it 'registers an offence for mixed syntax when new is possible' do
18
- inspect_source(cop, ['x = { :a => 0, b: 1 }'])
19
- expect(cop.messages).to eq(
20
- ['Ruby 1.8 hash syntax detected'])
21
- end
22
-
23
- it 'registers an offence for hash rockets in method calls' do
24
- inspect_source(cop, ['func(3, :a => 0)'])
25
- expect(cop.messages).to eq(
26
- ['Ruby 1.8 hash syntax detected'])
27
- end
28
-
29
- it 'accepts hash rockets when keys have different types' do
30
- inspect_source(cop, ['x = { :a => 0, "b" => 1 }'])
31
- expect(cop.messages).to be_empty
32
- end
33
-
34
- it 'accepts hash rockets when keys have whitespaces in them' do
35
- inspect_source(cop, ['x = { :"t o" => 0 }'])
36
- expect(cop.messages).to be_empty
37
- end
38
-
39
- it 'accepts hash rockets when keys have special symbols in them' do
40
- inspect_source(cop, ['x = { :"\tab" => 1 }'])
41
- expect(cop.messages).to be_empty
42
- end
43
-
44
- it 'accepts hash rockets when keys start with a digit' do
45
- inspect_source(cop, ['x = { :"1" => 1 }'])
46
- expect(cop.messages).to be_empty
47
- end
48
-
49
- it 'registers offence when keys start with an uppercase letter' do
50
- inspect_source(cop, ['x = { :A => 0 }'])
51
- expect(cop.messages).to eq(
52
- ['Ruby 1.8 hash syntax detected'])
53
- end
54
-
55
- it 'accepts new syntax in a hash literal' do
56
- inspect_source(cop, ['x = { a: 0, b: 1 }'])
57
- expect(cop.messages).to be_empty
58
- end
59
-
60
- it 'accepts new syntax in method calls' do
61
- inspect_source(cop, ['func(3, a: 0)'])
62
- expect(cop.messages).to be_empty
63
- end
64
-
65
- it 'auto-corrects old to new style' do
66
- new_source = autocorrect_source(cop, '{ :a => 1, :b => 2}')
67
- expect(new_source).to eq('{ a: 1, b: 2}')
68
- end
69
- end
5
+ describe Rubocop::Cop::Style::HashSyntax, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'configured to enforce ruby19 style' do
9
+ let(:cop_config) { { 'EnforcedStyle' => 'ruby19' } }
10
+
11
+ it 'registers offence for hash rocket syntax when new is possible' do
12
+ inspect_source(cop, ['x = { :a => 0 }'])
13
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
14
+ end
15
+
16
+ it 'registers an offence for mixed syntax when new is possible' do
17
+ inspect_source(cop, ['x = { :a => 0, b: 1 }'])
18
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
19
+ end
20
+
21
+ it 'registers an offence for hash rockets in method calls' do
22
+ inspect_source(cop, ['func(3, :a => 0)'])
23
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
24
+ end
25
+
26
+ it 'accepts hash rockets when keys have different types' do
27
+ inspect_source(cop, ['x = { :a => 0, "b" => 1 }'])
28
+ expect(cop.messages).to be_empty
29
+ end
30
+
31
+ it 'accepts hash rockets when keys have whitespaces in them' do
32
+ inspect_source(cop, ['x = { :"t o" => 0 }'])
33
+ expect(cop.messages).to be_empty
34
+ end
35
+
36
+ it 'accepts hash rockets when keys have special symbols in them' do
37
+ inspect_source(cop, ['x = { :"\tab" => 1 }'])
38
+ expect(cop.messages).to be_empty
39
+ end
40
+
41
+ it 'accepts hash rockets when keys start with a digit' do
42
+ inspect_source(cop, ['x = { :"1" => 1 }'])
43
+ expect(cop.messages).to be_empty
44
+ end
45
+
46
+ it 'registers offence when keys start with an uppercase letter' do
47
+ inspect_source(cop, ['x = { :A => 0 }'])
48
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
49
+ end
50
+
51
+ it 'accepts new syntax in a hash literal' do
52
+ inspect_source(cop, ['x = { a: 0, b: 1 }'])
53
+ expect(cop.messages).to be_empty
54
+ end
55
+
56
+ it 'accepts new syntax in method calls' do
57
+ inspect_source(cop, ['func(3, a: 0)'])
58
+ expect(cop.messages).to be_empty
59
+ end
60
+
61
+ it 'auto-corrects old to new style' do
62
+ new_source = autocorrect_source(cop, '{ :a => 1, :b => 2}')
63
+ expect(new_source).to eq('{ a: 1, b: 2}')
64
+ end
65
+ end
66
+
67
+ context 'configured to enforce ruby19 style' do
68
+ let(:cop_config) { { 'EnforcedStyle' => 'hash_rockets' } }
69
+
70
+ it 'registers offence for Ruby 1.9 style' do
71
+ inspect_source(cop, ['x = { a: 0 }'])
72
+ expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
73
+ end
74
+
75
+ it 'registers an offence for mixed syntax' do
76
+ inspect_source(cop, ['x = { :a => 0, b: 1 }'])
77
+ expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
78
+ end
79
+
80
+ it 'registers an offence for 1.9 style in method calls' do
81
+ inspect_source(cop, ['func(3, a: 0)'])
82
+ expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
83
+ end
84
+
85
+ it 'accepts hash rockets in a hash literal' do
86
+ inspect_source(cop, ['x = { :a => 0, :b => 1 }'])
87
+ expect(cop.messages).to be_empty
88
+ end
89
+
90
+ it 'accepts hash rockets in method calls' do
91
+ inspect_source(cop, ['func(3, :a => 0)'])
92
+ expect(cop.messages).to be_empty
93
+ end
94
+
95
+ it 'auto-corrects new style to hash rockets' do
96
+ new_source = autocorrect_source(cop, '{ a: 1, b: 2}')
97
+ expect(new_source).to eq('{ :a => 1, :b => 2}')
70
98
  end
71
99
  end
72
100
  end
@@ -2,24 +2,18 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe IfWithSemicolon do
9
- subject(:iws) { IfWithSemicolon.new }
5
+ describe Rubocop::Cop::Style::IfWithSemicolon do
6
+ subject(:cop) { described_class.new }
10
7
 
11
- it 'registers an offence for one line if/;/end' do
12
- inspect_source(iws, ['if cond; run else dont end'])
13
- expect(iws.messages).to eq(
14
- ['Never use if x; Use the ternary operator instead.'])
15
- end
8
+ it 'registers an offence for one line if/;/end' do
9
+ inspect_source(cop, ['if cond; run else dont end'])
10
+ expect(cop.messages).to eq(
11
+ ['Never use if x; Use the ternary operator instead.'])
12
+ end
16
13
 
17
- it 'can handle modifier conditionals' do
18
- inspect_source(iws, ['class Hash',
19
- 'end if RUBY_VERSION < "1.8.7"'])
20
- expect(iws.messages).to be_empty
21
- end
22
- end
23
- end
14
+ it 'can handle modifier conditionals' do
15
+ inspect_source(cop, ['class Hash',
16
+ 'end if RUBY_VERSION < "1.8.7"'])
17
+ expect(cop.messages).to be_empty
24
18
  end
25
19
  end
@@ -2,389 +2,383 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe IndentationWidth do
9
- subject(:cop) { described_class.new }
10
-
11
- context 'with if statement' do
12
- it 'registers an offence for bad indentation of an if body' do
13
- inspect_source(cop,
14
- ['if cond',
15
- ' func',
16
- 'end'])
17
- expect(cop.messages)
18
- .to eq(['Use 2 (not 1) spaces for indentation.'])
19
- end
20
-
21
- it 'registers an offence for bad indentation of an else body' do
22
- inspect_source(cop,
23
- ['if cond',
24
- ' func1',
25
- 'else',
26
- ' func2',
27
- 'end'])
28
- expect(cop.messages)
29
- .to eq(['Use 2 (not 1) spaces for indentation.'])
30
- end
31
-
32
- it 'registers an offence for bad indentation of an elsif body' do
33
- inspect_source(cop,
34
- ['if a1',
35
- ' b1',
36
- 'elsif a2',
37
- ' b2',
38
- 'else',
39
- ' c',
40
- 'end'])
41
- expect(cop.messages)
42
- .to eq(['Use 2 (not 1) spaces for indentation.'])
43
- end
44
-
45
- it 'registers offence for bad indentation of ternary inside else' do
46
- inspect_source(cop,
47
- ['if a',
48
- ' b',
49
- 'else',
50
- ' x ? y : z',
51
- 'end'])
52
- expect(cop.messages)
53
- .to eq(['Use 2 (not 5) spaces for indentation.'])
54
- end
55
-
56
- it 'registers offence for bad indentation of modifier if in else' do
57
- inspect_source(cop,
58
- ['if a',
59
- ' b',
60
- 'else',
61
- ' x if y',
62
- 'end'])
63
- expect(cop.messages)
64
- .to eq(['Use 2 (not 3) spaces for indentation.'])
65
- end
66
-
67
- it 'accepts a one line if statement' do
68
- inspect_source(cop,
69
- ['if cond then func1 else func2 end'])
70
- expect(cop.offences).to be_empty
71
- end
72
-
73
- it 'accepts a correctly aligned if/elsif/else/end' do
74
- inspect_source(cop,
75
- ['if a1',
76
- ' b1',
77
- 'elsif a2',
78
- ' b2',
79
- 'else',
80
- ' c',
81
- 'end'])
82
- expect(cop.offences).to be_empty
83
- end
84
-
85
- it 'accepts if/elsif/else/end laid out as a table' do
86
- inspect_source(cop,
87
- ['if @io == $stdout then str << "$stdout"',
88
- 'elsif @io == $stdin then str << "$stdin"',
89
- 'elsif @io == $stderr then str << "$stderr"',
90
- 'else str << @io.class.to_s',
91
- 'end'])
92
- expect(cop.offences).to be_empty
93
- end
94
-
95
- it 'accepts if/then/else/end laid out as another table' do
96
- inspect_source(cop,
97
- ["if File.exist?('config.save')",
98
- 'then ConfigTable.load',
99
- 'else ConfigTable.new',
100
- 'end'])
101
- expect(cop.offences).to be_empty
102
- end
103
-
104
- it 'accepts an empty if' do
105
- inspect_source(cop,
106
- ['if a',
107
- 'else',
108
- 'end'])
109
- expect(cop.offences).to be_empty
110
- end
111
-
112
- it 'accepts an if/else branches with rescue clauses' do
113
- # Because of how the rescue clauses come out of Parser, these are
114
- # special and need to be tested.
115
- inspect_source(cop,
116
- ['if a',
117
- ' a rescue nil',
118
- 'else',
119
- ' a rescue nil',
120
- 'end'])
121
- expect(cop.offences).to be_empty
122
- end
123
- end
124
-
125
- context 'with unless' do
126
- it 'registers an offence for bad indentation of an unless body' do
127
- inspect_source(cop,
128
- ['unless cond',
129
- ' func',
130
- 'end'])
131
- expect(cop.messages)
132
- .to eq(['Use 2 (not 1) spaces for indentation.'])
133
- end
134
-
135
- it 'accepts an empty unless' do
136
- inspect_source(cop,
137
- ['unless a',
138
- 'else',
139
- 'end'])
140
- expect(cop.offences).to be_empty
141
- end
142
- end
143
-
144
- context 'with case' do
145
- it 'registers an offence for bad indentation in a case/when body' do
146
- inspect_source(cop,
147
- ['case a',
148
- 'when b',
149
- ' c',
150
- 'end'])
151
- expect(cop.messages)
152
- .to eq(['Use 2 (not 1) spaces for indentation.'])
153
- end
154
-
155
- it 'registers an offence for bad indentation in a case/else body' do
156
- inspect_source(cop,
157
- ['case a',
158
- 'when b',
159
- ' c',
160
- 'when d',
161
- ' e',
162
- 'else',
163
- ' f',
164
- 'end'])
165
- expect(cop.messages)
166
- .to eq(['Use 2 (not 3) spaces for indentation.'])
167
- end
168
-
169
- it 'accepts correctly indented case/when/else' do
170
- inspect_source(cop,
171
- ['case a',
172
- 'when b',
173
- ' c',
174
- 'when d',
175
- 'else',
176
- ' f',
177
- 'end'])
178
- expect(cop.offences).to be_empty
179
- end
180
-
181
- it 'accepts case/when/else laid out as a table' do
182
- inspect_source(cop,
183
- ['case sexp.loc.keyword.source',
184
- "when 'if' then cond, body, _else = *sexp",
185
- "when 'unless' then cond, _else, body = *sexp",
186
- 'else cond, body = *sexp',
187
- 'end'])
188
- expect(cop.offences).to be_empty
189
- end
190
-
191
- it 'accepts case/when/else with then beginning a line' do
192
- inspect_source(cop,
193
- ['case sexp.loc.keyword.source',
194
- "when 'if'",
195
- 'then cond, body, _else = *sexp',
196
- 'end'])
197
- expect(cop.offences).to be_empty
198
- end
199
-
200
- it 'accepts indented when/else plus indented body' do
201
- # "Indent when as deep as case" is the job of another cop.
202
- inspect_source(cop,
203
- ['case code_type',
204
- " when 'ruby', 'sql', 'plain'",
205
- ' code_type',
206
- " when 'erb'",
207
- " 'ruby; html-script: true'",
208
- ' when "html"',
209
- " 'xml'",
210
- ' else',
211
- " 'plain'",
212
- 'end'])
213
- expect(cop.offences).to be_empty
214
- end
215
-
216
- it 'accepts an empty case' do
217
- inspect_source(cop,
218
- ['case a',
219
- 'end'])
220
- expect(cop.offences).to be_empty
221
- end
222
- end
223
-
224
- context 'with while/until' do
225
- it 'registers an offence for bad indentation of a while body' do
226
- inspect_source(cop,
227
- ['while cond',
228
- ' func',
229
- 'end'])
230
- expect(cop.messages)
231
- .to eq(['Use 2 (not 1) spaces for indentation.'])
232
- end
233
-
234
- it 'registers an offence for bad indentation of begin/end/while' do
235
- inspect_source(cop,
236
- ['begin',
237
- ' func1',
238
- ' func2',
239
- 'end while cond'])
240
- expect(cop.messages)
241
- .to eq(['Use 2 (not 1) spaces for indentation.',
242
- 'Use 2 (not 3) spaces for indentation.'])
243
- end
244
-
245
- it 'registers an offence for bad indentation of an until body' do
246
- inspect_source(cop,
247
- ['until cond',
248
- ' func',
249
- 'end'])
250
- expect(cop.messages)
251
- .to eq(['Use 2 (not 1) spaces for indentation.'])
252
- end
253
-
254
- it 'accepts an empty while' do
255
- inspect_source(cop,
256
- ['while a',
257
- 'end'])
258
- expect(cop.offences).to be_empty
259
- end
260
- end
261
-
262
- context 'with for' do
263
- it 'registers an offence for bad indentation of a for body' do
264
- inspect_source(cop,
265
- ['for var in 1..10',
266
- ' func',
267
- 'end'])
268
- expect(cop.messages)
269
- .to eq(['Use 2 (not 1) spaces for indentation.'])
270
- end
271
-
272
- it 'accepts an empty for' do
273
- inspect_source(cop,
274
- ['for var in 1..10',
275
- 'end'])
276
- expect(cop.offences).to be_empty
277
- end
278
- end
279
-
280
- context 'with def/defs' do
281
- it 'registers an offence for bad indentation of a def body' do
282
- inspect_source(cop,
283
- ['def test',
284
- ' func1',
285
- ' func2', # No offence registered for this.
286
- 'end'])
287
- expect(cop.messages)
288
- .to eq(['Use 2 (not 4) spaces for indentation.'])
289
- end
290
-
291
- it 'registers an offence for bad indentation of a defs body' do
292
- inspect_source(cop,
293
- ['def self.test',
294
- ' func',
295
- 'end'])
296
- expect(cop.messages)
297
- .to eq(['Use 2 (not 3) spaces for indentation.'])
298
- end
299
-
300
- it 'accepts an empty def body' do
301
- inspect_source(cop,
302
- ['def test',
303
- 'end'])
304
- expect(cop.offences).to be_empty
305
- end
306
-
307
- it 'accepts an empty defs body' do
308
- inspect_source(cop,
309
- ['def self.test',
310
- 'end'])
311
- expect(cop.offences).to be_empty
312
- end
313
- end
314
-
315
- context 'with class' do
316
- it 'registers an offence for bad indentation of a class body' do
317
- inspect_source(cop,
318
- ['class Test',
319
- ' def func',
320
- ' end',
321
- 'end'])
322
- expect(cop.messages)
323
- .to eq(['Use 2 (not 4) spaces for indentation.'])
324
- end
325
-
326
- it 'accepts an empty class body' do
327
- inspect_source(cop,
328
- ['class Test',
329
- 'end'])
330
- expect(cop.offences).to be_empty
331
- end
332
- end
333
-
334
- context 'with module' do
335
- it 'registers an offence for bad indentation of a module body' do
336
- inspect_source(cop,
337
- ['module Test',
338
- ' def func',
339
- ' end',
340
- 'end'])
341
- expect(cop.messages)
342
- .to eq(['Use 2 (not 4) spaces for indentation.'])
343
- end
344
-
345
- it 'accepts an empty module body' do
346
- inspect_source(cop,
347
- ['module Test',
348
- 'end'])
349
- expect(cop.offences).to be_empty
350
- end
351
- end
352
-
353
- context 'with block' do
354
- it 'registers an offence for bad indentation of a do/end body' do
355
- inspect_source(cop,
356
- ['a = func do',
357
- ' b',
358
- 'end'])
359
- expect(cop.messages)
360
- .to eq(['Use 2 (not 1) spaces for indentation.'])
361
- end
362
-
363
- it 'registers an offence for bad indentation of a {} body' do
364
- inspect_source(cop,
365
- ['func {',
366
- ' b',
367
- '}'])
368
- expect(cop.messages)
369
- .to eq(['Use 2 (not 3) spaces for indentation.'])
370
- end
371
-
372
- it 'accepts a correctly indented block body' do
373
- inspect_source(cop,
374
- ['a = func do',
375
- ' b',
376
- 'end'])
377
- expect(cop.offences).to be_empty
378
- end
379
-
380
- it 'accepts an empty block body' do
381
- inspect_source(cop,
382
- ['a = func do',
383
- 'end'])
384
- expect(cop.offences).to be_empty
385
- end
386
- end
387
- end
5
+ describe Rubocop::Cop::Style::IndentationWidth do
6
+ subject(:cop) { described_class.new }
7
+
8
+ context 'with if statement' do
9
+ it 'registers an offence for bad indentation of an if body' do
10
+ inspect_source(cop,
11
+ ['if cond',
12
+ ' func',
13
+ 'end'])
14
+ expect(cop.messages)
15
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
16
+ end
17
+
18
+ it 'registers an offence for bad indentation of an else body' do
19
+ inspect_source(cop,
20
+ ['if cond',
21
+ ' func1',
22
+ 'else',
23
+ ' func2',
24
+ 'end'])
25
+ expect(cop.messages)
26
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
27
+ end
28
+
29
+ it 'registers an offence for bad indentation of an elsif body' do
30
+ inspect_source(cop,
31
+ ['if a1',
32
+ ' b1',
33
+ 'elsif a2',
34
+ ' b2',
35
+ 'else',
36
+ ' c',
37
+ 'end'])
38
+ expect(cop.messages)
39
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
40
+ end
41
+
42
+ it 'registers offence for bad indentation of ternary inside else' do
43
+ inspect_source(cop,
44
+ ['if a',
45
+ ' b',
46
+ 'else',
47
+ ' x ? y : z',
48
+ 'end'])
49
+ expect(cop.messages)
50
+ .to eq(['Use 2 (not 5) spaces for indentation.'])
51
+ end
52
+
53
+ it 'registers offence for bad indentation of modifier if in else' do
54
+ inspect_source(cop,
55
+ ['if a',
56
+ ' b',
57
+ 'else',
58
+ ' x if y',
59
+ 'end'])
60
+ expect(cop.messages)
61
+ .to eq(['Use 2 (not 3) spaces for indentation.'])
62
+ end
63
+
64
+ it 'accepts a one line if statement' do
65
+ inspect_source(cop,
66
+ ['if cond then func1 else func2 end'])
67
+ expect(cop.offences).to be_empty
68
+ end
69
+
70
+ it 'accepts a correctly aligned if/elsif/else/end' do
71
+ inspect_source(cop,
72
+ ['if a1',
73
+ ' b1',
74
+ 'elsif a2',
75
+ ' b2',
76
+ 'else',
77
+ ' c',
78
+ 'end'])
79
+ expect(cop.offences).to be_empty
80
+ end
81
+
82
+ it 'accepts if/elsif/else/end laid out as a table' do
83
+ inspect_source(cop,
84
+ ['if @io == $stdout then str << "$stdout"',
85
+ 'elsif @io == $stdin then str << "$stdin"',
86
+ 'elsif @io == $stderr then str << "$stderr"',
87
+ 'else str << @io.class.to_s',
88
+ 'end'])
89
+ expect(cop.offences).to be_empty
90
+ end
91
+
92
+ it 'accepts if/then/else/end laid out as another table' do
93
+ inspect_source(cop,
94
+ ["if File.exist?('config.save')",
95
+ 'then ConfigTable.load',
96
+ 'else ConfigTable.new',
97
+ 'end'])
98
+ expect(cop.offences).to be_empty
99
+ end
100
+
101
+ it 'accepts an empty if' do
102
+ inspect_source(cop,
103
+ ['if a',
104
+ 'else',
105
+ 'end'])
106
+ expect(cop.offences).to be_empty
107
+ end
108
+
109
+ it 'accepts an if/else branches with rescue clauses' do
110
+ # Because of how the rescue clauses come out of Parser, these are
111
+ # special and need to be tested.
112
+ inspect_source(cop,
113
+ ['if a',
114
+ ' a rescue nil',
115
+ 'else',
116
+ ' a rescue nil',
117
+ 'end'])
118
+ expect(cop.offences).to be_empty
119
+ end
120
+ end
121
+
122
+ context 'with unless' do
123
+ it 'registers an offence for bad indentation of an unless body' do
124
+ inspect_source(cop,
125
+ ['unless cond',
126
+ ' func',
127
+ 'end'])
128
+ expect(cop.messages)
129
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
130
+ end
131
+
132
+ it 'accepts an empty unless' do
133
+ inspect_source(cop,
134
+ ['unless a',
135
+ 'else',
136
+ 'end'])
137
+ expect(cop.offences).to be_empty
138
+ end
139
+ end
140
+
141
+ context 'with case' do
142
+ it 'registers an offence for bad indentation in a case/when body' do
143
+ inspect_source(cop,
144
+ ['case a',
145
+ 'when b',
146
+ ' c',
147
+ 'end'])
148
+ expect(cop.messages)
149
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
150
+ end
151
+
152
+ it 'registers an offence for bad indentation in a case/else body' do
153
+ inspect_source(cop,
154
+ ['case a',
155
+ 'when b',
156
+ ' c',
157
+ 'when d',
158
+ ' e',
159
+ 'else',
160
+ ' f',
161
+ 'end'])
162
+ expect(cop.messages)
163
+ .to eq(['Use 2 (not 3) spaces for indentation.'])
164
+ end
165
+
166
+ it 'accepts correctly indented case/when/else' do
167
+ inspect_source(cop,
168
+ ['case a',
169
+ 'when b',
170
+ ' c',
171
+ 'when d',
172
+ 'else',
173
+ ' f',
174
+ 'end'])
175
+ expect(cop.offences).to be_empty
176
+ end
177
+
178
+ it 'accepts case/when/else laid out as a table' do
179
+ inspect_source(cop,
180
+ ['case sexp.loc.keyword.source',
181
+ "when 'if' then cond, body, _else = *sexp",
182
+ "when 'unless' then cond, _else, body = *sexp",
183
+ 'else cond, body = *sexp',
184
+ 'end'])
185
+ expect(cop.offences).to be_empty
186
+ end
187
+
188
+ it 'accepts case/when/else with then beginning a line' do
189
+ inspect_source(cop,
190
+ ['case sexp.loc.keyword.source',
191
+ "when 'if'",
192
+ 'then cond, body, _else = *sexp',
193
+ 'end'])
194
+ expect(cop.offences).to be_empty
195
+ end
196
+
197
+ it 'accepts indented when/else plus indented body' do
198
+ # "Indent when as deep as case" is the job of another cop.
199
+ inspect_source(cop,
200
+ ['case code_type',
201
+ " when 'ruby', 'sql', 'plain'",
202
+ ' code_type',
203
+ " when 'erb'",
204
+ " 'ruby; html-script: true'",
205
+ ' when "html"',
206
+ " 'xml'",
207
+ ' else',
208
+ " 'plain'",
209
+ 'end'])
210
+ expect(cop.offences).to be_empty
211
+ end
212
+
213
+ it 'accepts an empty case' do
214
+ inspect_source(cop,
215
+ ['case a',
216
+ 'end'])
217
+ expect(cop.offences).to be_empty
218
+ end
219
+ end
220
+
221
+ context 'with while/until' do
222
+ it 'registers an offence for bad indentation of a while body' do
223
+ inspect_source(cop,
224
+ ['while cond',
225
+ ' func',
226
+ 'end'])
227
+ expect(cop.messages)
228
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
229
+ end
230
+
231
+ it 'registers an offence for bad indentation of begin/end/while' do
232
+ inspect_source(cop,
233
+ ['begin',
234
+ ' func1',
235
+ ' func2',
236
+ 'end while cond'])
237
+ expect(cop.messages)
238
+ .to eq(['Use 2 (not 1) spaces for indentation.',
239
+ 'Use 2 (not 3) spaces for indentation.'])
240
+ end
241
+
242
+ it 'registers an offence for bad indentation of an until body' do
243
+ inspect_source(cop,
244
+ ['until cond',
245
+ ' func',
246
+ 'end'])
247
+ expect(cop.messages)
248
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
249
+ end
250
+
251
+ it 'accepts an empty while' do
252
+ inspect_source(cop,
253
+ ['while a',
254
+ 'end'])
255
+ expect(cop.offences).to be_empty
256
+ end
257
+ end
258
+
259
+ context 'with for' do
260
+ it 'registers an offence for bad indentation of a for body' do
261
+ inspect_source(cop,
262
+ ['for var in 1..10',
263
+ ' func',
264
+ 'end'])
265
+ expect(cop.messages)
266
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
267
+ end
268
+
269
+ it 'accepts an empty for' do
270
+ inspect_source(cop,
271
+ ['for var in 1..10',
272
+ 'end'])
273
+ expect(cop.offences).to be_empty
274
+ end
275
+ end
276
+
277
+ context 'with def/defs' do
278
+ it 'registers an offence for bad indentation of a def body' do
279
+ inspect_source(cop,
280
+ ['def test',
281
+ ' func1',
282
+ ' func2', # No offence registered for this.
283
+ 'end'])
284
+ expect(cop.messages)
285
+ .to eq(['Use 2 (not 4) spaces for indentation.'])
286
+ end
287
+
288
+ it 'registers an offence for bad indentation of a defs body' do
289
+ inspect_source(cop,
290
+ ['def self.test',
291
+ ' func',
292
+ 'end'])
293
+ expect(cop.messages)
294
+ .to eq(['Use 2 (not 3) spaces for indentation.'])
295
+ end
296
+
297
+ it 'accepts an empty def body' do
298
+ inspect_source(cop,
299
+ ['def test',
300
+ 'end'])
301
+ expect(cop.offences).to be_empty
302
+ end
303
+
304
+ it 'accepts an empty defs body' do
305
+ inspect_source(cop,
306
+ ['def self.test',
307
+ 'end'])
308
+ expect(cop.offences).to be_empty
309
+ end
310
+ end
311
+
312
+ context 'with class' do
313
+ it 'registers an offence for bad indentation of a class body' do
314
+ inspect_source(cop,
315
+ ['class Test',
316
+ ' def func',
317
+ ' end',
318
+ 'end'])
319
+ expect(cop.messages)
320
+ .to eq(['Use 2 (not 4) spaces for indentation.'])
321
+ end
322
+
323
+ it 'accepts an empty class body' do
324
+ inspect_source(cop,
325
+ ['class Test',
326
+ 'end'])
327
+ expect(cop.offences).to be_empty
328
+ end
329
+ end
330
+
331
+ context 'with module' do
332
+ it 'registers an offence for bad indentation of a module body' do
333
+ inspect_source(cop,
334
+ ['module Test',
335
+ ' def func',
336
+ ' end',
337
+ 'end'])
338
+ expect(cop.messages)
339
+ .to eq(['Use 2 (not 4) spaces for indentation.'])
340
+ end
341
+
342
+ it 'accepts an empty module body' do
343
+ inspect_source(cop,
344
+ ['module Test',
345
+ 'end'])
346
+ expect(cop.offences).to be_empty
347
+ end
348
+ end
349
+
350
+ context 'with block' do
351
+ it 'registers an offence for bad indentation of a do/end body' do
352
+ inspect_source(cop,
353
+ ['a = func do',
354
+ ' b',
355
+ 'end'])
356
+ expect(cop.messages)
357
+ .to eq(['Use 2 (not 1) spaces for indentation.'])
358
+ end
359
+
360
+ it 'registers an offence for bad indentation of a {} body' do
361
+ inspect_source(cop,
362
+ ['func {',
363
+ ' b',
364
+ '}'])
365
+ expect(cop.messages)
366
+ .to eq(['Use 2 (not 3) spaces for indentation.'])
367
+ end
368
+
369
+ it 'accepts a correctly indented block body' do
370
+ inspect_source(cop,
371
+ ['a = func do',
372
+ ' b',
373
+ 'end'])
374
+ expect(cop.offences).to be_empty
375
+ end
376
+
377
+ it 'accepts an empty block body' do
378
+ inspect_source(cop,
379
+ ['a = func do',
380
+ 'end'])
381
+ expect(cop.offences).to be_empty
388
382
  end
389
383
  end
390
384
  end