ridecharge-rubocop 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +14 -0
  5. data/CHANGELOG.md +0 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +35 -0
  9. data/Rakefile +22 -0
  10. data/bin/ridecharge-rubocop +49 -0
  11. data/config/0default.yml +8 -0
  12. data/config/fleet-magic-todo.yml +380 -0
  13. data/config/rc-todo.yml +190 -0
  14. data/config/ridecharge-rubocop_todo.yml +73 -0
  15. data/config/rubocop/default.yml +308 -0
  16. data/config/rubocop/disabled.yml +9 -0
  17. data/config/rubocop/enabled.yml +648 -0
  18. data/config/standard-todo.yml +24 -0
  19. data/config/tabs.yml +15 -0
  20. data/config/vehicle-todo.yml +195 -0
  21. data/lib/ridecharge/rubocop.rb +2 -0
  22. data/lib/ridecharge/rubocop/version.rb +5 -0
  23. data/lib/rubocop/config_loader_monkeypatch.rb +117 -0
  24. data/lib/rubocop/ridecharge.rb +1 -0
  25. data/ridecharge-rubocop.gemspec +25 -0
  26. data/spec/isolated_environment_spec.rb +24 -0
  27. data/spec/project_spec.rb +118 -0
  28. data/spec/rubocop/cli_spec.rb +1385 -0
  29. data/spec/rubocop/config_loader_spec.rb +328 -0
  30. data/spec/rubocop/config_spec.rb +179 -0
  31. data/spec/rubocop/config_store_spec.rb +53 -0
  32. data/spec/rubocop/cop/commissioner_spec.rb +83 -0
  33. data/spec/rubocop/cop/cop_spec.rb +114 -0
  34. data/spec/rubocop/cop/corrector_spec.rb +59 -0
  35. data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +113 -0
  36. data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +35 -0
  37. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +107 -0
  38. data/spec/rubocop/cop/lint/block_alignment_spec.rb +411 -0
  39. data/spec/rubocop/cop/lint/condition_position_spec.rb +49 -0
  40. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  41. data/spec/rubocop/cop/lint/else_layout_spec.rb +65 -0
  42. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +27 -0
  43. data/spec/rubocop/cop/lint/end_alignment_spec.rb +136 -0
  44. data/spec/rubocop/cop/lint/end_in_method_spec.rb +29 -0
  45. data/spec/rubocop/cop/lint/ensure_return_spec.rb +39 -0
  46. data/spec/rubocop/cop/lint/eval_spec.rb +35 -0
  47. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +30 -0
  48. data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +33 -0
  49. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +63 -0
  50. data/spec/rubocop/cop/lint/loop_spec.rb +27 -0
  51. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +57 -0
  52. data/spec/rubocop/cop/lint/require_parentheses_spec.rb +82 -0
  53. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +131 -0
  54. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +237 -0
  55. data/spec/rubocop/cop/lint/syntax_spec.rb +34 -0
  56. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +63 -0
  57. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1570 -0
  58. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +30 -0
  59. data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +48 -0
  60. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +149 -0
  61. data/spec/rubocop/cop/lint/void_spec.rb +57 -0
  62. data/spec/rubocop/cop/offence_spec.rb +133 -0
  63. data/spec/rubocop/cop/rails/default_scope_spec.rb +37 -0
  64. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +13 -0
  65. data/spec/rubocop/cop/rails/output_spec.rb +41 -0
  66. data/spec/rubocop/cop/rails/read_attribute_spec.rb +13 -0
  67. data/spec/rubocop/cop/rails/validation_spec.rb +21 -0
  68. data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +361 -0
  69. data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
  70. data/spec/rubocop/cop/style/alias_spec.rb +59 -0
  71. data/spec/rubocop/cop/style/align_array_spec.rb +75 -0
  72. data/spec/rubocop/cop/style/align_hash_spec.rb +310 -0
  73. data/spec/rubocop/cop/style/align_parameters_spec.rb +222 -0
  74. data/spec/rubocop/cop/style/and_or_spec.rb +57 -0
  75. data/spec/rubocop/cop/style/ascii_comments_spec.rb +22 -0
  76. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +36 -0
  77. data/spec/rubocop/cop/style/attr_spec.rb +19 -0
  78. data/spec/rubocop/cop/style/begin_block_spec.rb +13 -0
  79. data/spec/rubocop/cop/style/block_comments_spec.rb +21 -0
  80. data/spec/rubocop/cop/style/block_nesting_spec.rb +156 -0
  81. data/spec/rubocop/cop/style/blocks_spec.rb +99 -0
  82. data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +284 -0
  83. data/spec/rubocop/cop/style/case_equality_spec.rb +12 -0
  84. data/spec/rubocop/cop/style/case_indentation_spec.rb +289 -0
  85. data/spec/rubocop/cop/style/character_literal_spec.rb +37 -0
  86. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +40 -0
  87. data/spec/rubocop/cop/style/class_length_spec.rb +131 -0
  88. data/spec/rubocop/cop/style/class_methods_spec.rb +45 -0
  89. data/spec/rubocop/cop/style/class_vars_spec.rb +19 -0
  90. data/spec/rubocop/cop/style/collection_methods_spec.rb +48 -0
  91. data/spec/rubocop/cop/style/colon_method_call_spec.rb +60 -0
  92. data/spec/rubocop/cop/style/comment_annotation_spec.rb +86 -0
  93. data/spec/rubocop/cop/style/constant_name_spec.rb +65 -0
  94. data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +204 -0
  95. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +39 -0
  96. data/spec/rubocop/cop/style/documentation_spec.rb +123 -0
  97. data/spec/rubocop/cop/style/dot_position_spec.rb +94 -0
  98. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +127 -0
  99. data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +56 -0
  100. data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +131 -0
  101. data/spec/rubocop/cop/style/empty_lines_spec.rb +40 -0
  102. data/spec/rubocop/cop/style/empty_literal_spec.rb +100 -0
  103. data/spec/rubocop/cop/style/encoding_spec.rb +56 -0
  104. data/spec/rubocop/cop/style/end_block_spec.rb +13 -0
  105. data/spec/rubocop/cop/style/end_of_line_spec.rb +47 -0
  106. data/spec/rubocop/cop/style/even_odd_spec.rb +75 -0
  107. data/spec/rubocop/cop/style/favor_join_spec.rb +31 -0
  108. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +47 -0
  109. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +76 -0
  110. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +41 -0
  111. data/spec/rubocop/cop/style/final_newline_spec.rb +30 -0
  112. data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
  113. data/spec/rubocop/cop/style/for_spec.rb +105 -0
  114. data/spec/rubocop/cop/style/global_vars_spec.rb +34 -0
  115. data/spec/rubocop/cop/style/hash_methods_spec.rb +45 -0
  116. data/spec/rubocop/cop/style/hash_syntax_spec.rb +131 -0
  117. data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +128 -0
  118. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +19 -0
  119. data/spec/rubocop/cop/style/indentation_consistency_spec.rb +490 -0
  120. data/spec/rubocop/cop/style/indentation_width_spec.rb +470 -0
  121. data/spec/rubocop/cop/style/lambda_call_spec.rb +65 -0
  122. data/spec/rubocop/cop/style/lambda_spec.rb +41 -0
  123. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +64 -0
  124. data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +34 -0
  125. data/spec/rubocop/cop/style/line_length_spec.rb +20 -0
  126. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +59 -0
  127. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  128. data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +106 -0
  129. data/spec/rubocop/cop/style/method_length_spec.rb +147 -0
  130. data/spec/rubocop/cop/style/method_name_spec.rb +125 -0
  131. data/spec/rubocop/cop/style/module_function_spec.rb +24 -0
  132. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +78 -0
  133. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +107 -0
  134. data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +18 -0
  135. data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +21 -0
  136. data/spec/rubocop/cop/style/nil_comparison_spec.rb +30 -0
  137. data/spec/rubocop/cop/style/not_spec.rb +22 -0
  138. data/spec/rubocop/cop/style/numeric_literals_spec.rb +64 -0
  139. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +13 -0
  140. data/spec/rubocop/cop/style/op_method_spec.rb +74 -0
  141. data/spec/rubocop/cop/style/parameter_lists_spec.rb +44 -0
  142. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +122 -0
  143. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +17 -0
  144. data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
  145. data/spec/rubocop/cop/style/proc_spec.rb +27 -0
  146. data/spec/rubocop/cop/style/raise_args_spec.rb +82 -0
  147. data/spec/rubocop/cop/style/redundant_begin_spec.rb +57 -0
  148. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  149. data/spec/rubocop/cop/style/redundant_return_spec.rb +171 -0
  150. data/spec/rubocop/cop/style/redundant_self_spec.rb +142 -0
  151. data/spec/rubocop/cop/style/regexp_literal_spec.rb +83 -0
  152. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +116 -0
  153. data/spec/rubocop/cop/style/semicolon_spec.rb +100 -0
  154. data/spec/rubocop/cop/style/signal_exception_spec.rb +266 -0
  155. data/spec/rubocop/cop/style/single_line_block_params_spec.rb +68 -0
  156. data/spec/rubocop/cop/style/single_line_methods_spec.rb +52 -0
  157. data/spec/rubocop/cop/style/space_after_colon_spec.rb +38 -0
  158. data/spec/rubocop/cop/style/space_after_comma_spec.rb +30 -0
  159. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +84 -0
  160. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +70 -0
  161. data/spec/rubocop/cop/style/space_after_not_spec.rb +22 -0
  162. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +23 -0
  163. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +283 -0
  164. data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +33 -0
  165. data/spec/rubocop/cop/style/space_around_operators_spec.rb +325 -0
  166. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +70 -0
  167. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +52 -0
  168. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +138 -0
  169. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +34 -0
  170. data/spec/rubocop/cop/style/special_global_vars_spec.rb +56 -0
  171. data/spec/rubocop/cop/style/string_literals_spec.rb +212 -0
  172. data/spec/rubocop/cop/style/symbol_array_spec.rb +37 -0
  173. data/spec/rubocop/cop/style/tab_spec.rb +17 -0
  174. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +43 -0
  175. data/spec/rubocop/cop/style/trailing_comma_spec.rb +230 -0
  176. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +30 -0
  177. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +415 -0
  178. data/spec/rubocop/cop/style/unless_else_spec.rb +25 -0
  179. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +47 -0
  180. data/spec/rubocop/cop/style/variable_name_spec.rb +107 -0
  181. data/spec/rubocop/cop/style/when_then_spec.rb +41 -0
  182. data/spec/rubocop/cop/style/while_until_do_spec.rb +53 -0
  183. data/spec/rubocop/cop/style/while_until_modifier_spec.rb +75 -0
  184. data/spec/rubocop/cop/style/word_array_spec.rb +97 -0
  185. data/spec/rubocop/cop/team_spec.rb +156 -0
  186. data/spec/rubocop/cop/util_spec.rb +49 -0
  187. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +213 -0
  188. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +734 -0
  189. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +184 -0
  190. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +73 -0
  191. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +269 -0
  192. data/spec/rubocop/cop/variable_inspector_spec.rb +29 -0
  193. data/spec/rubocop/file_inspector_spec.rb +78 -0
  194. data/spec/rubocop/formatter/base_formatter_spec.rb +191 -0
  195. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +114 -0
  196. data/spec/rubocop/formatter/colorizable_spec.rb +107 -0
  197. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +50 -0
  198. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +62 -0
  199. data/spec/rubocop/formatter/file_list_formatter_spec.rb +33 -0
  200. data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
  201. data/spec/rubocop/formatter/json_formatter_spec.rb +148 -0
  202. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +52 -0
  203. data/spec/rubocop/formatter/progress_formatter_spec.rb +182 -0
  204. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +123 -0
  205. data/spec/rubocop/options_spec.rb +145 -0
  206. data/spec/rubocop/path_util_spec.rb +42 -0
  207. data/spec/rubocop/processed_source_spec.rb +114 -0
  208. data/spec/rubocop/source_parser_spec.rb +139 -0
  209. data/spec/rubocop/target_finder_spec.rb +180 -0
  210. data/spec/rubocop/token_spec.rb +25 -0
  211. data/spec/spec_helper.rb +136 -0
  212. data/spec/support/ast_helper.rb +15 -0
  213. data/spec/support/file_helper.rb +21 -0
  214. data/spec/support/isolated_environment.rb +34 -0
  215. data/spec/support/mri_syntax_checker.rb +73 -0
  216. data/spec/support/shared_context.rb +22 -0
  217. data/spec/support/shared_examples.rb +33 -0
  218. data/spec/support/statement_modifier_helper.rb +41 -0
  219. metadata +511 -0
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::AccessorMethodName do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for method get_... with no args' do
9
+ inspect_source(cop, ['def get_attr',
10
+ ' # ...',
11
+ 'end'])
12
+ expect(cop.offences.size).to eq(1)
13
+ expect(cop.highlights).to eq(['get_attr'])
14
+ end
15
+
16
+ it 'registers an offence for singleton method get_... with no args' do
17
+ inspect_source(cop, ['def self.get_attr',
18
+ ' # ...',
19
+ 'end'])
20
+ expect(cop.offences.size).to eq(1)
21
+ expect(cop.highlights).to eq(['get_attr'])
22
+ end
23
+
24
+ it 'accepts method get_something with args' do
25
+ inspect_source(cop, ['def get_something(arg)',
26
+ ' # ...',
27
+ 'end'])
28
+ expect(cop.offences).to be_empty
29
+ end
30
+
31
+ it 'accepts singleton method get_something with args' do
32
+ inspect_source(cop, ['def self.get_something(arg)',
33
+ ' # ...',
34
+ 'end'])
35
+ expect(cop.offences).to be_empty
36
+ end
37
+
38
+ it 'registers an offence for method set_something with one arg' do
39
+ inspect_source(cop, ['def set_attr(arg)',
40
+ ' # ...',
41
+ 'end'])
42
+ expect(cop.offences.size).to eq(1)
43
+ expect(cop.highlights).to eq(['set_attr'])
44
+ end
45
+
46
+ it 'registers an offence for singleton method set_... with one args' do
47
+ inspect_source(cop, ['def self.set_attr(arg)',
48
+ ' # ...',
49
+ 'end'])
50
+ expect(cop.offences.size).to eq(1)
51
+ expect(cop.highlights).to eq(['set_attr'])
52
+ end
53
+
54
+ it 'accepts method set_something with no args' do
55
+ inspect_source(cop, ['def set_something',
56
+ ' # ...',
57
+ 'end'])
58
+ expect(cop.offences).to be_empty
59
+ end
60
+
61
+ it 'accepts singleton method set_something with no args' do
62
+ inspect_source(cop, ['def self.set_something',
63
+ ' # ...',
64
+ 'end'])
65
+ expect(cop.offences).to be_empty
66
+ end
67
+
68
+ it 'accepts method set_something with two args' do
69
+ inspect_source(cop, ['def set_something(arg1, arg2)',
70
+ ' # ...',
71
+ 'end'])
72
+ expect(cop.offences).to be_empty
73
+ end
74
+
75
+ it 'accepts singleton method set_something with two args' do
76
+ inspect_source(cop, ['def self.get_something(arg1, arg2)',
77
+ ' # ...',
78
+ 'end'])
79
+ expect(cop.offences).to be_empty
80
+ end
81
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::Alias do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for alias with symbol args' do
9
+ inspect_source(cop,
10
+ ['alias :ala :bala'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['Use alias_method instead of alias.'])
14
+ end
15
+
16
+ it 'autocorrects alias with symbol args' do
17
+ corrected = autocorrect_source(cop, ['alias :ala :bala'])
18
+ expect(corrected).to eq 'alias_method :ala, :bala'
19
+ end
20
+
21
+ it 'registers an offence for alias with bareword args' do
22
+ inspect_source(cop,
23
+ ['alias ala bala'])
24
+ expect(cop.offences.size).to eq(1)
25
+ expect(cop.messages)
26
+ .to eq(['Use alias_method instead of alias.'])
27
+ end
28
+
29
+ it 'autocorrects alias with bareword args' do
30
+ corrected = autocorrect_source(cop, ['alias ala bala'])
31
+ expect(corrected).to eq 'alias_method :ala, :bala'
32
+ end
33
+
34
+ it 'does not register an offence for alias_method' do
35
+ inspect_source(cop,
36
+ ['alias_method :ala, :bala'])
37
+ expect(cop.offences).to be_empty
38
+ end
39
+
40
+ it 'does not register an offence for :alias' do
41
+ inspect_source(cop,
42
+ ['[:alias, :ala, :bala]'])
43
+ expect(cop.offences).to be_empty
44
+ end
45
+
46
+ it 'does not register an offence for alias with gvars' do
47
+ inspect_source(cop,
48
+ ['alias $ala $bala'])
49
+ expect(cop.offences).to be_empty
50
+ end
51
+
52
+ it 'accepts alias in an instance_exec block' do
53
+ inspect_source(cop,
54
+ ['cli.instance_exec do',
55
+ ' alias :old_trap_interrupt :trap_interrupt',
56
+ 'end'])
57
+ expect(cop.offences).to be_empty
58
+ end
59
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
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 array within array' do
58
+ original_source = ['[:l1,',
59
+ ' [:l2,',
60
+ ' [:l3,',
61
+ ' [:l4]]]]']
62
+ new_source = autocorrect_source(cop, original_source)
63
+ expect(new_source).to eq(['[:l1,',
64
+ ' [:l2,',
65
+ ' [:l3,',
66
+ ' [:l4]]]]'].join("\n"))
67
+ end
68
+
69
+ it 'auto-corrects only elements that begin a line' do
70
+ original_source = ['array = [:bar, {',
71
+ ' whiz: 2, bang: 3 }, option: 3]']
72
+ new_source = autocorrect_source(cop, original_source)
73
+ expect(new_source).to eq(original_source.join("\n"))
74
+ end
75
+ end
@@ -0,0 +1,310 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::AlignHash, :config do
6
+ shared_examples 'not on separate lines' do
7
+ it 'accepts single line hash' do
8
+ inspect_source(cop, 'func(a: 0, bb: 1)')
9
+ expect(cop.offences).to be_empty
10
+ end
11
+
12
+ it 'accepts several pairs per line' do
13
+ inspect_source(cop, ['func(a: 1, bb: 2,',
14
+ ' ccc: 3, dddd: 4)'])
15
+ expect(cop.offences).to be_empty
16
+ end
17
+ end
18
+
19
+ subject(:cop) { described_class.new(config) }
20
+ let(:cop_config) do
21
+ {
22
+ 'EnforcedHashRocketStyle' => 'key',
23
+ 'EnforcedColonStyle' => 'key'
24
+ }
25
+ end
26
+
27
+ context 'with default configuration' do
28
+ it 'registers an offence for misaligned hash keys' do
29
+ inspect_source(cop, ['hash1 = {',
30
+ ' a: 0,',
31
+ ' bb: 1',
32
+ '}',
33
+ 'hash2 = {',
34
+ " 'ccc' => 2,",
35
+ " 'dddd' => 2",
36
+ '}'])
37
+ expect(cop.messages).to eq(['Align the elements of a hash ' \
38
+ 'literal if they span more than ' +
39
+ 'one line.'] * 2)
40
+ expect(cop.highlights).to eq(['bb: 1',
41
+ "'dddd' => 2"])
42
+ end
43
+
44
+ it 'accepts aligned hash keys' do
45
+ inspect_source(cop, ['hash1 = {',
46
+ ' a: 0,',
47
+ ' bb: 1,',
48
+ '}',
49
+ 'hash2 = {',
50
+ " 'ccc' => 2,",
51
+ " 'dddd' => 2",
52
+ '}'])
53
+ expect(cop.offences).to be_empty
54
+ end
55
+
56
+ it 'registers an offence for separator alignment' do
57
+ inspect_source(cop, ['hash = {',
58
+ " 'a' => 0,",
59
+ " 'bbb' => 1",
60
+ '}'])
61
+ expect(cop.offences.size).to eq(1)
62
+ expect(cop.highlights).to eq(["'bbb' => 1"])
63
+ end
64
+
65
+ context 'with braceless hash as last argument' do
66
+ it 'registers an offence for misaligned hash keys' do
67
+ inspect_source(cop, ['func(a: 0,',
68
+ ' b: 1)'])
69
+ expect(cop.offences.size).to eq(1)
70
+ end
71
+
72
+ it 'registers an offence for right alignment of keys' do
73
+ inspect_source(cop, ['func(a: 0,',
74
+ ' bbb: 1)'])
75
+ expect(cop.offences.size).to eq(1)
76
+ end
77
+
78
+ it 'accepts aligned hash keys' do
79
+ inspect_source(cop, ['func(a: 0,',
80
+ ' b: 1)'])
81
+ expect(cop.offences).to be_empty
82
+ end
83
+
84
+ it 'accepts an empty hash' do
85
+ inspect_source(cop, 'h = {}')
86
+ expect(cop.offences).to be_empty
87
+ end
88
+ end
89
+
90
+ it 'auto-corrects alignment' do
91
+ new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
92
+ ' bb: 1,',
93
+ ' ccc: 2 }',
94
+ 'hash2 = { :a => 0,',
95
+ ' :bb => 1,',
96
+ ' :ccc =>2 }'
97
+ ])
98
+ expect(new_source).to eq(['hash1 = { a: 0,',
99
+ ' bb: 1,',
100
+ ' ccc: 2 }',
101
+ 'hash2 = { :a => 0,',
102
+ ' :bb => 1,',
103
+ # Separator and value are not corrected
104
+ # in 'key' mode.
105
+ ' :ccc =>2 }'].join("\n"))
106
+ end
107
+ end
108
+
109
+ include_examples 'not on separate lines'
110
+
111
+ context 'with table alignment configuration' do
112
+ let(:cop_config) do
113
+ {
114
+ 'EnforcedHashRocketStyle' => 'table',
115
+ 'EnforcedColonStyle' => 'table'
116
+ }
117
+ end
118
+
119
+ include_examples 'not on separate lines'
120
+
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
133
+
134
+ it 'accepts an empty hash' do
135
+ inspect_source(cop, 'h = {}')
136
+ expect(cop.offences).to be_empty
137
+ end
138
+
139
+ it 'accepts a multiline array of single line hashes' do
140
+ inspect_source(cop, ['def self.scenarios_order',
141
+ ' [',
142
+ ' { before: %w( l k ) },',
143
+ ' { ending: %w( m l ) },',
144
+ ' { starting: %w( m n ) },',
145
+ ' { after: %w( n o ) }',
146
+ ' ]',
147
+ ' end'])
148
+ expect(cop.offences).to be_empty
149
+ end
150
+
151
+ it 'registers an offence for misaligned hash values' do
152
+ inspect_source(cop, ['hash1 = {',
153
+ " 'a' => 0,",
154
+ " 'bbb' => 1",
155
+ '}',
156
+ 'hash2 = {',
157
+ ' a: 0,',
158
+ ' bbb:1',
159
+ '}'
160
+ ])
161
+ expect(cop.highlights).to eq(["'a' => 0",
162
+ 'bbb:1'])
163
+ end
164
+
165
+ it 'registers an offence for misaligned hash rockets' do
166
+ inspect_source(cop, ['hash = {',
167
+ " 'a' => 0,",
168
+ " 'bbb' => 1",
169
+ '}'])
170
+ expect(cop.offences.size).to eq(1)
171
+ end
172
+
173
+ it 'auto-corrects alignment' do
174
+ new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
175
+ ' bb: 1,',
176
+ ' ccc: 2 }',
177
+ "hash2 = { 'a' => 0,",
178
+ " 'bb' => 1,",
179
+ " 'ccc' =>2 }"])
180
+ expect(new_source).to eq(['hash1 = { a: 0,',
181
+ ' bb: 1,',
182
+ ' ccc: 2 }',
183
+ "hash2 = { 'a' => 0,",
184
+ " 'bb' => 1,",
185
+ " 'ccc' => 2 }"].join("\n"))
186
+ end
187
+ end
188
+
189
+ context 'with table+separator alignment configuration' do
190
+ let(:cop_config) do
191
+ {
192
+ 'EnforcedHashRocketStyle' => 'table',
193
+ 'EnforcedColonStyle' => 'separator'
194
+ }
195
+ end
196
+
197
+ it 'accepts a single method argument entry with colon' do
198
+ inspect_source(cop, ['merge(parent: nil)'])
199
+ expect(cop.offences).to be_empty
200
+ end
201
+ end
202
+
203
+ context 'with invalid configuration' do
204
+ let(:cop_config) do
205
+ {
206
+ 'EnforcedHashRocketStyle' => 'junk',
207
+ 'EnforcedColonStyle' => 'junk'
208
+ }
209
+ end
210
+ it 'fails' do
211
+ src = ['hash = {',
212
+ ' a: 0,',
213
+ ' bb: 1',
214
+ '}']
215
+ expect { inspect_source(cop, src) }.to raise_error(RuntimeError)
216
+ end
217
+ end
218
+
219
+ context 'with separator alignment configuration' do
220
+ let(:cop_config) do
221
+ {
222
+ 'EnforcedHashRocketStyle' => 'separator',
223
+ 'EnforcedColonStyle' => 'separator'
224
+ }
225
+ end
226
+
227
+ it 'accepts aligned hash keys' do
228
+ inspect_source(cop, ['hash1 = {',
229
+ ' a: 0,',
230
+ ' bbb: 1',
231
+ '}',
232
+ 'hash2 = {',
233
+ " 'a' => 0,",
234
+ " 'bbb' => 1",
235
+ '}'])
236
+ expect(cop.offences).to be_empty
237
+ end
238
+
239
+ it 'accepts an empty hash' do
240
+ inspect_source(cop, 'h = {}')
241
+ expect(cop.offences).to be_empty
242
+ end
243
+
244
+ it 'registers an offence for misaligned hash values' do
245
+ inspect_source(cop, ['hash = {',
246
+ " 'a' => 0,",
247
+ " 'bbb' => 1",
248
+ '}'])
249
+ expect(cop.offences.size).to eq(1)
250
+ end
251
+
252
+ it 'registers an offence for misaligned hash rockets' do
253
+ inspect_source(cop, ['hash = {',
254
+ " 'a' => 0,",
255
+ " 'bbb' => 1",
256
+ '}'])
257
+ expect(cop.offences.size).to eq(1)
258
+ end
259
+
260
+ include_examples 'not on separate lines'
261
+
262
+ it 'auto-corrects alignment' do
263
+ new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
264
+ ' bb: 1,',
265
+ ' ccc: 2 }',
266
+ 'hash2 = { a => 0,',
267
+ ' bb => 1,',
268
+ ' ccc =>2 }'])
269
+ expect(new_source).to eq(['hash1 = { a: 0,',
270
+ ' bb: 1,',
271
+ ' ccc: 2 }',
272
+ 'hash2 = { a => 0,',
273
+ ' bb => 1,',
274
+ ' ccc => 2 }'].join("\n"))
275
+ end
276
+ end
277
+
278
+ context 'with different settings for => and :' do
279
+ let(:cop_config) do
280
+ {
281
+ 'EnforcedHashRocketStyle' => 'key',
282
+ 'EnforcedColonStyle' => 'separator'
283
+ }
284
+ end
285
+
286
+ it 'registers offences for misaligned entries' do
287
+ inspect_source(cop, ['hash1 = {',
288
+ ' a: 0,',
289
+ ' bbb: 1',
290
+ '}',
291
+ 'hash2 = {',
292
+ " 'a' => 0,",
293
+ " 'bbb' => 1",
294
+ '}'])
295
+ expect(cop.highlights).to eq(['bbb: 1', "'bbb' => 1"])
296
+ end
297
+
298
+ it 'accepts aligned entries' do
299
+ inspect_source(cop, ['hash1 = {',
300
+ ' a: 0,',
301
+ ' bbb: 1',
302
+ '}',
303
+ 'hash2 = {',
304
+ " 'a' => 0,",
305
+ " 'bbb' => 1",
306
+ '}'])
307
+ expect(cop.offences).to be_empty
308
+ end
309
+ end
310
+ end