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,37 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::CharacterLiteral do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for character literals' do
9
+ inspect_source(cop, ['x = ?x'])
10
+ expect(cop.offences.size).to eq(1)
11
+ end
12
+
13
+ it 'registers an offence for literals like \n' do
14
+ inspect_source(cop, ['x = ?\n'])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it 'accepts literals like ?\C-\M-d' do
19
+ inspect_source(cop, ['x = ?\C-\M-d'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+
23
+ it 'accepts ? in a %w literal' do
24
+ inspect_source(cop, ['%w{? A}'])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+
28
+ it "auto-corrects ?x to 'x'" do
29
+ new_source = autocorrect_source(cop, 'x = ?x')
30
+ expect(new_source).to eq("x = 'x'")
31
+ end
32
+
33
+ it 'auto-corrects ?\n to "\\n"' do
34
+ new_source = autocorrect_source(cop, 'x = ?\n')
35
+ expect(new_source).to eq('x = "\\n"')
36
+ end
37
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::ClassAndModuleCamelCase do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for underscore in class and module name' do
9
+ inspect_source(cop,
10
+ ['class My_Class',
11
+ 'end',
12
+ '',
13
+ 'module My_Module',
14
+ 'end'
15
+ ])
16
+ expect(cop.offences.size).to eq(2)
17
+ end
18
+
19
+ it 'is not fooled by qualified names' do
20
+ inspect_source(cop,
21
+ ['class Top::My_Class',
22
+ 'end',
23
+ '',
24
+ 'module My_Module::Ala',
25
+ 'end'
26
+ ])
27
+ expect(cop.offences.size).to eq(2)
28
+ end
29
+
30
+ it 'accepts CamelCase names' do
31
+ inspect_source(cop,
32
+ ['class MyClass',
33
+ 'end',
34
+ '',
35
+ 'module Mine',
36
+ 'end'
37
+ ])
38
+ expect(cop.offences).to be_empty
39
+ end
40
+ end
@@ -0,0 +1,131 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::ClassLength, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'Max' => 5, 'CountComments' => false } }
8
+
9
+ it 'rejects a class with more than 5 lines' do
10
+ inspect_source(cop, ['class Test',
11
+ ' a = 1',
12
+ ' a = 2',
13
+ ' a = 3',
14
+ ' a = 4',
15
+ ' a = 5',
16
+ ' a = 6',
17
+ 'end'])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages).to eq(['Class definition is too long. [6/5]'])
20
+ expect(cop.config_to_allow_offences).to eq('Max' => 6)
21
+ end
22
+
23
+ it 'accepts a class with 5 lines' do
24
+ inspect_source(cop, ['class Test',
25
+ ' a = 1',
26
+ ' a = 2',
27
+ ' a = 3',
28
+ ' a = 4',
29
+ ' a = 5',
30
+ 'end'])
31
+ expect(cop.offences).to be_empty
32
+ end
33
+
34
+ it 'accepts a class with less than 5 lines' do
35
+ inspect_source(cop, ['class Test',
36
+ ' a = 1',
37
+ ' a = 2',
38
+ ' a = 3',
39
+ ' a = 4',
40
+ 'end'])
41
+ expect(cop.offences).to be_empty
42
+ end
43
+
44
+ it 'does not count blank lines' do
45
+ inspect_source(cop, ['class Test',
46
+ ' a = 1',
47
+ ' a = 2',
48
+ ' a = 3',
49
+ ' a = 4',
50
+ '',
51
+ '',
52
+ ' a = 7',
53
+ 'end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+
57
+ it 'accepts empty classes' do
58
+ inspect_source(cop, ['class Test',
59
+ 'end'])
60
+ expect(cop.offences).to be_empty
61
+ end
62
+
63
+ context 'when a class has inner classes' do
64
+ it 'does not count lines of inner classes' do
65
+ inspect_source(cop, ['class NamespaceClass',
66
+ ' class TestOne',
67
+ ' a = 1',
68
+ ' a = 2',
69
+ ' a = 3',
70
+ ' a = 4',
71
+ ' a = 5',
72
+ ' end',
73
+ ' class TestTwo',
74
+ ' a = 1',
75
+ ' a = 2',
76
+ ' a = 3',
77
+ ' a = 4',
78
+ ' a = 5',
79
+ ' end',
80
+ ' a = 1',
81
+ ' a = 2',
82
+ ' a = 3',
83
+ ' a = 4',
84
+ ' a = 5',
85
+ 'end'])
86
+ expect(cop.offences).to be_empty
87
+ end
88
+
89
+ it 'rejects a class with 6 lines that belong to the class directly' do
90
+ inspect_source(cop, ['class NamespaceClass',
91
+ ' class TestOne',
92
+ ' a = 1',
93
+ ' a = 2',
94
+ ' a = 3',
95
+ ' a = 4',
96
+ ' a = 5',
97
+ ' end',
98
+ ' class TestTwo',
99
+ ' a = 1',
100
+ ' a = 2',
101
+ ' a = 3',
102
+ ' a = 4',
103
+ ' a = 5',
104
+ ' end',
105
+ ' a = 1',
106
+ ' a = 2',
107
+ ' a = 3',
108
+ ' a = 4',
109
+ ' a = 5',
110
+ ' a = 6',
111
+ 'end'])
112
+ expect(cop.offences.size).to eq(1)
113
+ end
114
+ end
115
+
116
+ context 'when CountComments is enabled' do
117
+ before { cop_config['CountComments'] = true }
118
+
119
+ it 'also counts commented lines' do
120
+ inspect_source(cop, ['class Test',
121
+ ' a = 1',
122
+ ' #a = 2',
123
+ ' a = 3',
124
+ ' #a = 4',
125
+ ' a = 5',
126
+ ' a = 6',
127
+ 'end'])
128
+ expect(cop.offences.size).to eq(1)
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::ClassMethods do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for methods using a class name' do
9
+ inspect_source(cop,
10
+ ['class Test',
11
+ ' def Test.some_method',
12
+ ' do_something',
13
+ ' end',
14
+ 'end'])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+
18
+ it 'registers an offence for methods using a module name' do
19
+ inspect_source(cop,
20
+ ['module Test',
21
+ ' def Test.some_method',
22
+ ' do_something',
23
+ ' end',
24
+ 'end'])
25
+ expect(cop.offences.size).to eq(1)
26
+ end
27
+
28
+ it 'does not register an offence for methods using self' do
29
+ inspect_source(cop,
30
+ ['module Test',
31
+ ' def self.some_method',
32
+ ' do_something',
33
+ ' end',
34
+ 'end'])
35
+ expect(cop.offences).to be_empty
36
+ end
37
+
38
+ it 'does not register an offence outside class/module bodies' do
39
+ inspect_source(cop,
40
+ ['def self.some_method',
41
+ ' do_something',
42
+ 'end'])
43
+ expect(cop.offences).to be_empty
44
+ end
45
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::ClassVars do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for class variable declaration' do
9
+ inspect_source(cop, ['class TestClass; @@test = 10; end'])
10
+ expect(cop.offences.size).to eq(1)
11
+ expect(cop.messages)
12
+ .to eq(['Replace class var @@test with a class instance var.'])
13
+ end
14
+
15
+ it 'does not register an offence for class variable usage' do
16
+ inspect_source(cop, ['@@test.test(20)'])
17
+ expect(cop.offences).to be_empty
18
+ end
19
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::CollectionMethods, :config do
6
+ cop_config = {
7
+ 'PreferredMethods' => {
8
+ 'collect' => 'map',
9
+ 'inject' => 'reduce',
10
+ 'detect' => 'find',
11
+ 'find_all' => 'select'
12
+ }
13
+ }
14
+
15
+ subject(:cop) { described_class.new(config) }
16
+ let(:cop_config) { cop_config }
17
+
18
+ cop_config['PreferredMethods'].each do |method, preferred_method|
19
+ it "registers an offence for #{method} with block" do
20
+ inspect_source(cop, ["[1, 2, 3].#{method} { |e| e + 1 }"])
21
+ expect(cop.offences.size).to eq(1)
22
+ expect(cop.messages)
23
+ .to eq(["Prefer #{preferred_method} over #{method}."])
24
+ end
25
+
26
+ it "registers an offence for #{method} with proc param" do
27
+ inspect_source(cop, ["[1, 2, 3].#{method}(&:test)"])
28
+ expect(cop.offences.size).to eq(1)
29
+ expect(cop.messages)
30
+ .to eq(["Prefer #{preferred_method} over #{method}."])
31
+ end
32
+
33
+ it "accepts #{method} with more than 1 param" do
34
+ inspect_source(cop, ["[1, 2, 3].#{method}(other, &:test)"])
35
+ expect(cop.offences).to be_empty
36
+ end
37
+
38
+ it "accepts #{method} without a block" do
39
+ inspect_source(cop, ["[1, 2, 3].#{method}"])
40
+ expect(cop.offences).to be_empty
41
+ end
42
+
43
+ it 'auto-corrects to preferred method' do
44
+ new_source = autocorrect_source(cop, 'some.collect(&:test)')
45
+ expect(new_source).to eq('some.map(&:test)')
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::ColonMethodCall do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for instance method call' do
9
+ inspect_source(cop,
10
+ ['test::method_name'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'registers an offence for instance method call with arg' do
15
+ inspect_source(cop,
16
+ ['test::method_name(arg)'])
17
+ expect(cop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'registers an offence for class method call' do
21
+ inspect_source(cop,
22
+ ['Class::method_name'])
23
+ expect(cop.offences.size).to eq(1)
24
+ end
25
+
26
+ it 'registers an offence for class method call with arg' do
27
+ inspect_source(cop,
28
+ ['Class::method_name(arg, arg2)'])
29
+ expect(cop.offences.size).to eq(1)
30
+ end
31
+
32
+ it 'does not register an offence for constant access' do
33
+ inspect_source(cop,
34
+ ['Tip::Top::SOME_CONST'])
35
+ expect(cop.offences).to be_empty
36
+ end
37
+
38
+ it 'does not register an offence for nested class' do
39
+ inspect_source(cop,
40
+ ['Tip::Top.some_method'])
41
+ expect(cop.offences).to be_empty
42
+ end
43
+
44
+ it 'does not register an offence for op methods' do
45
+ inspect_source(cop,
46
+ ['Tip::Top.some_method[3]'])
47
+ expect(cop.offences).to be_empty
48
+ end
49
+
50
+ it 'does not register an offence when for constructor methods' do
51
+ inspect_source(cop,
52
+ ['Tip::Top(some_arg)'])
53
+ expect(cop.offences).to be_empty
54
+ end
55
+
56
+ it 'auto-corrects "::" with "."' do
57
+ new_source = autocorrect_source(cop, 'test::method')
58
+ expect(new_source).to eq('test.method')
59
+ end
60
+ end
@@ -0,0 +1,86 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::CommentAnnotation, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) do
8
+ { 'Keywords' => %w(TODO FIXME OPTIMIZE HACK REVIEW) }
9
+ end
10
+
11
+ it 'registers an offence for a missing colon' do
12
+ inspect_source(cop, ['# TODO make better'])
13
+ expect(cop.offences.size).to eq(1)
14
+ end
15
+
16
+ context 'with configured keyword' do
17
+ let(:cop_config) { { 'Keywords' => %w(ISSUE) } }
18
+
19
+ it 'registers an offence for a missing colon after the word' do
20
+ inspect_source(cop, ['# ISSUE wrong order'])
21
+ expect(cop.offences.size).to eq(1)
22
+ end
23
+ end
24
+
25
+ context 'when used with the clang formatter' do
26
+ let(:formatter) { Rubocop::Formatter::ClangStyleFormatter.new(output) }
27
+ let(:output) { StringIO.new }
28
+
29
+ it 'marks the annotation keyword' do
30
+ inspect_source(cop, ['# TODO:make better'])
31
+ formatter.report_file('t', cop.offences)
32
+ expect(output.string).to eq(["t:1:3: C: #{described_class::MSG}",
33
+ '# TODO:make better',
34
+ ' ^^^^^',
35
+ ''].join("\n"))
36
+ end
37
+ end
38
+
39
+ it 'registers an offence for lower case' do
40
+ inspect_source(cop, ['# fixme: does not work'])
41
+ expect(cop.offences.size).to eq(1)
42
+ end
43
+
44
+ it 'registers an offence for capitalized annotation keyword' do
45
+ inspect_source(cop, ['# Optimize: does not work'])
46
+ expect(cop.offences.size).to eq(1)
47
+ end
48
+
49
+ it 'registers an offence for upper case with colon but no note' do
50
+ inspect_source(cop, ['# HACK:'])
51
+ expect(cop.offences.size).to eq(1)
52
+ end
53
+
54
+ it 'accepts upper case keyword with colon, space and note' do
55
+ inspect_source(cop, ['# REVIEW: not sure about this'])
56
+ expect(cop.offences).to be_empty
57
+ end
58
+
59
+ it 'accepts upper case keyword alone' do
60
+ inspect_source(cop, ['# OPTIMIZE'])
61
+ expect(cop.offences).to be_empty
62
+ end
63
+
64
+ it 'accepts a comment that is obviously a code example' do
65
+ inspect_source(cop, ['# Todo.destroy(1)'])
66
+ expect(cop.offences).to be_empty
67
+ end
68
+
69
+ it 'accepts a keyword that is just the beginning of a sentence' do
70
+ inspect_source(cop,
71
+ ["# Optimize if you want. I wouldn't recommend it.",
72
+ '# Hack is a fun game.'])
73
+ expect(cop.offences).to be_empty
74
+ end
75
+
76
+ context 'when a keyword is not in the configuration' do
77
+ let(:cop_config) do
78
+ { 'Keywords' => %w(FIXME OPTIMIZE HACK REVIEW) }
79
+ end
80
+
81
+ it 'accepts the word without colon' do
82
+ inspect_source(cop, ['# TODO make better'])
83
+ expect(cop.offences).to be_empty
84
+ end
85
+ end
86
+ end