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,61 +2,62 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe AlignArray do
9
- subject(:cop) { described_class.new }
10
-
11
- it 'registers an offence for misaligned array elements' do
12
- inspect_source(cop, ['array = [',
13
- ' a,',
14
- ' b,',
15
- ' c,',
16
- ' d',
17
- ']'])
18
- expect(cop.messages).to eq(['Align the elements of an array ' +
19
- 'literal if they span more than ' +
20
- 'one line.'] * 2)
21
- expect(cop.highlights).to eq(%w(b d))
22
- end
23
-
24
- it 'accepts aligned array keys' do
25
- inspect_source(cop, ['array = [',
26
- ' a,',
27
- ' b,',
28
- ' c,',
29
- ' d',
30
- ']'])
31
- expect(cop.offences).to be_empty
32
- end
33
-
34
- it 'accepts single line array' do
35
- inspect_source(cop, 'array = [ a, b ]')
36
- expect(cop.offences).to be_empty
37
- end
38
-
39
- it 'accepts several elements per line' do
40
- inspect_source(cop, ['array = [ a, b,',
41
- ' c, d ]'])
42
- expect(cop.offences).to be_empty
43
- end
44
-
45
- it 'auto-corrects alignment' do
46
- new_source = autocorrect_source(cop, ['array = [',
47
- ' a,',
48
- ' b,',
49
- ' c,',
50
- ' d',
51
- ']'])
52
- expect(new_source).to eq(['array = [',
53
- ' a,',
54
- ' b,',
55
- ' c,',
56
- ' d',
57
- ']'].join("\n"))
58
- end
59
- end
60
- end
5
+ describe Rubocop::Cop::Style::AlignArray do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for misaligned array elements' do
9
+ inspect_source(cop, ['array = [',
10
+ ' a,',
11
+ ' b,',
12
+ ' c,',
13
+ ' d',
14
+ ']'])
15
+ expect(cop.messages).to eq(['Align the elements of an array ' +
16
+ 'literal if they span more than ' +
17
+ 'one line.'] * 2)
18
+ expect(cop.highlights).to eq(%w(b d))
19
+ end
20
+
21
+ it 'accepts aligned array keys' do
22
+ inspect_source(cop, ['array = [',
23
+ ' a,',
24
+ ' b,',
25
+ ' c,',
26
+ ' d',
27
+ ']'])
28
+ expect(cop.offences).to be_empty
29
+ end
30
+
31
+ it 'accepts single line array' do
32
+ inspect_source(cop, 'array = [ a, b ]')
33
+ expect(cop.offences).to be_empty
34
+ end
35
+
36
+ it 'accepts several elements per line' do
37
+ inspect_source(cop, ['array = [ a, b,',
38
+ ' c, d ]'])
39
+ expect(cop.offences).to be_empty
40
+ end
41
+
42
+ it 'auto-corrects alignment' do
43
+ new_source = autocorrect_source(cop, ['array = [',
44
+ ' a,',
45
+ ' b,',
46
+ ' c,',
47
+ ' d',
48
+ ']'])
49
+ expect(new_source).to eq(['array = [',
50
+ ' a,',
51
+ ' b,',
52
+ ' c,',
53
+ ' d',
54
+ ']'].join("\n"))
55
+ end
56
+
57
+ it 'auto-corrects only elements that begin a line' do
58
+ original_source = ['array = [:bar, {',
59
+ ' whiz: 2, bang: 3 }, option: 3]']
60
+ new_source = autocorrect_source(cop, original_source)
61
+ expect(new_source).to eq(original_source.join("\n"))
61
62
  end
62
63
  end
@@ -2,266 +2,285 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe AlignHash, :config do
9
- subject(:cop) { described_class.new(config) }
10
- let(:cop_config) do
11
- {
12
- 'EnforcedHashRocketStyle' => 'key',
13
- 'EnforcedColonStyle' => 'key'
14
- }
15
- end
5
+ describe Rubocop::Cop::Style::AlignHash, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) do
8
+ {
9
+ 'EnforcedHashRocketStyle' => 'key',
10
+ 'EnforcedColonStyle' => 'key'
11
+ }
12
+ end
16
13
 
