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,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::Proc do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for a Proc.new call' do
9
+ inspect_source(cop, ['f = Proc.new { |x| puts x }'])
10
+ expect(cop.offences.size).to eq(1)
11
+ end
12
+
13
+ it 'accepts the proc method' do
14
+ inspect_source(cop, ['f = proc { |x| puts x }'])
15
+ expect(cop.offences).to be_empty
16
+ end
17
+
18
+ it 'accepts the Proc.new call outside of block' do
19
+ inspect_source(cop, ['p = Proc.new'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+
23
+ it 'auto-corrects Proc.new to proc' do
24
+ corrected = autocorrect_source(cop, ['Proc.new { test }'])
25
+ expect(corrected).to eq 'proc { test }'
26
+ end
27
+ end
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::RaiseArgs, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'when enforced style is compact' do
9
+ let(:cop_config) { { 'EnforcedStyle' => 'compact' } }
10
+
11
+ it 'reports an offence for a raise with 2 args' do
12
+ inspect_source(cop, ['raise RuntimeError, msg'])
13
+ expect(cop.offences.size).to eq(1)
14
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'exploded')
15
+ end
16
+
17
+ it 'reports an offence for correct + opposite' do
18
+ inspect_source(cop, ['if a',
19
+ ' raise RuntimeError, msg',
20
+ 'else',
21
+ ' raise Ex.new(msg)',
22
+ 'end'])
23
+ expect(cop.offences.size).to eq(1)
24
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
25
+ end
26
+
27
+ it 'reports an offence for a raise with 3 args' do
28
+ inspect_source(cop, ['raise RuntimeError, msg, caller'])
29
+ expect(cop.offences.size).to eq(1)
30
+ end
31
+
32
+ it 'accepts a raise with msg argument' do
33
+ inspect_source(cop, ['raise msg'])
34
+ expect(cop.offences).to be_empty
35
+ end
36
+
37
+ it 'accepts a raise with an exception argument' do
38
+ inspect_source(cop, ['raise Ex.new(msg)'])
39
+ expect(cop.offences).to be_empty
40
+ end
41
+ end
42
+
43
+ context 'when enforced style is exploded' do
44
+ let(:cop_config) { { 'EnforcedStyle' => 'exploded' } }
45
+
46
+ it 'reports an offence for a raise with exception object' do
47
+ inspect_source(cop, ['raise Ex.new(msg)'])
48
+ expect(cop.offences.size).to eq(1)
49
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'compact')
50
+ end
51
+
52
+ it 'reports an offence for opposite + correct' do
53
+ inspect_source(cop, ['if a',
54
+ ' raise RuntimeError, msg',
55
+ 'else',
56
+ ' raise Ex.new(msg)',
57
+ 'end'])
58
+ expect(cop.offences.size).to eq(1)
59
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
60
+ end
61
+
62
+ it 'accepts exception constructor with more than 1 argument' do
63
+ inspect_source(cop, ['raise RuntimeError.new(a1, a2, a3)'])
64
+ expect(cop.offences).to be_empty
65
+ end
66
+
67
+ it 'accepts a raise with 3 args' do
68
+ inspect_source(cop, ['raise RuntimeError, msg, caller'])
69
+ expect(cop.offences).to be_empty
70
+ end
71
+
72
+ it 'accepts a raise with 2 args' do
73
+ inspect_source(cop, ['raise RuntimeError, msg'])
74
+ expect(cop.offences).to be_empty
75
+ end
76
+
77
+ it 'accepts a raise with msg argument' do
78
+ inspect_source(cop, ['raise msg'])
79
+ expect(cop.offences).to be_empty
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::RedundantBegin do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for def with redundant begin block' do
9
+ src = ['def func',
10
+ ' begin',
11
+ ' ala',
12
+ ' rescue => e',
13
+ ' bala',
14
+ ' end',
15
+ 'end']
16
+ inspect_source(cop, src)
17
+ expect(cop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'reports an offence for defs with redundant begin block' do
21
+ src = ['def Test.func',
22
+ ' begin',
23
+ ' ala',
24
+ ' rescue => e',
25
+ ' bala',
26
+ ' end',
27
+ 'end']
28
+ inspect_source(cop, src)
29
+ expect(cop.offences.size).to eq(1)
30
+ end
31
+
32
+ it 'accepts a def with required begin block' do
33
+ src = ['def func',
34
+ ' begin',
35
+ ' ala',
36
+ ' rescue => e',
37
+ ' bala',
38
+ ' end',
39
+ ' something',
40
+ 'end']
41
+ inspect_source(cop, src)
42
+ expect(cop.offences).to be_empty
43
+ end
44
+
45
+ it 'accepts a defs with required begin block' do
46
+ src = ['def Test.func',
47
+ ' begin',
48
+ ' ala',
49
+ ' rescue => e',
50
+ ' bala',
51
+ ' end',
52
+ ' something',
53
+ 'end']
54
+ inspect_source(cop, src)
55
+ expect(cop.offences).to be_empty
56
+ end
57
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::RedundantException do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for a raise with RuntimeError' do
9
+ inspect_source(cop, ['raise RuntimeError, msg'])
10
+ expect(cop.offences.size).to eq(1)
11
+ end
12
+
13
+ it 'reports an offence for a fail with RuntimeError' do
14
+ inspect_source(cop, ['fail RuntimeError, msg'])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it 'accepts a raise with RuntimeError if it does not have 2 args' do
19
+ inspect_source(cop, ['raise RuntimeError, msg, caller'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+
23
+ it 'accepts a fail with RuntimeError if it does not have 2 args' do
24
+ inspect_source(cop, ['fail RuntimeError, msg, caller'])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+ end
@@ -0,0 +1,171 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::RedundantReturn, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'AllowMultipleReturnValues' => false } }
8
+
9
+ it 'reports an offence for def with only a return' do
10
+ src = ['def func',
11
+ ' return something',
12
+ 'end']
13
+ inspect_source(cop, src)
14
+ expect(cop.offences.size).to eq(1)
15
+ end
16
+
17
+ it 'reports an offence for defs with only a return' do
18
+ src = ['def Test.func',
19
+ ' return something',
20
+ 'end']
21
+ inspect_source(cop, src)
22
+ expect(cop.offences.size).to eq(1)
23
+ end
24
+
25
+ it 'reports an offence for def ending with return' do
26
+ src = ['def func',
27
+ ' one',
28
+ ' two',
29
+ ' return something',
30
+ 'end']
31
+ inspect_source(cop, src)
32
+ expect(cop.offences.size).to eq(1)
33
+ end
34
+
35
+ it 'reports an offence for defs ending with return' do
36
+ src = ['def func',
37
+ ' one',
38
+ ' two',
39
+ ' return something',
40
+ 'end']
41
+ inspect_source(cop, src)
42
+ expect(cop.offences.size).to eq(1)
43
+ end
44
+
45
+ it 'accepts return in a non-final position' do
46
+ src = ['def func',
47
+ ' return something if something_else',
48
+ 'end']
49
+ inspect_source(cop, src)
50
+ expect(cop.offences).to be_empty
51
+ end
52
+
53
+ it 'does not blow up on empty method body' do
54
+ src = ['def func',
55
+ 'end']
56
+ inspect_source(cop, src)
57
+ expect(cop.offences).to be_empty
58
+ end
59
+
60
+ it 'auto-corrects by removing redundant returns' do
61
+ src = ['def func',
62
+ ' one',
63
+ ' two',
64
+ ' return something',
65
+ 'end'].join("\n")
66
+ result_src = ['def func',
67
+ ' one',
68
+ ' two',
69
+ ' something',
70
+ 'end'].join("\n")
71
+ new_source = autocorrect_source(cop, src)
72
+ expect(new_source).to eq(result_src)
73
+ end
74
+
75
+ context 'when multi-value returns are not allowed' do
76
+ it 'reports an offence for def with only a return' do
77
+ src = ['def func',
78
+ ' return something, test',
79
+ 'end']
80
+ inspect_source(cop, src)
81
+ expect(cop.offences.size).to eq(1)
82
+ end
83
+
84
+ it 'reports an offence for defs with only a return' do
85
+ src = ['def Test.func',
86
+ ' return something, test',
87
+ 'end']
88
+ inspect_source(cop, src)
89
+ expect(cop.offences.size).to eq(1)
90
+ end
91
+
92
+ it 'reports an offence for def ending with return' do
93
+ src = ['def func',
94
+ ' one',
95
+ ' two',
96
+ ' return something, test',
97
+ 'end']
98
+ inspect_source(cop, src)
99
+ expect(cop.offences.size).to eq(1)
100
+ end
101
+
102
+ it 'reports an offence for defs ending with return' do
103
+ src = ['def func',
104
+ ' one',
105
+ ' two',
106
+ ' return something, test',
107
+ 'end']
108
+ inspect_source(cop, src)
109
+ expect(cop.offences.size).to eq(1)
110
+ end
111
+
112
+ it 'auto-corrects by making implicit arrays explicit' do
113
+ src = ['def func',
114
+ ' return 1, 2',
115
+ 'end'].join("\n")
116
+ result_src = ['def func',
117
+ ' [1, 2]', # Just 1, 2 is not valid Ruby.
118
+ 'end'].join("\n")
119
+ new_source = autocorrect_source(cop, src)
120
+ expect(new_source).to eq(result_src)
121
+ end
122
+ end
123
+
124
+ context 'when multi-value returns are allowed' do
125
+ let(:cop_config) { { 'AllowMultipleReturnValues' => true } }
126
+
127
+ it 'accepts def with only a return' do
128
+ src = ['def func',
129
+ ' return something, test',
130
+ 'end']
131
+ inspect_source(cop, src)
132
+ expect(cop.offences).to be_empty
133
+ end
134
+
135
+ it 'accepts defs with only a return' do
136
+ src = ['def Test.func',
137
+ ' return something, test',
138
+ 'end']
139
+ inspect_source(cop, src)
140
+ expect(cop.offences).to be_empty
141
+ end
142
+
143
+ it 'accepts def ending with return' do
144
+ src = ['def func',
145
+ ' one',
146
+ ' two',
147
+ ' return something, test',
148
+ 'end']
149
+ inspect_source(cop, src)
150
+ expect(cop.offences).to be_empty
151
+ end
152
+
153
+ it 'accepts defs ending with return' do
154
+ src = ['def func',
155
+ ' one',
156
+ ' two',
157
+ ' return something, test',
158
+ 'end']
159
+ inspect_source(cop, src)
160
+ expect(cop.offences).to be_empty
161
+ end
162
+
163
+ it 'does not auto-correct' do
164
+ src = ['def func',
165
+ ' return 1, 2',
166
+ 'end'].join("\n")
167
+ new_source = autocorrect_source(cop, src)
168
+ expect(new_source).to eq(src)
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,142 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::RedundantSelf do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence a self receiver on an rvalue' do
9
+ src = ['a = self.b']
10
+ inspect_source(cop, src)
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'accepts a self receiver on an lvalue of an assignment' do
15
+ src = ['self.a = b']
16
+ inspect_source(cop, src)
17
+ expect(cop.offences).to be_empty
18
+ end
19
+
20
+ it 'accepts a self receiver on an lvalue of an or-assignment' do
21
+ src = ['self.logger ||= Rails.logger']
22
+ inspect_source(cop, src)
23
+ expect(cop.offences).to be_empty
24
+ end
25
+
26
+ it 'accepts a self receiver on an lvalue of an and-assignment' do
27
+ src = ['self.flag &&= value']
28
+ inspect_source(cop, src)
29
+ expect(cop.offences).to be_empty
30
+ end
31
+
32
+ it 'accepts a self receiver on an lvalue of a plus-assignment' do
33
+ src = ['self.sum += 10']
34
+ inspect_source(cop, src)
35
+ expect(cop.offences).to be_empty
36
+ end
37
+
38
+ it 'accepts a self receiver with the square bracket operator' do
39
+ src = ['self[a]']
40
+ inspect_source(cop, src)
41
+ expect(cop.offences).to be_empty
42
+ end
43
+
44
+ it 'accepts a self receiver with the double less-than operator' do
45
+ src = ['self << a']
46
+ inspect_source(cop, src)
47
+ expect(cop.offences).to be_empty
48
+ end
49
+
50
+ it 'accepts a self receiver for methods named like ruby keywords' do
51
+ src = ['a = self.class',
52
+ 'self.for(deps, [], true)',
53
+ 'self.and(other)',
54
+ 'self.or(other)',
55
+ 'self.alias',
56
+ 'self.begin',
57
+ 'self.break',
58
+ 'self.case',
59
+ 'self.def',
60
+ 'self.defined',
61
+ 'self.do',
62
+ 'self.else',
63
+ 'self.elsif',
64
+ 'self.end',
65
+ 'self.ensure',
66
+ 'self.false',
67
+ 'self.if',
68
+ 'self.in',
69
+ 'self.module',
70
+ 'self.next',
71
+ 'self.nil',
72
+ 'self.not',
73
+ 'self.redo',
74
+ 'self.rescue',
75
+ 'self.retry',
76
+ 'self.return',
77
+ 'self.self',
78
+ 'self.super',
79
+ 'self.then',
80
+ 'self.true',
81
+ 'self.undef',
82
+ 'self.unless',
83
+ 'self.until',
84
+ 'self.when',
85
+ 'self.while',
86
+ 'self.yield'
87
+ ]
88
+ inspect_source(cop, src)
89
+ expect(cop.offences).to be_empty
90
+ end
91
+
92
+ it 'accepts a self receiver used to distinguish from blockarg' do
93
+ src = ['def requested_specs(&groups)',
94
+ ' some_method(self.groups)',
95
+ 'end'
96
+ ]
97
+ inspect_source(cop, src)
98
+ expect(cop.offences).to be_empty
99
+ end
100
+
101
+ it 'accepts a self receiver used to distinguish from argument' do
102
+ src = ['def requested_specs(groups)',
103
+ ' some_method(self.groups)',
104
+ 'end'
105
+ ]
106
+ inspect_source(cop, src)
107
+ expect(cop.offences).to be_empty
108
+ end
109
+
110
+ it 'accepts a self receiver used to distinguish from argument' do
111
+ src = ['def requested_specs(final = true)',
112
+ ' something if self.final != final',
113
+ 'end'
114
+ ]
115
+ inspect_source(cop, src)
116
+ expect(cop.offences).to be_empty
117
+ end
118
+
119
+ it 'accepts a self receiver used to distinguish from local variable' do
120
+ src = ['def requested_specs',
121
+ ' @requested_specs ||= begin',
122
+ ' groups = self.groups - Bundler.settings.without',
123
+ ' groups.map! { |g| g.to_sym }',
124
+ ' specs_for(groups)',
125
+ ' end',
126
+ 'end'
127
+ ]
128
+ inspect_source(cop, src)
129
+ expect(cop.offences).to be_empty
130
+ end
131
+
132
+ it 'accepts a self receiver used to distinguish from constant' do
133
+ src = ['self.Foo']
134
+ inspect_source(cop, src)
135
+ expect(cop.offences).to be_empty
136
+ end
137
+
138
+ it 'auto-corrects by removing redundant self' do
139
+ new_source = autocorrect_source(cop, ['self.x'])
140
+ expect(new_source).to eq('x')
141
+ end
142
+ end