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,33 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::InvalidCharacterLiteral do
6
+ subject(:cop) { described_class.new }
7
+
8
+ # Is there a way to emit this warning without syntax error?
9
+ #
10
+ # $ ruby -w
11
+ # p(? )
12
+ # -:1: warning: invalid character syntax; use ?\s
13
+ # -:1: syntax error, unexpected '?', expecting ')'
14
+ # p(? )
15
+ # ^
16
+ #
17
+ # https://github.com/ruby/ruby/blob/v2_1_0/parse.y#L7276
18
+ # https://github.com/whitequark/parser/blob/v2.1.2/lib/parser/lexer.rl#L1660
19
+ context 'with a non-escaped whitespace character literal ' do
20
+ let(:source) { 'p(? )' }
21
+
22
+ it 'registers an offence' do
23
+ pending 'Is there a way to emit this warning without syntax errors?'
24
+
25
+ inspect_source(cop, source)
26
+
27
+ expect(cop.offences.size).to eq(1)
28
+ expect(cop.offences.first.message)
29
+ .to eq('Invalid character literal; use ?\s')
30
+ expect(cop.highlights).to eq([' '])
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::LiteralInCondition do
6
+ subject(:cop) { described_class.new }
7
+
8
+ %w(1 2.0 [1] {}).each do |lit|
9
+ it "registers an offence for literal #{lit} in &&" do
10
+ inspect_source(cop,
11
+ ["if x && #{lit}",
12
+ ' top',
13
+ 'end'
14
+ ])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it "registers an offence for literal #{lit} in complex cond" do
19
+ inspect_source(cop,
20
+ ["if x && !(a && #{lit}) && y && z",
21
+ ' top',
22
+ 'end'
23
+ ])
24
+ expect(cop.offences.size).to eq(1)
25
+ end
26
+
27
+ it "registers an offence for literal #{lit} in !" do
28
+ inspect_source(cop,
29
+ ["if !#{lit}",
30
+ ' top',
31
+ 'end'
32
+ ])
33
+ expect(cop.offences.size).to eq(1)
34
+ end
35
+
36
+ it "registers an offence for literal #{lit} in complex !" do
37
+ inspect_source(cop,
38
+ ["if !(x && (y && #{lit}))",
39
+ ' top',
40
+ 'end'
41
+ ])
42
+ expect(cop.offences.size).to eq(1)
43
+ end
44
+
45
+ it "accepts literal #{lit} if it's not an and/or operand" do
46
+ inspect_source(cop,
47
+ ["if test(#{lit})",
48
+ ' top',
49
+ 'end'
50
+ ])
51
+ expect(cop.offences).to be_empty
52
+ end
53
+
54
+ it "accepts literal #{lit} in non-toplevel and/or" do
55
+ inspect_source(cop,
56
+ ["if (a || #{lit}).something",
57
+ ' top',
58
+ 'end'
59
+ ])
60
+ expect(cop.offences).to be_empty
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::Loop do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for begin/end/while' do
9
+ inspect_source(cop, ['begin something; top; end while test'])
10
+ expect(cop.offences.size).to eq(1)
11
+ end
12
+
13
+ it 'registers an offence for begin/end/until' do
14
+ inspect_source(cop, ['begin something; top; end until test'])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it 'accepts normal while' do
19
+ inspect_source(cop, ['while test; one; two; end'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+
23
+ it 'accepts normal until' do
24
+ inspect_source(cop, ['until test; one; two; end'])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::ParenthesesAsGroupedExpression do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for method call with space before the ' \
9
+ 'parenthesis' do
10
+ inspect_source(cop, ['a.func (x)'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'registers an offence for predicate method call with space ' \
15
+ 'before the parenthesis' do
16
+ inspect_source(cop, ['is? (x)'])
17
+ expect(cop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'registers an offence for math expression' do
21
+ inspect_source(cop, ['puts (2 + 3) * 4'])
22
+ expect(cop.offences.size).to eq(1)
23
+ end
24
+
25
+ it 'accepts a method call without arguments' do
26
+ inspect_source(cop, ['func'])
27
+ expect(cop.offences).to be_empty
28
+ end
29
+
30
+ it 'accepts a method call with arguments but no parentheses' do
31
+ inspect_source(cop, ['puts x'])
32
+ expect(cop.offences).to be_empty
33
+ end
34
+
35
+ it 'accepts a chain of method calls' do
36
+ inspect_source(cop, ['a.b',
37
+ 'a.b 1',
38
+ 'a.b(1)'])
39
+ expect(cop.offences).to be_empty
40
+ end
41
+
42
+ it 'accepts method with parens as arg to method without' do
43
+ inspect_source(cop, ['a b(c)'])
44
+ expect(cop.offences).to be_empty
45
+ end
46
+
47
+ it 'accepts an operator call with argument in parentheses' do
48
+ inspect_source(cop, ['a % (b + c)',
49
+ 'a.b = (c == d)'])
50
+ expect(cop.offences).to be_empty
51
+ end
52
+
53
+ it 'accepts a space inside opening paren followed by left paren' do
54
+ inspect_source(cop, ['a( (b) )'])
55
+ expect(cop.offences).to be_empty
56
+ end
57
+ end
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::RequireParentheses do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for missing parentheses around expression with ' \
9
+ '&& operator' do
10
+ inspect_source(cop, ["if day.is? 'monday' && month == :jan",
11
+ ' foo',
12
+ 'end'])
13
+ expect(cop.highlights).to eq(["day.is? 'monday' && month == :jan"])
14
+ expect(cop.messages)
15
+ .to eq(['Use parentheses in the method call to avoid confusion about ' \
16
+ 'precedence.'])
17
+ end
18
+
19
+ it 'registers an offence for missing parentheses around expression with ' \
20
+ '|| operator' do
21
+ inspect_source(cop, "day_is? 'tuesday' || true")
22
+ expect(cop.highlights).to eq(["day_is? 'tuesday' || true"])
23
+ end
24
+
25
+ it 'registers an offence for missing parentheses around expression in ' \
26
+ 'ternary' do
27
+ inspect_source(cop, "wd.include? 'tuesday' && true == true ? a : b")
28
+ expect(cop.highlights).to eq(["wd.include? 'tuesday' && true == true"])
29
+ end
30
+
31
+ it 'accepts missing parentheses around expression with + operator' do
32
+ inspect_source(cop, ["if day_is? 'tuesday' + rest",
33
+ 'end'])
34
+ expect(cop.offences).to be_empty
35
+ end
36
+
37
+ it 'accepts method calls without parentheses followed by keyword and/or' do
38
+ inspect_source(cop, ["if day.is? 'tuesday' and month == :jan",
39
+ 'end',
40
+ "if day.is? 'tuesday' or month == :jan",
41
+ 'end'])
42
+ expect(cop.offences).to be_empty
43
+ end
44
+
45
+ it 'accepts method calls that are all operations' do
46
+ inspect_source(cop, ['if current_level == max + 1',
47
+ 'end'])
48
+ expect(cop.offences).to be_empty
49
+ end
50
+
51
+ it 'accepts condition that is not a call' do
52
+ inspect_source(cop, ['if @debug',
53
+ 'end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+
57
+ it 'accepts parentheses around expression with boolean operator' do
58
+ inspect_source(cop, ["if day.is?('tuesday' && true == true)",
59
+ 'end'])
60
+ expect(cop.offences).to be_empty
61
+ end
62
+
63
+ it 'accepts method call with parentheses in ternary' do
64
+ inspect_source(cop, "wd.include?('tuesday' && true == true) ? a : b")
65
+ expect(cop.offences).to be_empty
66
+ end
67
+
68
+ it 'accepts missing parentheses when method is not a predicate' do
69
+ inspect_source(cop, "weekdays.foo 'tuesday' && true == true")
70
+ expect(cop.offences).to be_empty
71
+ end
72
+
73
+ it 'accepts calls to methods that are setters' do
74
+ inspect_source(cop, 's.version = @version || ">= 1.8.5"')
75
+ expect(cop.offences).to be_empty
76
+ end
77
+
78
+ it 'accepts calls to methods that are operators' do
79
+ inspect_source(cop, 'a[b || c]')
80
+ expect(cop.offences).to be_empty
81
+ end
82
+ end
@@ -0,0 +1,131 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::RescueException do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for rescue from Exception' do
9
+ inspect_source(cop,
10
+ ['begin',
11
+ ' something',
12
+ 'rescue Exception',
13
+ ' #do nothing',
14
+ 'end'])
15
+ expect(cop.offences.size).to eq(1)
16
+ expect(cop.messages)
17
+ .to eq(['Avoid rescuing the Exception class.'])
18
+ end
19
+
20
+ it 'registers an offence for rescue with ::Exception' do
21
+ inspect_source(cop,
22
+ ['begin',
23
+ ' something',
24
+ 'rescue ::Exception',
25
+ ' #do nothing',
26
+ 'end'])
27
+ expect(cop.offences.size).to eq(1)
28
+ expect(cop.messages)
29
+ .to eq(['Avoid rescuing the Exception class.'])
30
+ end
31
+
32
+ it 'registers an offence for rescue with StandardError, Exception' do
33
+ inspect_source(cop,
34
+ ['begin',
35
+ ' something',
36
+ 'rescue StandardError, Exception',
37
+ ' #do nothing',
38
+ 'end'])
39
+ expect(cop.offences.size).to eq(1)
40
+ expect(cop.messages)
41
+ .to eq(['Avoid rescuing the Exception class.'])
42
+ end
43
+
44
+ it 'registers an offence for rescue with Exception => e' do
45
+ inspect_source(cop,
46
+ ['begin',
47
+ ' something',
48
+ 'rescue Exception => e',
49
+ ' #do nothing',
50
+ 'end'])
51
+ expect(cop.offences.size).to eq(1)
52
+ expect(cop.messages)
53
+ .to eq(['Avoid rescuing the Exception class.'])
54
+ end
55
+
56
+ it 'does not register an offence for rescue with no class' do
57
+ inspect_source(cop,
58
+ ['begin',
59
+ ' something',
60
+ ' return',
61
+ 'rescue',
62
+ ' file.close',
63
+ 'end'])
64
+ expect(cop.offences).to be_empty
65
+ end
66
+
67
+ it 'does not register an offence for rescue with no class and => e' do
68
+ inspect_source(cop,
69
+ ['begin',
70
+ ' something',
71
+ ' return',
72
+ 'rescue => e',
73
+ ' file.close',
74
+ 'end'])
75
+ expect(cop.offences).to be_empty
76
+ end
77
+
78
+ it 'does not register an offence for rescue with other class' do
79
+ inspect_source(cop,
80
+ ['begin',
81
+ ' something',
82
+ ' return',
83
+ 'rescue ArgumentError => e',
84
+ ' file.close',
85
+ 'end'])
86
+ expect(cop.offences).to be_empty
87
+ end
88
+
89
+ it 'does not register an offence for rescue with other classes' do
90
+ inspect_source(cop,
91
+ ['begin',
92
+ ' something',
93
+ ' return',
94
+ 'rescue EOFError, ArgumentError => e',
95
+ ' file.close',
96
+ 'end'])
97
+ expect(cop.offences).to be_empty
98
+ end
99
+
100
+ it 'does not register an offence for rescue with a module prefix' do
101
+ inspect_source(cop,
102
+ ['begin',
103
+ ' something',
104
+ ' return',
105
+ 'rescue Test::Exception => e',
106
+ ' file.close',
107
+ 'end'])
108
+ expect(cop.offences).to be_empty
109
+ end
110
+
111
+ it 'does not crash when the splat operator is used in a rescue' do
112
+ inspect_source(cop,
113
+ ['ERRORS = [Exception]',
114
+ 'begin',
115
+ ' a = 3 / 0',
116
+ 'rescue *ERRORS',
117
+ ' puts e',
118
+ 'end'])
119
+ expect(cop.offences).to be_empty
120
+ end
121
+
122
+ it 'does not crash when the namespace of a rescued class is in a local ' \
123
+ 'variable' do
124
+ inspect_source(cop,
125
+ ['adapter = current_adapter',
126
+ 'begin',
127
+ 'rescue adapter::ParseError',
128
+ 'end'])
129
+ expect(cop.offences).to be_empty
130
+ end
131
+ end
@@ -0,0 +1,237 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::ShadowingOuterLocalVariable do
6
+ subject(:cop) { described_class.new }
7
+
8
+ context 'when a block argument has same name ' \
9
+ 'as an outer scope variable' do
10
+ let(:source) do
11
+ [
12
+ 'def some_method',
13
+ ' foo = 1',
14
+ ' puts foo',
15
+ ' 1.times do |foo|',
16
+ ' end',
17
+ 'end'
18
+ ]
19
+ end
20
+
21
+ it 'registers an offence' do
22
+ inspect_source(cop, source)
23
+ expect(cop.offences.size).to eq(1)
24
+ expect(cop.offences.first.message)
25
+ .to include('Shadowing outer local variable - foo')
26
+ expect(cop.offences.first.line).to eq(4)
27
+ end
28
+
29
+ include_examples 'mimics MRI 2.1'
30
+ end
31
+
32
+ context 'when a splat block argument has same name ' \
33
+ 'as an outer scope variable' do
34
+ let(:source) do
35
+ [
36
+ 'def some_method',
37
+ ' foo = 1',
38
+ ' puts foo',
39
+ ' 1.times do |*foo|',
40
+ ' end',
41
+ 'end'
42
+ ]
43
+ end
44
+
45
+ it 'registers an offence' do
46
+ inspect_source(cop, source)
47
+ expect(cop.offences.size).to eq(1)
48
+ expect(cop.offences.first.message)
49
+ .to include('Shadowing outer local variable - foo')
50
+ expect(cop.offences.first.line).to eq(4)
51
+ end
52
+
53
+ include_examples 'mimics MRI 2.1'
54
+ end
55
+
56
+ context 'when a block block argument has same name ' \
57
+ 'as an outer scope variable' do
58
+ let(:source) do
59
+ [
60
+ 'def some_method',
61
+ ' foo = 1',
62
+ ' puts foo',
63
+ ' proc_taking_block = proc do |&foo|',
64
+ ' end',
65
+ ' proc_taking_block.call do',
66
+ ' end',
67
+ 'end'
68
+ ]
69
+ end
70
+
71
+ it 'registers an offence' do
72
+ inspect_source(cop, source)
73
+ expect(cop.offences.size).to eq(1)
74
+ expect(cop.offences.first.message)
75
+ .to include('Shadowing outer local variable - foo')
76
+ expect(cop.offences.first.line).to eq(4)
77
+ end
78
+
79
+ include_examples 'mimics MRI 2.1'
80
+ end
81
+
82
+ context 'when a block local variable has same name ' \
83
+ 'as an outer scope variable' do
84
+ let(:source) do
85
+ [
86
+ 'def some_method',
87
+ ' foo = 1',
88
+ ' puts foo',
89
+ ' 1.times do |i; foo|',
90
+ ' puts foo',
91
+ ' end',
92
+ 'end'
93
+ ]
94
+ end
95
+
96
+ it 'registers an offence' do
97
+ inspect_source(cop, source)
98
+ expect(cop.offences.size).to eq(1)
99
+ expect(cop.offences.first.message)
100
+ .to include('Shadowing outer local variable - foo')
101
+ expect(cop.offences.first.line).to eq(4)
102
+ end
103
+
104
+ include_examples 'mimics MRI 2.1', 'shadowing'
105
+ end
106
+
107
+ context 'when a block argument has different name ' \
108
+ 'with outer scope variables' do
109
+ let(:source) do
110
+ [
111
+ 'def some_method',
112
+ ' foo = 1',
113
+ ' puts foo',
114
+ ' 1.times do |bar|',
115
+ ' end',
116
+ 'end'
117
+ ]
118
+ end
119
+
120
+ include_examples 'accepts'
121
+ include_examples 'mimics MRI 2.1'
122
+ end
123
+
124
+ context 'when an outer scope variable is reassigned in a block' do
125
+ let(:source) do
126
+ [
127
+ 'def some_method',
128
+ ' foo = 1',
129
+ ' puts foo',
130
+ ' 1.times do',
131
+ ' foo = 2',
132
+ ' end',
133
+ 'end'
134
+ ]
135
+ end
136
+
137
+ include_examples 'accepts'
138
+ include_examples 'mimics MRI 2.1'
139
+ end
140
+
141
+ context 'when an outer scope variable is referenced in a block' do
142
+ let(:source) do
143
+ [
144
+ 'def some_method',
145
+ ' foo = 1',
146
+ ' puts foo',
147
+ ' 1.times do',
148
+ ' puts foo',
149
+ ' end',
150
+ 'end'
151
+ ]
152
+ end
153
+
154
+ include_examples 'accepts'
155
+ include_examples 'mimics MRI 2.1'
156
+ end
157
+
158
+ context 'when multiple block arguments have same name "_"' do
159
+ let(:source) do
160
+ [
161
+ 'def some_method',
162
+ ' 1.times do |_, foo, _|',
163
+ ' end',
164
+ 'end'
165
+ ]
166
+ end
167
+
168
+ include_examples 'accepts'
169
+ include_examples 'mimics MRI 2.1'
170
+ end
171
+
172
+ context 'when multiple block arguments have ' \
173
+ 'a same name starts with "_"' do
174
+ let(:source) do
175
+ [
176
+ 'def some_method',
177
+ ' 1.times do |_foo, bar, _foo|',
178
+ ' end',
179
+ 'end'
180
+ ]
181
+ end
182
+
183
+ include_examples 'accepts' unless RUBY_VERSION < '2.0'
184
+ include_examples 'mimics MRI 2.1'
185
+ end
186
+
187
+ context 'when a block argument has same name "_" ' \
188
+ 'as outer scope variable "_"' do
189
+ let(:source) do
190
+ [
191
+ 'def some_method',
192
+ ' _ = 1',
193
+ ' puts _',
194
+ ' 1.times do |_|',
195
+ ' end',
196
+ 'end'
197
+ ]
198
+ end
199
+
200
+ include_examples 'accepts'
201
+ include_examples 'mimics MRI 2.1'
202
+ end
203
+
204
+ context 'when a block argument has a same name starts with "_" ' \
205
+ 'as an outer scope variable' do
206
+ let(:source) do
207
+ [
208
+ 'def some_method',
209
+ ' _foo = 1',
210
+ ' puts _foo',
211
+ ' 1.times do |_foo|',
212
+ ' end',
213
+ 'end'
214
+ ]
215
+ end
216
+
217
+ include_examples 'accepts'
218
+ include_examples 'mimics MRI 2.1'
219
+ end
220
+
221
+ context 'when a method argument has same name ' \
222
+ 'as an outer scope variable' do
223
+ let(:source) do
224
+ [
225
+ 'class SomeClass',
226
+ ' foo = 1',
227
+ ' puts foo',
228
+ ' def some_method(foo)',
229
+ ' end',
230
+ 'end'
231
+ ]
232
+ end
233
+
234
+ include_examples 'accepts'
235
+ include_examples 'mimics MRI 2.1'
236
+ end
237
+ end