17
- context 'with default configuration' do
18
- it 'registers an offence for misaligned hash keys' do
19
- inspect_source(cop, ['hash1 = {',
20
- ' a: 0,',
21
- ' bb: 1',
22
- '}',
23
- 'hash2 = {',
24
- " 'ccc' => 2,",
25
- " 'dddd' => 2",
26
- '}'])
27
- expect(cop.messages).to eq(['Align the elements of a hash ' +
28
- 'literal if they span more than ' +
29
- 'one line.'] * 2)
30
- expect(cop.highlights).to eq(['bb: 1',
31
- "'dddd' => 2"])
32
- end
14
+ context 'with default configuration' do
15
+ it 'registers an offence for misaligned hash keys' do
16
+ inspect_source(cop, ['hash1 = {',
17
+ ' a: 0,',
18
+ ' bb: 1',
19
+ '}',
20
+ 'hash2 = {',
21
+ " 'ccc' => 2,",
22
+ " 'dddd' => 2",
23
+ '}'])
24
+ expect(cop.messages).to eq(['Align the elements of a hash ' +
25
+ 'literal if they span more than ' +
26
+ 'one line.'] * 2)
27
+ expect(cop.highlights).to eq(['bb: 1',
28
+ "'dddd' => 2"])
29
+ end
33
30
 
34
- it 'accepts aligned hash keys' do
35
- inspect_source(cop, ['hash1 = {',
36
- ' a: 0,',
37
- ' bb: 1,',
38
- '}',
39
- 'hash2 = {',
40
- " 'ccc' => 2,",
41
- " 'dddd' => 2",
42
- '}'])
43
- expect(cop.offences).to be_empty
44
- end
31
+ it 'accepts aligned hash keys' do
32
+ inspect_source(cop, ['hash1 = {',
33
+ ' a: 0,',
34
+ ' bb: 1,',
35
+ '}',
36
+ 'hash2 = {',
37
+ " 'ccc' => 2,",
38
+ " 'dddd' => 2",
39
+ '}'])
40
+ expect(cop.offences).to be_empty
41
+ end
45
42
 
46
- it 'registers an offence for separator alignment' do
47
- inspect_source(cop, ['hash = {',
48
- " 'a' => 0,",
49
- " 'bbb' => 1",
50
- '}'])
51
- expect(cop.offences).to have(1).item
52
- expect(cop.highlights).to eq(["'bbb' => 1"])
53
- end
43
+ it 'registers an offence for separator alignment' do
44
+ inspect_source(cop, ['hash = {',
45
+ " 'a' => 0,",
46
+ " 'bbb' => 1",
47
+ '}'])
48
+ expect(cop.offences).to have(1).item
49
+ expect(cop.highlights).to eq(["'bbb' => 1"])
50
+ end
54
51
 
55
- context 'with braceless hash as last argument' do
56
- it 'registers an offence for misaligned hash keys' do
57
- inspect_source(cop, ['func(a: 0,',
58
- ' b: 1)'])
59
- expect(cop.offences).to have(1).item
60
- end
52
+ context 'with braceless hash as last argument' do
53
+ it 'registers an offence for misaligned hash keys' do
54
+ inspect_source(cop, ['func(a: 0,',
55
+ ' b: 1)'])
56
+ expect(cop.offences).to have(1).item
57
+ end
61
58
 
62
- it 'registers an offence for right alignment of keys' do
63
- inspect_source(cop, ['func(a: 0,',
64
- ' bbb: 1)'])
65
- expect(cop.offences).to have(1).item
66
- end
59
+ it 'registers an offence for right alignment of keys' do
60
+ inspect_source(cop, ['func(a: 0,',
61
+ ' bbb: 1)'])
62
+ expect(cop.offences).to have(1).item
63
+ end
67
64
 
68
- it 'accepts aligned hash keys' do
69
- inspect_source(cop, ['func(a: 0,',
70
- ' b: 1)'])
71
- expect(cop.offences).to be_empty
72
- end
73
- end
65
+ it 'accepts aligned hash keys' do
66
+ inspect_source(cop, ['func(a: 0,',
67
+ ' b: 1)'])
68
+ expect(cop.offences).to be_empty
69
+ end
70
+ end
74
71
 
