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,83 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::RegexpLiteral, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'MaxSlashes' => 1 } }
8
+
9
+ context 'when a regexp uses // delimiters' do
10
+ context 'when MaxSlashes is 1' do
11
+ it 'registers an offence for two slashes in regexp' do
12
+ inspect_source(cop, ['x =~ /home\/\//',
13
+ 'y =~ /etc\/top\//'])
14
+ expect(cop.messages)
15
+ .to eq(['Use %r for regular expressions matching more ' \
16
+ "than 1 '/' character."] * 2)
17
+ expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 2)
18
+ end
19
+
20
+ it 'accepts zero or one slash in regexp' do
21
+ inspect_source(cop, ['x =~ /\/home/',
22
+ 'y =~ /\//',
23
+ 'w =~ /\//m',
24
+ 'z =~ /a/'])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+ end
28
+
29
+ context 'when MaxSlashes is 0' do
30
+ let(:cop_config) { { 'MaxSlashes' => 0 } }
31
+
32
+ it 'registers an offence for one slash in regexp' do
33
+ inspect_source(cop, ['x =~ /home\//'])
34
+ expect(cop.messages)
35
+ .to eq(['Use %r for regular expressions matching more ' \
36
+ "than 0 '/' characters."])
37
+ expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 1)
38
+ end
39
+
40
+ it 'accepts zero slashes in regexp' do
41
+ inspect_source(cop, ['z =~ /a/'])
42
+ expect(cop.offences).to be_empty
43
+ end
44
+
45
+ it 'registers an offence for zero slashes in regexp' do
46
+ inspect_source(cop, ['y =~ %r(etc)'])
47
+ expect(cop.messages)
48
+ .to eq(['Use %r only for regular expressions matching more ' \
49
+ "than 0 '/' characters."])
50
+ expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 1)
51
+ end
52
+
53
+ it 'accepts regexp with one slash' do
54
+ inspect_source(cop, ['x =~ %r(/home)'])
55
+ expect(cop.offences).to be_empty
56
+ end
57
+ end
58
+
59
+ it 'ignores slashes do not belong regexp' do
60
+ inspect_source(cop, ['x =~ /\s{#{x[/\s+/].length}}/'])
61
+ expect(cop.offences).to be_empty
62
+ end
63
+ end
64
+
65
+ context 'when a regexp uses %r delimiters' do
66
+ context 'when MaxSlashes is 1' do
67
+ it 'registers an offence for zero or one slash in regexp' do
68
+ inspect_source(cop, ['x =~ %r(/home)',
69
+ 'y =~ %r(etc)'])
70
+ expect(cop.messages)
71
+ .to eq(['Use %r only for regular expressions matching more ' \
72
+ "than 1 '/' character."] * 2)
73
+ expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 2)
74
+ end
75
+
76
+ it 'accepts regexp with two or more slashes' do
77
+ inspect_source(cop, ['x =~ %r(/home/)',
78
+ 'y =~ %r(/////)'])
79
+ expect(cop.offences).to be_empty
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,116 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::RescueModifier do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for modifier rescue' do
9
+ inspect_source(cop,
10
+ ['method rescue handle'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['Avoid using rescue in its modifier form.'])
14
+ end
15
+
16
+ it 'handles more complex expression with modifier rescue' do
17
+ inspect_source(cop,
18
+ ['method1 or method2 rescue handle'])
19
+ expect(cop.offences.size).to eq(1)
20
+ expect(cop.messages)
21
+ .to eq(['Avoid using rescue in its modifier form.'])
22
+ end
23
+
24
+ it 'handles modifier rescue in normal rescue' do
25
+ inspect_source(cop,
26
+ ['begin',
27
+ ' test rescue modifier_handle',
28
+ 'rescue',
29
+ ' normal_handle',
30
+ 'end'])
31
+ expect(cop.offences.size).to eq(1)
32
+ expect(cop.offences.first.line).to eq(2)
33
+ end
34
+
35
+ it 'does not register an offence for normal rescue' do
36
+ inspect_source(cop,
37
+ ['begin',
38
+ ' test',
39
+ 'rescue',
40
+ ' handle',
41
+ 'end'])
42
+ expect(cop.offences).to be_empty
43
+ end
44
+
45
+ it 'does not register an offence for normal rescue with ensure' do
46
+ inspect_source(cop,
47
+ ['begin',
48
+ ' test',
49
+ 'rescue',
50
+ ' handle',
51
+ 'ensure',
52
+ ' cleanup',
53
+ 'end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+
57
+ it 'does not register an offence for nested normal rescue' do
58
+ inspect_source(cop,
59
+ ['begin',
60
+ ' begin',
61
+ ' test',
62
+ ' rescue',
63
+ ' handle_inner',
64
+ ' end',
65
+ 'rescue',
66
+ ' handle_outer',
67
+ 'end'])
68
+ expect(cop.offences).to be_empty
69
+ end
70
+
71
+ context 'when an instance method has implicit begin' do
72
+ it 'accepts normal rescue' do
73
+ inspect_source(cop,
74
+ ['def some_method',
75
+ ' test',
76
+ 'rescue',
77
+ ' handle',
78
+ 'end'])
79
+ expect(cop.offences).to be_empty
80
+ end
81
+
82
+ it 'handles modifier rescue in body of implicit begin' do
83
+ inspect_source(cop,
84
+ ['def some_method',
85
+ ' test rescue modifier_handle',
86
+ 'rescue',
87
+ ' normal_handle',
88
+ 'end'])
89
+ expect(cop.offences.size).to eq(1)
90
+ expect(cop.offences.first.line).to eq(2)
91
+ end
92
+ end
93
+
94
+ context 'when a singleton method has implicit begin' do
95
+ it 'accepts normal rescue' do
96
+ inspect_source(cop,
97
+ ['def self.some_method',
98
+ ' test',
99
+ 'rescue',
100
+ ' handle',
101
+ 'end'])
102
+ expect(cop.offences).to be_empty
103
+ end
104
+
105
+ it 'handles modifier rescue in body of implicit begin' do
106
+ inspect_source(cop,
107
+ ['def self.some_method',
108
+ ' test rescue modifier_handle',
109
+ 'rescue',
110
+ ' normal_handle',
111
+ 'end'])
112
+ expect(cop.offences.size).to eq(1)
113
+ expect(cop.offences.first.line).to eq(2)
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,100 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::Semicolon, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'AllowAsExpressionSeparator' => false } }
8
+
9
+ it 'registers an offence for a single expression' do
10
+ inspect_source(cop,
11
+ ['puts "this is a test";'])
12
+ expect(cop.offences.size).to eq(1)
13
+ end
14
+
15
+ it 'registers an offence for several expressions' do
16
+ inspect_source(cop,
17
+ ['puts "this is a test"; puts "So is this"'])
18
+ expect(cop.offences.size).to eq(1)
19
+ end
20
+
21
+ it 'registers an offence for one line method with two statements' do
22
+ inspect_source(cop,
23
+ ['def foo(a) x(1); y(2); z(3); end'])
24
+ expect(cop.offences.size).to eq(1)
25
+ end
26
+
27
+ it 'accepts semicolon before end if so configured' do
28
+ inspect_source(cop,
29
+ ['def foo(a) z(3); end'])
30
+ expect(cop.offences).to be_empty
31
+ end
32
+
33
+ it 'accepts semicolon after params if so configured' do
34
+ inspect_source(cop,
35
+ ['def foo(a); z(3) end'])
36
+ expect(cop.offences).to be_empty
37
+ end
38
+
39
+ it 'accepts one line method definitions' do
40
+ inspect_source(cop,
41
+ ['def foo1; x(3) end',
42
+ 'def initialize(*_); end',
43
+ 'def foo2() x(3); end',
44
+ 'def foo3; x(3); end'])
45
+ expect(cop.offences).to be_empty
46
+ end
47
+
48
+ it 'accepts one line empty class definitions' do
49
+ inspect_source(cop,
50
+ ['# Prefer a single-line format for class ...',
51
+ 'class Foo < Exception; end',
52
+ '',
53
+ 'class Bar; end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+
57
+ it 'accepts one line empty method definitions' do
58
+ inspect_source(cop,
59
+ ['# One exception to the rule are empty-body methods',
60
+ 'def no_op; end',
61
+ '',
62
+ 'def foo; end'])
63
+ expect(cop.offences).to be_empty
64
+ end
65
+
66
+ it 'accepts one line empty module definitions' do
67
+ inspect_source(cop,
68
+ ['module Foo; end'])
69
+ expect(cop.offences).to be_empty
70
+ end
71
+
72
+ it 'registers an offence for semicolon at the end no matter what' do
73
+ inspect_source(cop,
74
+ ['module Foo; end;'])
75
+ expect(cop.offences.size).to eq(1)
76
+ end
77
+
78
+ it 'accept semicolons inside strings' do
79
+ inspect_source(cop,
80
+ ['string = ";',
81
+ 'multi-line string"'])
82
+ expect(cop.offences).to be_empty
83
+ end
84
+
85
+ context 'when AllowAsExpressionSeparator is true' do
86
+ let(:cop_config) { { 'AllowAsExpressionSeparator' => true } }
87
+
88
+ it 'accepts several expressions' do
89
+ inspect_source(cop,
90
+ ['puts "this is a test"; puts "So is this"'])
91
+ expect(cop.offences).to be_empty
92
+ end
93
+
94
+ it 'accepts one line method with two statements' do
95
+ inspect_source(cop,
96
+ ['def foo(a) x(1); y(2); z(3); end'])
97
+ expect(cop.offences).to be_empty
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,266 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SignalException, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'when enforced style is `semantic`' do
9
+ let(:cop_config) { { 'EnforcedStyle' => 'semantic' } }
10
+
11
+ it 'registers an offence for raise in begin section' do
12
+ inspect_source(cop,
13
+ ['begin',
14
+ ' raise',
15
+ 'rescue Exception',
16
+ ' #do nothing',
17
+ 'end'])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages)
20
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'])
21
+ end
22
+
23
+ it 'registers an offence for raise in def body' do
24
+ inspect_source(cop,
25
+ ['def test',
26
+ ' raise',
27
+ 'rescue Exception',
28
+ ' #do nothing',
29
+ 'end'])
30
+ expect(cop.offences.size).to eq(1)
31
+ expect(cop.messages)
32
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'])
33
+ end
34
+
35
+ it 'registers an offence for fail in rescue section' do
36
+ inspect_source(cop,
37
+ ['begin',
38
+ ' fail',
39
+ 'rescue Exception',
40
+ ' fail',
41
+ 'end'])
42
+ expect(cop.offences.size).to eq(1)
43
+ expect(cop.messages)
44
+ .to eq(['Use `raise` instead of `fail` to rethrow exceptions.'])
45
+ end
46
+
47
+ it 'accepts raise in rescue section' do
48
+ inspect_source(cop,
49
+ ['begin',
50
+ ' fail',
51
+ 'rescue Exception',
52
+ ' raise RuntimeError',
53
+ 'end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+
57
+ it 'registers an offence for fail in def rescue section' do
58
+ inspect_source(cop,
59
+ ['def test',
60
+ ' fail',
61
+ 'rescue Exception',
62
+ ' fail',
63
+ 'end'])
64
+ expect(cop.offences.size).to eq(1)
65
+ expect(cop.messages)
66
+ .to eq(['Use `raise` instead of `fail` to rethrow exceptions.'])
67
+ end
68
+
69
+ it 'registers only offence for one raise that should be fail' do
70
+ # This is a special case that has caused double reporting.
71
+ inspect_source(cop,
72
+ ['map do',
73
+ " raise 'I'",
74
+ 'end.flatten.compact'])
75
+ expect(cop.offences.size).to eq(1)
76
+ expect(cop.messages)
77
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'])
78
+ end
79
+
80
+ it 'accepts raise in def rescue section' do
81
+ inspect_source(cop,
82
+ ['def test',
83
+ ' fail',
84
+ 'rescue Exception',
85
+ ' raise',
86
+ 'end'])
87
+ expect(cop.offences).to be_empty
88
+ end
89
+
90
+ it 'registers an offence for raise not in a begin/rescue/end' do
91
+ inspect_source(cop,
92
+ ["case cop_config['EnforcedStyle']",
93
+ "when 'single_quotes' then true",
94
+ "when 'double_quotes' then false",
95
+ "else raise 'Unknown StringLiterals style'",
96
+ 'end'])
97
+ expect(cop.offences.size).to eq(1)
98
+ expect(cop.messages)
99
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'])
100
+ end
101
+
102
+ it 'registers one offence for each raise' do
103
+ inspect_source(cop,
104
+ ['cop.stub(:on_def) { raise RuntimeError }',
105
+ 'cop.stub(:on_def) { raise RuntimeError }'])
106
+ expect(cop.offences.size).to eq(2)
107
+ expect(cop.messages)
108
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2)
109
+ end
110
+
111
+ it 'is not confused by nested begin/rescue' do
112
+ inspect_source(cop,
113
+ ['begin',
114
+ ' raise',
115
+ ' begin',
116
+ ' raise',
117
+ ' rescue',
118
+ ' fail',
119
+ ' end',
120
+ 'rescue Exception',
121
+ ' #do nothing',
122
+ 'end'])
123
+ expect(cop.offences.size).to eq(3)
124
+ expect(cop.messages)
125
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2 +
126
+ ['Use `raise` instead of `fail` to rethrow exceptions.'])
127
+ end
128
+
129
+ it 'auto-corrects raise to fail when appropriate' do
130
+ new_source = autocorrect_source(cop,
131
+ ['begin',
132
+ ' raise',
133
+ 'rescue Exception',
134
+ ' raise',
135
+ 'end'])
136
+ expect(new_source).to eq(['begin',
137
+ ' fail',
138
+ 'rescue Exception',
139
+ ' raise',
140
+ 'end'].join("\n"))
141
+ end
142
+
143
+ it 'auto-corrects fail to raise when appropriate' do
144
+ new_source = autocorrect_source(cop,
145
+ ['begin',
146
+ ' fail',
147
+ 'rescue Exception',
148
+ ' fail',
149
+ 'end'])
150
+ expect(new_source).to eq(['begin',
151
+ ' fail',
152
+ 'rescue Exception',
153
+ ' raise',
154
+ 'end'].join("\n"))
155
+ end
156
+ end
157
+
158
+ context 'when enforced style is `raise`' do
159
+ let(:cop_config) { { 'EnforcedStyle' => 'only_raise' } }
160
+
161
+ it 'registers an offence for fail in begin section' do
162
+ inspect_source(cop,
163
+ ['begin',
164
+ ' fail',
165
+ 'rescue Exception',
166
+ ' #do nothing',
167
+ 'end'])
168
+ expect(cop.offences.size).to eq(1)
169
+ expect(cop.messages)
170
+ .to eq(['Always use `raise` to signal exceptions.'])
171
+ end
172
+
173
+ it 'registers an offence for fail in def body' do
174
+ inspect_source(cop,
175
+ ['def test',
176
+ ' fail',
177
+ 'rescue Exception',
178
+ ' #do nothing',
179
+ 'end'])
180
+ expect(cop.offences.size).to eq(1)
181
+ expect(cop.messages)
182
+ .to eq(['Always use `raise` to signal exceptions.'])
183
+ end
184
+
185
+ it 'registers an offence for fail in rescue section' do
186
+ inspect_source(cop,
187
+ ['begin',
188
+ ' raise',
189
+ 'rescue Exception',
190
+ ' fail',
191
+ 'end'])
192
+ expect(cop.offences.size).to eq(1)
193
+ expect(cop.messages)
194
+ .to eq(['Always use `raise` to signal exceptions.'])
195
+ end
196
+
197
+ it 'auto-corrects fail to raise always' do
198
+ new_source = autocorrect_source(cop,
199
+ ['begin',
200
+ ' fail',
201
+ 'rescue Exception',
202
+ ' fail',
203
+ 'end'])
204
+ expect(new_source).to eq(['begin',
205
+ ' raise',
206
+ 'rescue Exception',
207
+ ' raise',
208
+ 'end'].join("\n"))
209
+ end
210
+
211
+ end
212
+
213
+ context 'when enforced style is `fail`' do
214
+ let(:cop_config) { { 'EnforcedStyle' => 'only_fail' } }
215
+
216
+ it 'registers an offence for raise in begin section' do
217
+ inspect_source(cop,
218
+ ['begin',
219
+ ' raise',
220
+ 'rescue Exception',
221
+ ' #do nothing',
222
+ 'end'])
223
+ expect(cop.offences.size).to eq(1)
224
+ expect(cop.messages)
225
+ .to eq(['Always use `fail` to signal exceptions.'])
226
+ end
227
+
228
+ it 'registers an offence for raise in def body' do
229
+ inspect_source(cop,
230
+ ['def test',
231
+ ' raise',
232
+ 'rescue Exception',
233
+ ' #do nothing',
234
+ 'end'])
235
+ expect(cop.offences.size).to eq(1)
236
+ expect(cop.messages)
237
+ .to eq(['Always use `fail` to signal exceptions.'])
238
+ end
239
+
240
+ it 'registers an offence for raise in rescue section' do
241
+ inspect_source(cop,
242
+ ['begin',
243
+ ' fail',
244
+ 'rescue Exception',
245
+ ' raise',
246
+ 'end'])
247
+ expect(cop.offences.size).to eq(1)
248
+ expect(cop.messages)
249
+ .to eq(['Always use `fail` to signal exceptions.'])
250
+ end
251
+
252
+ it 'auto-corrects raise to fail always' do
253
+ new_source = autocorrect_source(cop,
254
+ ['begin',
255
+ ' raise',
256
+ 'rescue Exception',
257
+ ' raise',
258
+ 'end'])
259
+ expect(new_source).to eq(['begin',
260
+ ' fail',
261
+ 'rescue Exception',
262
+ ' fail',
263
+ 'end'].join("\n"))
264
+ end
265
+ end
266
+ end