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,30 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::UselessComparison do
6
+ subject(:cop) { described_class.new }
7
+
8
+ described_class::OPS.each do |op|
9
+ it "registers an offence for a simple comparison with #{op}" do
10
+ inspect_source(cop,
11
+ ["5 #{op} 5",
12
+ "a #{op} a"
13
+ ])
14
+ expect(cop.offences.size).to eq(2)
15
+ end
16
+
17
+ it "registers an offence for a complex comparison with #{op}" do
18
+ inspect_source(cop,
19
+ ["5 + 10 * 30 #{op} 5 + 10 * 30",
20
+ "a.top(x) #{op} a.top(x)"
21
+ ])
22
+ expect(cop.offences.size).to eq(2)
23
+ end
24
+ end
25
+
26
+ it 'works with lambda.()' do
27
+ inspect_source(cop, ['a.(x) > a.(x)'])
28
+ expect(cop.offences.size).to eq(1)
29
+ end
30
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::UselessElseWithoutRescue do
6
+ subject(:cop) { described_class.new }
7
+
8
+ before do
9
+ inspect_source(cop, source)
10
+ end
11
+
12
+ context 'with `else` without `rescue`' do
13
+ let(:source) do
14
+ [
15
+ 'begin',
16
+ ' do_something',
17
+ 'else',
18
+ ' handle_unknown_errors',
19
+ 'end'
20
+ ]
21
+ end
22
+
23
+ it 'registers an offence' do
24
+ expect(cop.offences.size).to eq(1)
25
+ expect(cop.offences.first.message)
26
+ .to eq('Else without rescue is useless')
27
+ expect(cop.highlights).to eq(['else'])
28
+ end
29
+ end
30
+
31
+ context 'with `else` with `rescue`' do
32
+ let(:source) do
33
+ [
34
+ 'begin',
35
+ ' do_something',
36
+ 'rescue ArgumentError',
37
+ ' handle_argument_error',
38
+ 'else',
39
+ ' handle_unknown_errors',
40
+ 'end'
41
+ ]
42
+ end
43
+
44
+ it 'accepts' do
45
+ expect(cop.offences).to be_empty
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,149 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::UselessSetterCall do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for def ending with lvar attr assignment' do
9
+ inspect_source(cop,
10
+ ['def test',
11
+ ' top = Top.new',
12
+ ' top.attr = 5',
13
+ 'end'
14
+ ])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it 'registers an offence for defs ending with lvar attr assignment' do
19
+ inspect_source(cop,
20
+ ['def Top.test',
21
+ ' top = Top.new',
22
+ ' top.attr = 5',
23
+ 'end'
24
+ ])
25
+ expect(cop.offences.size).to eq(1)
26
+ end
27
+
28
+ it 'accepts def ending with ivar assignment' do
29
+ inspect_source(cop,
30
+ ['def test',
31
+ ' something',
32
+ ' @top = 5',
33
+ 'end'
34
+ ])
35
+ expect(cop.offences).to be_empty
36
+ end
37
+
38
+ it 'accepts def ending ivar attr assignment' do
39
+ inspect_source(cop,
40
+ ['def test',
41
+ ' something',
42
+ ' @top.attr = 5',
43
+ 'end'
44
+ ])
45
+ expect(cop.offences).to be_empty
46
+ end
47
+
48
+ it 'accepts def ending with argument attr assignment' do
49
+ inspect_source(cop,
50
+ ['def test(some_arg)',
51
+ ' unrelated_local_variable = Top.new',
52
+ ' some_arg.attr = 5',
53
+ 'end'
54
+ ])
55
+ expect(cop.offences).to be_empty
56
+ end
57
+
58
+ context 'when a lvar has an object passed as argument ' \
59
+ 'at the end of the method' do
60
+ it 'accepts the lvar attr assignment' do
61
+ inspect_source(cop,
62
+ ['def test(some_arg)',
63
+ ' @some_ivar = some_arg',
64
+ ' @some_ivar.do_something',
65
+ ' some_lvar = @some_ivar',
66
+ ' some_lvar.do_something',
67
+ ' some_lvar.attr = 5',
68
+ 'end'
69
+ ])
70
+ expect(cop.offences).to be_empty
71
+ end
72
+ end
73
+
74
+ context 'when a lvar has an object passed as argument ' \
75
+ 'by multiple-assignment at the end of the method' do
76
+ it 'accepts the lvar attr assignment' do
77
+ inspect_source(cop,
78
+ ['def test(some_arg)',
79
+ ' _first, some_lvar, _third = 1, some_arg, 3',
80
+ ' some_lvar.attr = 5',
81
+ 'end'
82
+ ])
83
+ expect(cop.offences).to be_empty
84
+ end
85
+ end
86
+
87
+ context 'when a lvar does not have any object passed as argument ' \
88
+ 'with multiple-assignment at the end of the method' do
89
+ it 'registers an offence' do
90
+ inspect_source(cop,
91
+ ['def test(some_arg)',
92
+ ' _first, some_lvar, _third = do_something',
93
+ ' some_lvar.attr = 5',
94
+ 'end'
95
+ ])
96
+ expect(cop.offences.size).to eq(1)
97
+ end
98
+ end
99
+
100
+ context 'when a lvar possibly has an object passed as argument ' \
101
+ 'by logical-operator-assignment at the end of the method' do
102
+ it 'accepts the lvar attr assignment' do
103
+ inspect_source(cop,
104
+ ['def test(some_arg)',
105
+ ' some_lvar = nil',
106
+ ' some_lvar ||= some_arg',
107
+ ' some_lvar.attr = 5',
108
+ 'end'
109
+ ])
110
+ expect(cop.offences).to be_empty
111
+ end
112
+ end
113
+
114
+ context 'when a lvar does not have any object passed as argument ' \
115
+ 'by binary-operator-assignment at the end of the method' do
116
+ it 'registers an offence' do
117
+ inspect_source(cop,
118
+ ['def test(some_arg)',
119
+ ' some_lvar = some_arg',
120
+ ' some_lvar += some_arg',
121
+ ' some_lvar.attr = 5',
122
+ 'end'
123
+ ])
124
+ expect(cop.offences.size).to eq(1)
125
+ end
126
+ end
127
+
128
+ context 'when a lvar declared as an argument ' \
129
+ 'is no longer the passed object at the end of the method' do
130
+ it 'registers an offence for the lvar attr assignment' do
131
+ inspect_source(cop,
132
+ ['def test(some_arg)',
133
+ ' some_arg = Top.new',
134
+ ' some_arg.attr = 5',
135
+ 'end'
136
+ ])
137
+ expect(cop.offences.size).to eq(1)
138
+ end
139
+ end
140
+
141
+ it 'is not confused by operators ending with =' do
142
+ inspect_source(cop,
143
+ ['def test',
144
+ ' top.attr == 5',
145
+ 'end'
146
+ ])
147
+ expect(cop.offences).to be_empty
148
+ end
149
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Lint::Void do
6
+ subject(:cop) { described_class.new }
7
+
8
+ described_class::OPS.each do |op|
9
+ it "registers an offence for void op #{op} if not on last line" do
10
+ inspect_source(cop,
11
+ ["a #{op} b",
12
+ "a #{op} b",
13
+ "a #{op} b"
14
+ ])
15
+ expect(cop.offences.size).to eq(2)
16
+ end
17
+ end
18
+
19
+ described_class::OPS.each do |op|
20
+ it "accepts void op #{op} if on last line" do
21
+ inspect_source(cop,
22
+ ['something',
23
+ "a #{op} b"
24
+ ])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+ end
28
+
29
+ described_class::OPS.each do |op|
30
+ it "accepts void op #{op} by itself without a begin block" do
31
+ inspect_source(cop, ["a #{op} b"])
32
+ expect(cop.offences).to be_empty
33
+ end
34
+ end
35
+
36
+ %w(var @var @@var VAR).each do |var|
37
+ it "registers an offence for void var #{var} if not on last line" do
38
+ inspect_source(cop,
39
+ ["#{var} = 5",
40
+ "#{var}",
41
+ 'top'
42
+ ])
43
+ expect(cop.offences.size).to eq(1)
44
+ end
45
+ end
46
+
47
+ %w(1 2.0 /test/ [1] {}).each do |lit|
48
+ it "registers an offence for void lit #{lit} if not on last line" do
49
+ inspect_source(cop,
50
+ ["#{lit}",
51
+ 'top'
52
+ ])
53
+ expect(cop.offences.size).to eq(1)
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,133 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Offence do
6
+ let(:location) do
7
+ source_buffer = Parser::Source::Buffer.new('test', 1)
8
+ source_buffer.source = "a\n"
9
+ Parser::Source::Range.new(source_buffer, 0, 1)
10
+ end
11
+ subject(:offence) do
12
+ described_class.new(:convention, location, 'message', 'CopName', true)
13
+ end
14
+
15
+ it 'has a few required attributes' do
16
+ expect(offence.severity).to eq(:convention)
17
+ expect(offence.line).to eq(1)
18
+ expect(offence.message).to eq('message')
19
+ expect(offence.cop_name).to eq('CopName')
20
+ expect(offence.corrected?).to be_true
21
+ end
22
+
23
+ it 'overrides #to_s' do
24
+ expect(offence.to_s).to eq('C: 1: 1: message')
25
+ end
26
+
27
+ it 'does not blow up if a message contains %' do
28
+ offence = described_class.new(:convention, location, 'message % test',
29
+ 'CopName')
30
+
31
+ expect(offence.to_s).to eq('C: 1: 1: message % test')
32
+ end
33
+
34
+ it 'redefines == to compare offences based on their contents' do
35
+ o1 = described_class.new(:convention, location, 'message', 'CopName')
36
+ o2 = described_class.new(:convention, location, 'message', 'CopName')
37
+
38
+ expect(o1 == o2).to be_true
39
+ end
40
+
41
+ it 'is frozen' do
42
+ expect(offence).to be_frozen
43
+ end
44
+
45
+ [:severity, :location, :line, :column, :message, :cop_name].each do |a|
46
+ describe "##{a}" do
47
+ it 'is frozen' do
48
+ expect(offence.send(a)).to be_frozen
49
+ end
50
+ end
51
+ end
52
+
53
+ context 'when unknown severity is passed' do
54
+ it 'raises error' do
55
+ expect do
56
+ described_class.new(:foobar, location, 'message', 'CopName')
57
+ end.to raise_error(ArgumentError)
58
+ end
59
+ end
60
+
61
+ describe '#severity_level' do
62
+ subject(:severity_level) do
63
+ described_class.new(severity, location, 'message', 'CopName')
64
+ .severity_level
65
+ end
66
+
67
+ context 'when severity is :refactor' do
68
+ let(:severity) { :refactor }
69
+ it 'is 1' do
70
+ expect(severity_level).to eq(1)
71
+ end
72
+ end
73
+
74
+ context 'when severity is :fatal' do
75
+ let(:severity) { :fatal }
76
+ it 'is 5' do
77
+ expect(severity_level).to eq(5)
78
+ end
79
+ end
80
+ end
81
+
82
+ describe '#<=>' do
83
+ def offence(hash = {})
84
+ attrs = {
85
+ sev: :convention,
86
+ line: 5,
87
+ col: 5,
88
+ mes: 'message',
89
+ cop: 'CopName'
90
+ }.merge(hash)
91
+
92
+ described_class.new(
93
+ attrs[:sev],
94
+ location(attrs[:line], attrs[:col],
95
+ %w(aaaaaa bbbbbb cccccc dddddd eeeeee ffffff)),
96
+ attrs[:mes],
97
+ attrs[:cop]
98
+ )
99
+ end
100
+
101
+ def location(line, column, source)
102
+ source_buffer = Parser::Source::Buffer.new('test', 1)
103
+ source_buffer.source = source.join("\n")
104
+ begin_pos = source[0...(line - 1)].reduce(0) do |a, e|
105
+ a + e.length + "\n".length
106
+ end + column
107
+ Parser::Source::Range.new(source_buffer, begin_pos, begin_pos + 1)
108
+ end
109
+
110
+ # We want a nice table layout, so we allow space inside empty hashes.
111
+ # rubocop:disable SpaceInsideHashLiteralBraces
112
+ [
113
+ [{ }, { }, 0],
114
+
115
+ [{ line: 6 }, { line: 5 }, 1],
116
+
117
+ [{ line: 5, col: 6 }, { line: 5, col: 5 }, 1],
118
+ [{ line: 6, col: 4 }, { line: 5, col: 5 }, 1],
119
+
120
+ [{ cop: 'B' }, { cop: 'A' }, 1],
121
+ [{ line: 6, cop: 'A' }, { line: 5, cop: 'B' }, 1],
122
+ [{ col: 6, cop: 'A' }, { col: 5, cop: 'B' }, 1]
123
+ ].each do |one, other, expectation|
124
+ context "when receiver has #{one} and other has #{other}" do
125
+ it "returns #{expectation}" do
126
+ an_offence = offence(one)
127
+ other_offence = offence(other)
128
+ expect(an_offence <=> other_offence).to eq(expectation)
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Rails::DefaultScope do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for default scope with a lambda arg' do
9
+ inspect_source(cop,
10
+ ['default_scope -> { something }'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'registers an offence for default scope with a proc arg' do
15
+ inspect_source(cop,
16
+ ['default_scope proc { something }'])
17
+ expect(cop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'registers an offence for default scope with a proc(Proc.new) arg' do
21
+ inspect_source(cop,
22
+ ['default_scope Proc.new { something }'])
23
+ expect(cop.offences.size).to eq(1)
24
+ end
25
+
26
+ it 'registers an offence for non blocks' do
27
+ inspect_source(cop,
28
+ ['default_scope order: "position"'])
29
+ expect(cop.offences.size).to eq(1)
30
+ end
31
+
32
+ it 'accepts a block arg' do
33
+ inspect_source(cop,
34
+ ['default_scope { something }'])
35
+ expect(cop.offences).to be_empty
36
+ end
37
+ end