75
- it 'auto-corrects alignment' do
76
- new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
77
- ' bb: 1,',
78
- ' ccc: 2 }',
79
- 'hash2 = { :a => 0,',
80
- ' :bb => 1,',
81
- ' :ccc =>2 }',
82
- ])
83
- expect(new_source).to eq(['hash1 = { a: 0,',
84
- ' bb: 1,',
85
- ' ccc: 2 }',
86
- 'hash2 = { :a => 0,',
87
- ' :bb => 1,',
88
- # Separator and value are not corrected
89
- # in 'key' mode.
90
- ' :ccc =>2 }'].join("\n"))
91
- end
92
- end
72
+ it 'auto-corrects alignment' do
73
+ new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
74
+ ' bb: 1,',
75
+ ' ccc: 2 }',
76
+ 'hash2 = { :a => 0,',
77
+ ' :bb => 1,',
78
+ ' :ccc =>2 }',
79
+ ])
80
+ expect(new_source).to eq(['hash1 = { a: 0,',
81
+ ' bb: 1,',
82
+ ' ccc: 2 }',
83
+ 'hash2 = { :a => 0,',
84
+ ' :bb => 1,',
85
+ # Separator and value are not corrected
86
+ # in 'key' mode.
87
+ ' :ccc =>2 }'].join("\n"))
88
+ end
89
+ end
93
90
 
94
- it 'accepts single line hash' do
95
- inspect_source(cop, 'hash = { a: 0, b: 1 }')
96
- expect(cop.offences).to be_empty
97
- end
91
+ it 'accepts single line hash' do
92
+ inspect_source(cop, 'hash = { a: 0, b: 1 }')
93
+ expect(cop.offences).to be_empty
94
+ end
98
95
 
99
- it 'accepts several pairs per line' do
100
- inspect_source(cop, ['hash = { a: 0, b: 1,',
101
- ' c: 2, d: 3 }'])
102
- expect(cop.offences).to be_empty
103
- end
96
+ it 'accepts several pairs per line' do
97
+ inspect_source(cop, ['hash = { a: 0, b: 1,',
98
+ ' c: 2, d: 3 }'])
99
+ expect(cop.offences).to be_empty
100
+ end
104
101
 
105
- context 'with table alignment configuration' do
106
- let(:cop_config) do
107
- {
108
- 'EnforcedHashRocketStyle' => 'table',
109
- 'EnforcedColonStyle' => 'table'
110
- }
111
- end
102
+ context 'with table alignment configuration' do
103
+ let(:cop_config) do
104
+ {
105
+ 'EnforcedHashRocketStyle' => 'table',
106
+ 'EnforcedColonStyle' => 'table'
107
+ }
108
+ end
112
109
 
113
- it 'accepts aligned hash keys' do
114
- inspect_source(cop, ['hash1 = {',
115
- " 'a' => 0,",
116
- " 'bbb' => 1",
117
- '}',
118
- 'hash2 = {',
119
- ' a: 0,',
120
- ' bbb: 1',
121
- '}',
122
- ])
123
- expect(cop.offences).to be_empty
124
- end
110
+ it 'accepts single line hash' do
111
+ inspect_source(cop, 'func(a: 0, bb: 1)')
112
+ expect(cop.offences).to be_empty
113
+ end
125
114
 
126
- it 'registers an offence for misaligned hash values' do
127
- inspect_source(cop, ['hash1 = {',
128
- " 'a' => 0,",
129
- " 'bbb' => 1",
130
- '}',
131
- 'hash2 = {',
132
- ' a: 0,',
133
- ' bbb:1',
134
- '}',
135
- ])
136
- expect(cop.highlights).to eq(["'a' => 0",
137
- 'bbb:1'])
138
- end
115
+ it 'accepts several pairs per line' do
116
+ inspect_source(cop, ['func(a: 1, bb: 2',
117
+ ' ccc: 3, dddd: 4)'])
118
+ expect(cop.offences).to be_empty
119
+ end
139
120
 
140
- it 'registers an offence for misaligned hash rockets' do
141
- inspect_source(cop, ['hash = {',
142
- " 'a' => 0,",
143
- " 'bbb' => 1",
144
- '}'])
145
- expect(cop.offences).to have(1).item
146
- end
121
+ it 'accepts aligned hash keys' do
122
+ inspect_source(cop, ['hash1 = {',
123
+ " 'a' => 0,",
124
+ " 'bbb' => 1",
125
+ '}',
126
+ 'hash2 = {',
127
+ ' a: 0,',
128
+ ' bbb: 1',
129
+ '}',
130
+ ])
131
+ expect(cop.offences).to be_empty
132
+ end
147
133
 
