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,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::ConditionPosition do
6
+ subject(:cop) { described_class.new }
7
+
8
+ %w(if unless while until).each do |keyword|
9
+ it 'registers an offence for condition on the next line' do
10
+ inspect_source(cop,
11
+ ["#{keyword}",
12
+ 'x == 10',
13
+ 'end'
14
+ ])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it 'accepts condition on the same line' do
19
+ inspect_source(cop,
20
+ ["#{keyword} x == 10",
21
+ ' bala',
22
+ 'end'
23
+ ])
24
+ expect(cop.offences).to be_empty
25
+ end
26
+ end
27
+
28
+ it 'registers an offence for elsif condition on the next line' do
29
+ inspect_source(cop,
30
+ ['if something',
31
+ ' test',
32
+ 'elsif',
33
+ ' something',
34
+ ' test',
35
+ 'end'
36
+ ])
37
+ expect(cop.offences.size).to eq(1)
38
+ end
39
+
40
+ it 'handles ternary ops' do
41
+ inspect_source(cop, ['x ? a : b'])
42
+ expect(cop.offences).to be_empty
43
+ end
44
+
45
+ it 'handles modifier forms' do
46
+ inspect_source(cop, ['x if something'])
47
+ expect(cop.offences).to be_empty
48
+ end
49
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::Debugger do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for a debugger call' do
9
+ src = ['debugger']
10
+ inspect_source(cop, src)
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'reports an offence for pry bindings' do
15
+ src = ['binding.pry',
16
+ 'binding.remote_pry']
17
+ inspect_source(cop, src)
18
+ expect(cop.offences.size).to eq(2)
19
+ end
20
+
21
+ it 'does not report an offence for non-pry binding' do
22
+ src = ['binding.pirate']
23
+ inspect_source(cop, src)
24
+ expect(cop.offences).to be_empty
25
+ end
26
+
27
+ it 'does not report an offence for debugger in comments' do
28
+ src = ['# debugger']
29
+ inspect_source(cop, src)
30
+ expect(cop.offences).to be_empty
31
+ end
32
+
33
+ it 'does not report an offence for a debugger or pry method' do
34
+ src = ['code.debugger',
35
+ 'door.pry']
36
+ inspect_source(cop, src)
37
+ expect(cop.offences).to be_empty
38
+ end
39
+ end
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::ElseLayout do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for expr on same line as else' do
9
+ inspect_source(cop,
10
+ ['if something',
11
+ ' test',
12
+ 'else ala',
13
+ ' something',
14
+ ' test',
15
+ 'end'
16
+ ])
17
+ expect(cop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'accepts proper else' do
21
+ inspect_source(cop,
22
+ ['if something',
23
+ ' test',
24
+ 'else',
25
+ ' something',
26
+ ' test',
27
+ 'end'
28
+ ])
29
+ expect(cop.offences).to be_empty
30
+ end
31
+
32
+ it 'accepts single-expr else regardless of layout' do
33
+ inspect_source(cop,
34
+ ['if something',
35
+ ' test',
36
+ 'else bala',
37
+ 'end'
38
+ ])
39
+ expect(cop.offences).to be_empty
40
+ end
41
+
42
+ it 'can handle elsifs' do
43
+ inspect_source(cop,
44
+ ['if something',
45
+ ' test',
46
+ 'elsif something',
47
+ ' bala',
48
+ 'else ala',
49
+ ' something',
50
+ ' test',
51
+ 'end'
52
+ ])
53
+ expect(cop.offences.size).to eq(1)
54
+ end
55
+
56
+ it 'handles ternary ops' do
57
+ inspect_source(cop, 'x ? a : b')
58
+ expect(cop.offences).to be_empty
59
+ end
60
+
61
+ it 'handles modifier forms' do
62
+ inspect_source(cop, 'x if something')
63
+ expect(cop.offences).to be_empty
64
+ end
65
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::EmptyEnsure do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for empty ensure' do
9
+ inspect_source(cop,
10
+ ['begin',
11
+ ' something',
12
+ 'ensure',
13
+ 'end'])
14
+ expect(cop.offences.size).to eq(1)
15
+ end
16
+
17
+ it 'does not register an offence for non-empty ensure' do
18
+ inspect_source(cop,
19
+ ['begin',
20
+ ' something',
21
+ ' return',
22
+ 'ensure',
23
+ ' file.close',
24
+ 'end'])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+ end
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::EndAlignment, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { {} }
8
+ let(:cop_config) { { 'AlignWith' => 'keyword' } }
9
+ let(:opposite) do
10
+ cop_config['AlignWith'] == 'keyword' ? 'variable' : 'keyword'
11
+ end
12
+
13
+ shared_examples 'misaligned' do |alignment_base, arg, end_kw, name|
14
+ name ||= alignment_base
15
+ it "registers an offence for mismatched #{name} ... end" do
16
+ inspect_source(cop, ["#{alignment_base} #{arg}",
17
+ end_kw])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages.first)
20
+ .to match(/end at 2, \d+ is not aligned with #{alignment_base} at 1,/)
21
+ expect(cop.highlights.first).to eq('end')
22
+ expect(cop.config_to_allow_offences).to eq('AlignWith' => opposite)
23
+ end
24
+ end
25
+
26
+ shared_examples 'aligned' do |alignment_base, arg, end_kw, name|
27
+ name ||= alignment_base
28
+ it "accepts matching #{name} ... end" do
29
+ inspect_source(cop, ["#{alignment_base} #{arg}",
30
+ end_kw])
31
+ expect(cop.offences).to be_empty
32
+ end
33
+ end
34
+
35
+ include_examples 'misaligned', 'class', 'Test', ' end'
36
+ include_examples 'misaligned', 'module', 'Test', ' end'
37
+ include_examples 'misaligned', 'def', 'test', ' end'
38
+ include_examples 'misaligned', 'def', 'Test.test', ' end', 'defs'
39
+ include_examples 'misaligned', 'if', 'test', ' end'
40
+ include_examples 'misaligned', 'unless', 'test', ' end'
41
+ include_examples 'misaligned', 'while', 'test', ' end'
42
+ include_examples 'misaligned', 'until', 'test', ' end'
43
+
44
+ include_examples 'aligned', 'class', 'Test', 'end'
45
+ include_examples 'aligned', 'module', 'Test', 'end'
46
+ include_examples 'aligned', 'def', 'test', 'end'
47
+ include_examples 'aligned', 'def', 'Test.test', 'end', 'defs'
48
+ include_examples 'aligned', 'if', 'test', 'end'
49
+ include_examples 'aligned', 'unless', 'test', 'end'
50
+ include_examples 'aligned', 'while', 'test', 'end'
51
+ include_examples 'aligned', 'until', 'test', 'end'
52
+
53
+ context 'in ruby 2.1 or later' do
54
+ include_examples 'aligned', 'public def', 'test', 'end'
55
+ include_examples 'aligned', 'protected def', 'test', 'end'
56
+ include_examples 'aligned', 'private def', 'test', 'end'
57
+ include_examples 'aligned', 'module_function def', 'test', 'end'
58
+
59
+ include_examples('misaligned',
60
+ 'public def', 'test',
61
+ ' end')
62
+ include_examples('misaligned',
63
+ 'protected def', 'test',
64
+ ' end')
65
+ include_examples('misaligned',
66
+ 'private def', 'test',
67
+ ' end')
68
+ include_examples('misaligned',
69
+ 'module_function def', 'test',
70
+ ' end')
71
+ end
72
+
73
+ it 'can handle ternary if' do
74
+ inspect_source(cop, 'a = cond ? x : y')
75
+ expect(cop.offences).to be_empty
76
+ end
77
+
78
+ it 'can handle modifier if' do
79
+ inspect_source(cop, 'a = x if cond')
80
+ expect(cop.offences).to be_empty
81
+ end
82
+
83
+ it 'registers an offence for correct + opposite' do
84
+ inspect_source(cop, ['x = if a',
85
+ ' a1',
86
+ ' end',
87
+ 'y = if b',
88
+ ' b1',
89
+ 'end'])
90
+ expect(cop.offences.size).to eq(1)
91
+ expect(cop.messages.first)
92
+ .to eq('end at 6, 0 is not aligned with y = if at 4, 4')
93
+ expect(cop.highlights.first).to eq('end')
94
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
95
+ end
96
+
97
+ context 'regarding assignment' do
98
+ context 'when AlignWith is keyword' do
99
+ include_examples 'misaligned', 'var = if', 'test', 'end'
100
+ include_examples 'misaligned', 'var = unless', 'test', 'end'
101
+ include_examples 'misaligned', 'var = while', 'test', 'end'
102
+ include_examples 'misaligned', 'var = until', 'test', 'end'
103
+
104
+ include_examples 'aligned', 'var = if', 'test', ' end'
105
+ include_examples 'aligned', 'var = unless', 'test', ' end'
106
+ include_examples 'aligned', 'var = while', 'test', ' end'
107
+ include_examples 'aligned', 'var = until', 'test', ' end'
108
+ end
109
+
110
+ context 'when AlignWith is variable' do
111
+ let(:cop_config) { { 'AlignWith' => 'variable' } }
112
+
113
+ include_examples 'aligned', 'var = if', 'test', 'end'
114
+ include_examples 'aligned', 'var = unless', 'test', 'end'
115
+ include_examples 'aligned', 'var = while', 'test', 'end'
116
+ include_examples 'aligned', 'var = until', 'test', 'end'
117
+ include_examples 'aligned', 'var = until', 'test', 'end.abc.join("")'
118
+ include_examples 'aligned', 'var = until', 'test', 'end.abc.tap {}'
119
+
120
+ include_examples 'misaligned', 'var = if', 'test', ' end'
121
+ include_examples 'misaligned', 'var = unless', 'test', ' end'
122
+ include_examples 'misaligned', 'var = while', 'test', ' end'
123
+ include_examples 'misaligned', 'var = until', 'test', ' end'
124
+ include_examples 'misaligned', 'var = until', 'test', ' end.join'
125
+
126
+ include_examples 'aligned', '@var = if', 'test', 'end'
127
+ include_examples 'aligned', '@@var = if', 'test', 'end'
128
+ include_examples 'aligned', '$var = if', 'test', 'end'
129
+ include_examples 'aligned', 'CNST = if', 'test', 'end'
130
+ include_examples 'aligned', 'a, b = if', 'test', 'end'
131
+ include_examples 'aligned', 'var ||= if', 'test', 'end'
132
+ include_examples 'aligned', 'var &&= if', 'test', 'end'
133
+ include_examples 'aligned', 'var += if', 'test', 'end'
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::EndInMethod do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for def with an END inside' do
9
+ src = ['def test',
10
+ ' END { something }',
11
+ 'end']
12
+ inspect_source(cop, src)
13
+ expect(cop.offences.size).to eq(1)
14
+ end
15
+
16
+ it 'reports an offence for defs with an END inside' do
17
+ src = ['def self.test',
18
+ ' END { something }',
19
+ 'end']
20
+ inspect_source(cop, src)
21
+ expect(cop.offences.size).to eq(1)
22
+ end
23
+
24
+ it 'accepts END outside of def(s)' do
25
+ src = ['END { something }']
26
+ inspect_source(cop, src)
27
+ expect(cop.offences).to be_empty
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::EnsureReturn do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for return in ensure' do
9
+ inspect_source(cop,
10
+ ['begin',
11
+ ' something',
12
+ 'ensure',
13
+ ' file.close',
14
+ ' return',
15
+ 'end'])
16
+ expect(cop.offences.size).to eq(1)
17
+ end
18
+
19
+ it 'does not register an offence for return outside ensure' do
20
+ inspect_source(cop,
21
+ ['begin',
22
+ ' something',
23
+ ' return',
24
+ 'ensure',
25
+ ' file.close',
26
+ 'end'])
27
+ expect(cop.offences).to be_empty
28
+ end
29
+
30
+ it 'does not check when ensure block has no body' do
31
+ expect do
32
+ inspect_source(cop,
33
+ ['begin',
34
+ ' something',
35
+ 'ensure',
36
+ 'end'])
37
+ end.to_not raise_exception
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::Eval do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for eval as function' do
9
+ inspect_source(cop,
10
+ ['eval(something)'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['The use of eval is a serious security risk.'])
14
+ end
15
+
16
+ it 'registers an offence for eval as command' do
17
+ inspect_source(cop,
18
+ ['eval something'])
19
+ expect(cop.offences.size).to eq(1)
20
+ expect(cop.messages)
21
+ .to eq(['The use of eval is a serious security risk.'])
22
+ end
23
+
24
+ it 'does not register an offence for eval as variable' do
25
+ inspect_source(cop,
26
+ ['eval = something'])
27
+ expect(cop.offences).to be_empty
28
+ end
29
+
30
+ it 'does not register an offence for eval as method' do
31
+ inspect_source(cop,
32
+ ['something.eval'])
33
+ expect(cop.offences).to be_empty
34
+ end
35
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::HandleExceptions do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for empty rescue block' do
9
+ inspect_source(cop,
10
+ ['begin',
11
+ ' something',
12
+ 'rescue',
13
+ ' #do nothing',
14
+ 'end'])
15
+ expect(cop.offences.size).to eq(1)
16
+ expect(cop.messages)
17
+ .to eq(['Do not suppress exceptions.'])
18
+ end
19
+
20
+ it 'does not register an offence for rescue with body' do
21
+ inspect_source(cop,
22
+ ['begin',
23
+ ' something',
24
+ ' return',
25
+ 'rescue',
26
+ ' file.close',
27
+ 'end'])
28
+ expect(cop.offences).to be_empty
29
+ end
30
+ end