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,105 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::For, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'when each is the enforced style' do
9
+ let(:cop_config) { { 'EnforcedStyle' => 'each' } }
10
+
11
+ it 'registers an offence for for' do
12
+ inspect_source(cop,
13
+ ['def func',
14
+ ' for n in [1, 2, 3] do',
15
+ ' puts n',
16
+ ' end',
17
+ 'end'])
18
+ expect(cop.messages).to eq(['Prefer *each* over *for*.'])
19
+ expect(cop.highlights).to eq(['for'])
20
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'for')
21
+ end
22
+
23
+ it 'registers an offence for opposite + correct style' do
24
+ inspect_source(cop,
25
+ ['def func',
26
+ ' for n in [1, 2, 3] do',
27
+ ' puts n',
28
+ ' end',
29
+ ' [1, 2, 3].each do |n|',
30
+ ' puts n',
31
+ ' end',
32
+ 'end'])
33
+ expect(cop.messages).to eq(['Prefer *each* over *for*.'])
34
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
35
+ end
36
+
37
+ it 'accepts multiline each' do
38
+ inspect_source(cop,
39
+ ['def func',
40
+ ' [1, 2, 3].each do |n|',
41
+ ' puts n',
42
+ ' end',
43
+ 'end'])
44
+ expect(cop.offences).to be_empty
45
+ end
46
+
47
+ it 'accepts :for' do
48
+ inspect_source(cop, ['[:for, :ala, :bala]'])
49
+ expect(cop.offences).to be_empty
50
+ end
51
+
52
+ it 'accepts def for' do
53
+ inspect_source(cop, ['def for; end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+ end
57
+
58
+ context 'when for is the enforced style' do
59
+ let(:cop_config) { { 'EnforcedStyle' => 'for' } }
60
+
61
+ it 'accepts for' do
62
+ inspect_source(cop,
63
+ ['def func',
64
+ ' for n in [1, 2, 3] do',
65
+ ' puts n',
66
+ ' end',
67
+ 'end'])
68
+ expect(cop.offences).to be_empty
69
+ end
70
+
71
+ it 'registers an offence for multiline each' do
72
+ inspect_source(cop,
73
+ ['def func',
74
+ ' [1, 2, 3].each do |n|',
75
+ ' puts n',
76
+ ' end',
77
+ 'end'])
78
+ expect(cop.messages).to eq(['Prefer *for* over *each*.'])
79
+ expect(cop.highlights).to eq(['each'])
80
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'each')
81
+ end
82
+
83
+ it 'registers an offence for correct + opposite style' do
84
+ inspect_source(cop,
85
+ ['def func',
86
+ ' for n in [1, 2, 3] do',
87
+ ' puts n',
88
+ ' end',
89
+ ' [1, 2, 3].each do |n|',
90
+ ' puts n',
91
+ ' end',
92
+ 'end'])
93
+ expect(cop.messages).to eq(['Prefer *for* over *each*.'])
94
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
95
+ end
96
+
97
+ it 'accepts single line each' do
98
+ inspect_source(cop,
99
+ ['def func',
100
+ ' [1, 2, 3].each { |n| puts n }',
101
+ 'end'])
102
+ expect(cop.offences).to be_empty
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::GlobalVars, :config do
6
+ cop_config = {
7
+ 'AllowedVariables' => ['$allowed']
8
+ }
9
+
10
+ subject(:cop) { described_class.new(config) }
11
+ let(:cop_config) { cop_config }
12
+
13
+ it 'registers an offence for $custom' do
14
+ inspect_source(cop, ['puts $custom'])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it 'allows user whitelisted variables' do
19
+ inspect_source(cop, ['puts $allowed'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+
23
+ described_class::BUILT_IN_VARS.each do |var|
24
+ it "does not register an offence for built-in variable #{var}" do
25
+ inspect_source(cop, ["puts #{var}"])
26
+ expect(cop.offences).to be_empty
27
+ end
28
+ end
29
+
30
+ it 'does not register an offence for backrefs like $1' do
31
+ inspect_source(cop, ['puts $1'])
32
+ expect(cop.offences).to be_empty
33
+ end
34
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
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)')
44
+ end
45
+ end
@@ -0,0 +1,131 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
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(:config) do
10
+ Rubocop::Config.new('HashSyntax' => {
11
+ 'EnforcedStyle' => 'ruby19',
12
+ 'SupportedStyles' => %w(ruby19 hash_rockets)
13
+ },
14
+ 'SpaceAroundOperators' => { 'Enabled' => true })
15
+ end
16
+
17
+ it 'registers offence for hash rocket syntax when new is possible' do
18
+ inspect_source(cop, ['x = { :a => 0 }'])
19
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
20
+ expect(cop.config_to_allow_offences)
21
+ .to eq('EnforcedStyle' => 'hash_rockets')
22
+ end
23
+
24
+ it 'registers an offence for mixed syntax when new is possible' do
25
+ inspect_source(cop, ['x = { :a => 0, b: 1 }'])
26
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
27
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
28
+ end
29
+
30
+ it 'registers an offence for hash rockets in method calls' do
31
+ inspect_source(cop, ['func(3, :a => 0)'])
32
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
33
+ end
34
+
35
+ it 'accepts hash rockets when keys have different types' do
36
+ inspect_source(cop, ['x = { :a => 0, "b" => 1 }'])
37
+ expect(cop.messages).to be_empty
38
+ end
39
+
40
+ it 'accepts hash rockets when keys have whitespaces in them' do
41
+ inspect_source(cop, ['x = { :"t o" => 0 }'])
42
+ expect(cop.messages).to be_empty
43
+ end
44
+
45
+ it 'accepts hash rockets when keys have special symbols in them' do
46
+ inspect_source(cop, ['x = { :"\tab" => 1 }'])
47
+ expect(cop.messages).to be_empty
48
+ end
49
+
50
+ it 'accepts hash rockets when keys start with a digit' do
51
+ inspect_source(cop, ['x = { :"1" => 1 }'])
52
+ expect(cop.messages).to be_empty
53
+ end
54
+
55
+ it 'registers offence when keys start with an uppercase letter' do
56
+ inspect_source(cop, ['x = { :A => 0 }'])
57
+ expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
58
+ end
59
+
60
+ it 'accepts new syntax in a hash literal' do
61
+ inspect_source(cop, ['x = { a: 0, b: 1 }'])
62
+ expect(cop.messages).to be_empty
63
+ end
64
+
65
+ it 'accepts new syntax in method calls' do
66
+ inspect_source(cop, ['func(3, a: 0)'])
67
+ expect(cop.messages).to be_empty
68
+ end
69
+
70
+ it 'auto-corrects old to new style' do
71
+ new_source = autocorrect_source(cop, '{ :a => 1, :b => 2}')
72
+ expect(new_source).to eq('{ a: 1, b: 2}')
73
+ end
74
+
75
+ it 'does not auto-correct if it interferes with SpaceAroundOperators' do
76
+ new_source = autocorrect_source(cop, '{ :a=>1, :b=>2 }')
77
+ expect(new_source).to eq('{ :a=>1, :b=>2 }')
78
+ end
79
+
80
+ context 'with SpaceAroundOperators disabled' do
81
+ let(:config) do
82
+ Rubocop::Config.new('HashSyntax' => {
83
+ 'EnforcedStyle' => 'ruby19',
84
+ 'SupportedStyles' => %w(ruby19 hash_rockets)
85
+ },
86
+ 'SpaceAroundOperators' => { 'Enabled' => false })
87
+ end
88
+
89
+ it 'auto-corrects even if there is no space around =>' do
90
+ new_source = autocorrect_source(cop, '{ :a=>1, :b=>2 }')
91
+ expect(new_source).to eq('{ a: 1, b: 2 }')
92
+ end
93
+ end
94
+ end
95
+
96
+ context 'configured to enforce hash rockets style' do
97
+ let(:cop_config) { { 'EnforcedStyle' => 'hash_rockets' } }
98
+
99
+ it 'registers offence for Ruby 1.9 style' do
100
+ inspect_source(cop, ['x = { a: 0 }'])
101
+ expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
102
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'ruby19')
103
+ end
104
+
105
+ it 'registers an offence for mixed syntax' do
106
+ inspect_source(cop, ['x = { :a => 0, b: 1 }'])
107
+ expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
108
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
109
+ end
110
+
111
+ it 'registers an offence for 1.9 style in method calls' do
112
+ inspect_source(cop, ['func(3, a: 0)'])
113
+ expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
114
+ end
115
+
116
+ it 'accepts hash rockets in a hash literal' do
117
+ inspect_source(cop, ['x = { :a => 0, :b => 1 }'])
118
+ expect(cop.messages).to be_empty
119
+ end
120
+
121
+ it 'accepts hash rockets in method calls' do
122
+ inspect_source(cop, ['func(3, :a => 0)'])
123
+ expect(cop.messages).to be_empty
124
+ end
125
+
126
+ it 'auto-corrects new style to hash rockets' do
127
+ new_source = autocorrect_source(cop, '{ a: 1, b: 2}')
128
+ expect(new_source).to eq('{ :a => 1, :b => 2}')
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,128 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::IfUnlessModifier do
6
+ include StatementModifierHelper
7
+
8
+ subject(:cop) { described_class.new(config) }
9
+ let(:config) do
10
+ hash = { 'LineLength' => { 'Max' => 79 } }
11
+ Rubocop::Config.new(hash)
12
+ end
13
+
14
+ it 'registers an offence for multiline if that fits on one line' do
15
+ # This if statement fits exactly on one line if written as a
16
+ # modifier.
17
+ condition = 'a' * 38
18
+ body = 'b' * 35
19
+ expect(" #{body} if #{condition}".length).to eq(79)
20
+
21
+ inspect_source(cop,
22
+ [" if #{condition}",
23
+ " #{body}",
24
+ ' end'])
25
+ expect(cop.messages).to eq(
26
+ ['Favor modifier if usage when you have a single-line' \
27
+ ' body. Another good alternative is the usage of control flow' +
28
+ ' &&/||.'])
29
+ end
30
+
31
+ it 'registers an offence for short multiline if near an else etc' do
32
+ inspect_source(cop,
33
+ ['if x',
34
+ ' y',
35
+ 'elsif x1',
36
+ ' y1',
37
+ 'else',
38
+ ' z',
39
+ 'end',
40
+ 'n = a ? 0 : 1',
41
+ 'm = 3 if m0',
42
+ '',
43
+ 'if a',
44
+ ' b',
45
+ 'end'])
46
+ expect(cop.offences.size).to eq(1)
47
+ end
48
+
49
+ it "accepts multiline if that doesn't fit on one line" do
50
+ check_too_long(cop, 'if')
51
+ end
52
+
53
+ it 'accepts multiline if whose body is more than one line' do
54
+ check_short_multiline(cop, 'if')
55
+ end
56
+
57
+ it 'registers an offence for multiline unless that fits on one line' do
58
+ inspect_source(cop, ['unless a',
59
+ ' b',
60
+ 'end'])
61
+ expect(cop.messages).to eq(
62
+ ['Favor modifier unless usage when you have a single-line' \
63
+ ' body. Another good alternative is the usage of control flow' +
64
+ ' &&/||.'])
65
+ end
66
+
67
+ it 'accepts code with EOL comment since user might want to keep it' do
68
+ inspect_source(cop, ['unless a',
69
+ ' b # A comment',
70
+ 'end'])
71
+ expect(cop.offences).to be_empty
72
+ end
73
+
74
+ it 'accepts if-else-end' do
75
+ inspect_source(cop,
76
+ ['if args.last.is_a? Hash then args.pop else ' \
77
+ 'Hash.new end'])
78
+ expect(cop.messages).to be_empty
79
+ end
80
+
81
+ it 'accepts an empty condition' do
82
+ check_empty(cop, 'if')
83
+ check_empty(cop, 'unless')
84
+ end
85
+
86
+ it 'accepts if/elsif' do
87
+ inspect_source(cop, ['if test',
88
+ ' something',
89
+ 'elsif test2',
90
+ ' something_else',
91
+ 'end'])
92
+ expect(cop.offences).to be_empty
93
+ end
94
+
95
+ context 'with implicit match conditional' do
96
+ let(:source) do
97
+ [
98
+ " if #{conditional}",
99
+ " #{body}",
100
+ ' end'
101
+ ]
102
+ end
103
+
104
+ let(:body) { 'b' * 35 }
105
+
106
+ context 'when a multiline if fits on one line' do
107
+ let(:conditional) { "/#{'a' * 36}/" }
108
+
109
+ it 'registers an offence' do
110
+ expect(" #{body} if #{conditional}".length).to eq(79)
111
+
112
+ inspect_source(cop, source)
113
+ expect(cop.offences.size).to eq(1)
114
+ end
115
+ end
116
+
117
+ context "when a multiline if doesn't fit on one line" do
118
+ let(:conditional) { "/#{'a' * 37}/" }
119
+
120
+ it 'accepts' do
121
+ expect(" #{body} if #{conditional}".length).to eq(80)
122
+
123
+ inspect_source(cop, source)
124
+ expect(cop.offences).to be_empty
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::IfWithSemicolon do
6
+ subject(:cop) { described_class.new }
7
+
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
13
+
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
18
+ end
19
+ end