148
- it 'auto-corrects alignment' do
149
- new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
150
- ' bb: 1,',
151
- ' ccc: 2 }',
152
- "hash2 = { 'a' => 0,",
153
- " 'bb' => 1,",
154
- " 'ccc' =>2 }"])
155
- expect(new_source).to eq(['hash1 = { a: 0,',
156
- ' bb: 1,',
157
- ' ccc: 2 }',
158
- "hash2 = { 'a' => 0,",
159
- " 'bb' => 1,",
160
- " 'ccc' => 2 }"].join("\n"))
161
- end
162
- end
134
+ it 'registers an offence for misaligned hash values' do
135
+ inspect_source(cop, ['hash1 = {',
136
+ " 'a' => 0,",
137
+ " 'bbb' => 1",
138
+ '}',
139
+ 'hash2 = {',
140
+ ' a: 0,',
141
+ ' bbb:1',
142
+ '}',
143
+ ])
144
+ expect(cop.highlights).to eq(["'a' => 0",
145
+ 'bbb:1'])
146
+ end
163
147
 
164
- context 'with invalid configuration' do
165
- let(:cop_config) do
166
- {
167
- 'EnforcedHashRocketStyle' => 'junk',
168
- 'EnforcedColonStyle' => 'junk'
169
- }
170
- end
171
- it 'fails' do
172
- src = ['hash = {',
173
- ' a: 0,',
174
- ' bb: 1',
175
- '}']
176
- expect { inspect_source(cop, src) }.to raise_error(RuntimeError)
177
- end
178
- end
148
+ it 'registers an offence for misaligned hash rockets' do
149
+ inspect_source(cop, ['hash = {',
150
+ " 'a' => 0,",
151
+ " 'bbb' => 1",
152
+ '}'])
153
+ expect(cop.offences).to have(1).item
154
+ end
179
155
 
180
- context 'with separator alignment configuration' do
181
- let(:cop_config) do
182
- {
183
- 'EnforcedHashRocketStyle' => 'separator',
184
- 'EnforcedColonStyle' => 'separator'
185
- }
186
- end
156
+ it 'auto-corrects alignment' do
157
+ new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
158
+ ' bb: 1,',
159
+ ' ccc: 2 }',
160
+ "hash2 = { 'a' => 0,",
161
+ " 'bb' => 1,",
162
+ " 'ccc' =>2 }"])
163
+ expect(new_source).to eq(['hash1 = { a: 0,',
164
+ ' bb: 1,',
165
+ ' ccc: 2 }',
166
+ "hash2 = { 'a' => 0,",
167
+ " 'bb' => 1,",
168
+ " 'ccc' => 2 }"].join("\n"))
169
+ end
170
+ end
187
171
 
188
- it 'accepts aligned hash keys' do
189
- inspect_source(cop, ['hash1 = {',
190
- ' a: 0,',
191
- ' bbb: 1',
192
- '}',
193
- 'hash2 = {',
194
- " 'a' => 0,",
195
- " 'bbb' => 1",
196
- '}'])
197
- expect(cop.offences).to be_empty
198
- end
172
+ context 'with table+separator alignment configuration' do
173
+ let(:cop_config) do
174
+ {
175
+ 'EnforcedHashRocketStyle' => 'table',
176
+ 'EnforcedColonStyle' => 'separator'
177
+ }
178
+ end
199
179
 
200
- it 'registers an offence for misaligned hash values' do
201
- inspect_source(cop, ['hash = {',
202
- " 'a' => 0,",
203
- " 'bbb' => 1",
204
- '}'])
205
- expect(cop.offences).to have(1).item
206
- end
180
+ it 'accepts a single method argument entry with colon' do
181
+ inspect_source(cop, ['merge(parent: nil)'])
182
+ expect(cop.offences).to be_empty
183
+ end
184
+ end
207
185
 
208
- it 'registers an offence for misaligned hash rockets' do
209
- inspect_source(cop, ['hash = {',
210
- " 'a' => 0,",
211
- " 'bbb' => 1",
212
- '}'])
213
- expect(cop.offences).to have(1).item
214
- end
186
+ context 'with invalid configuration' do
187
+ let(:cop_config) do
188
+ {
189
+ 'EnforcedHashRocketStyle' => 'junk',
190
+ 'EnforcedColonStyle' => 'junk'
191
+ }
192
+ end
193
+ it 'fails' do
194
+ src = ['hash = {',
195
+ ' a: 0,',
196
+ ' bb: 1',
197
+ '}']
198
+ expect { inspect_source(cop, src) }.to raise_error(RuntimeError)
199
+ end
200
+ end
215
201
 
216
- it 'auto-corrects alignment' do
217
- new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
218
- ' bb: 1,',
219
- ' ccc: 2 }',
220
- 'hash2 = { a => 0,',
221
- ' bb => 1,',
222
- ' ccc =>2 }'])
223
- expect(new_source).to eq(['hash1 = { a: 0,',
224
- ' bb: 1,',
225
- ' ccc: 2 }',
226
- 'hash2 = { a => 0,',
227
- ' bb => 1,',
228
- ' ccc => 2 }'].join("\n"))
229
- end
230
- end
202
+ context 'with separator alignment configuration' do
203
+ let(:cop_config) do
204
+ {
205
+ 'EnforcedHashRocketStyle' => 'separator',
206
+ 'EnforcedColonStyle' => 'separator'
207
+ }
208
+ end
231
209
 
232
- context 'with different settings for => and :' do
233
- let(:cop_config) do
234
- {
235
- 'EnforcedHashRocketStyle' => 'key',
236
- 'EnforcedColonStyle' => 'separator'
237
- }
238
- end
210
+ it 'accepts aligned hash keys' do
211
+ inspect_source(cop, ['hash1 = {',
212
+ ' a: 0,',
213
+ ' bbb: 1',
214
+ '}',
215
+ 'hash2 = {',
216
+ " 'a' => 0,",
217
+ " 'bbb' => 1",
218
+ '}'])
219
+ expect(cop.offences).to be_empty
220
+ end
239
221
 
240
- it 'registers offences for misaligned entries' do
241
- inspect_source(cop, ['hash1 = {',
242
- ' a: 0,',
243
- ' bbb: 1',
244
- '}',
245
- 'hash2 = {',
246
- " 'a' => 0,",
247
- " 'bbb' => 1",
248
- '}'])
249
- expect(cop.highlights).to eq(['bbb: 1', "'bbb' => 1"])
250
- end
222
+ it 'registers an offence for misaligned hash values' do
223
+ inspect_source(cop, ['hash = {',
224
+ " 'a' => 0,",
225
+ " 'bbb' => 1",
226
+ '}'])
227
+ expect(cop.offences).to have(1).item
228
+ end
251
229
 
252
- it 'accepts aligned entries' do
253
- inspect_source(cop, ['hash1 = {',
254
- ' a: 0,',
255
- ' bbb: 1',
256
- '}',
257
- 'hash2 = {',
258
- " 'a' => 0,",
259
- " 'bbb' => 1",
260
- '}'])
261
- expect(cop.offences).to be_empty
262
- end
263
- end
264
- end
230
+ it 'registers an offence for misaligned hash rockets' do
231
+ inspect_source(cop, ['hash = {',
232
+ " 'a' => 0,",
233
+ " 'bbb' => 1",
234
+ '}'])
235
+ expect(cop.offences).to have(1).item
236
+ end
237
+
238
+ it 'auto-corrects alignment' do
239
+ new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
240
+ ' bb: 1,',
241
+ ' ccc: 2 }',
242
+ 'hash2 = { a => 0,',
243
+ ' bb => 1,',
244
+ ' ccc =>2 }'])
245
+ expect(new_source).to eq(['hash1 = { a: 0,',
246
+ ' bb: 1,',
247
+ ' ccc: 2 }',
248
+ 'hash2 = { a => 0,',
249
+ ' bb => 1,',
250
+ ' ccc => 2 }'].join("\n"))
251
+ end
252
+ end
253
+
254
+ context 'with different settings for => and :' do
255
+ let(:cop_config) do
256
+ {
257
+ 'EnforcedHashRocketStyle' => 'key',
258
+ 'EnforcedColonStyle' => 'separator'
259
+ }
260
+ end
261
+
262
+ it 'registers offences for misaligned entries' do
263
+ inspect_source(cop, ['hash1 = {',
264
+ ' a: 0,',
265
+ ' bbb: 1',
266
+ '}',
267
+ 'hash2 = {',
268
+ " 'a' => 0,",
269
+ " 'bbb' => 1",
270
+ '}'])
271
+ expect(cop.highlights).to eq(['bbb: 1', "'bbb' => 1"])
272
+ end
273
+
274
+ it 'accepts aligned entries' do
275
+ inspect_source(cop, ['hash1 = {',
276
+ ' a: 0,',
277
+ ' bbb: 1',
278
+ '}',
279
+ 'hash2 = {',
280
+ " 'a' => 0,",
281
+ " 'bbb' => 1",
282
+ '}'])
283
+ expect(cop.offences).to be_empty
265
284
  end
266
285
  end
267
286
  end