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,65 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::ConstantName do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for camel case in const name' do
9
+ inspect_source(cop,
10
+ ['TopCase = 5'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'registers offences for camel case in multiple const assignment' do
15
+ inspect_source(cop,
16
+ ['TopCase, Test2, TEST_3 = 5, 6, 7'])
17
+ expect(cop.offences.size).to eq(2)
18
+ end
19
+
20
+ it 'registers an offence for snake case in const name' do
21
+ inspect_source(cop,
22
+ ['TOP_test = 5'])
23
+ expect(cop.offences.size).to eq(1)
24
+ end
25
+
26
+ it 'allows screaming snake case in const name' do
27
+ inspect_source(cop,
28
+ ['TOP_TEST = 5'])
29
+ expect(cop.offences).to be_empty
30
+ end
31
+
32
+ it 'allows screaming snake case in multiple const assignment' do
33
+ inspect_source(cop,
34
+ ['TOP_TEST, TEST_2 = 5, 6'])
35
+ expect(cop.offences).to be_empty
36
+ end
37
+
38
+ it 'does not check names if rhs is a method call' do
39
+ inspect_source(cop,
40
+ ['AnythingGoes = test'])
41
+ expect(cop.offences).to be_empty
42
+ end
43
+
44
+ it 'does not check names if rhs is a method call with block' do
45
+ inspect_source(cop,
46
+ ['AnythingGoes = test do',
47
+ ' do_something',
48
+ 'end'
49
+ ])
50
+ expect(cop.offences).to be_empty
51
+ end
52
+
53
+ it 'does not check if rhs is another constant' do
54
+ inspect_source(cop,
55
+ ['Parser::CurrentRuby = Parser::Ruby20'])
56
+ expect(cop.offences).to be_empty
57
+ end
58
+
59
+ it 'checks qualified const names' do
60
+ inspect_source(cop,
61
+ ['::AnythingGoes = 30',
62
+ 'a::Bar_foo = 10'])
63
+ expect(cop.offences.size).to eq(2)
64
+ end
65
+ end
@@ -0,0 +1,204 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::CyclomaticComplexity, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'when Max is 1' do
9
+ let(:cop_config) { { 'Max' => 1 } }
10
+
11
+ it 'accepts a method with no decision points' do
12
+ inspect_source(cop, ['def method_name',
13
+ ' call_foo',
14
+ 'end'])
15
+ expect(cop.offences).to be_empty
16
+ end
17
+
18
+ it 'accepts complex code outside of methods' do
19
+ inspect_source(cop,
20
+ ['def method_name',
21
+ ' call_foo',
22
+ 'end',
23
+ '',
24
+ 'if first_condition then',
25
+ ' call_foo if second_condition && third_condition',
26
+ ' call_bar if fourth_condition || fifth_condition',
27
+ 'end'])
28
+ expect(cop.offences).to be_empty
29
+ end
30
+
31
+ it 'registers an offence for an if modifier' do
32
+ inspect_source(cop, ['def self.method_name',
33
+ ' call_foo if some_condition',
34
+ 'end'])
35
+ expect(cop.messages)
36
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
37
+ expect(cop.highlights).to eq(['def'])
38
+ expect(cop.config_to_allow_offences).to eq('Max' => 2)
39
+ end
40
+
41
+ it 'registers an offence for an unless modifier' do
42
+ inspect_source(cop, ['def method_name',
43
+ ' call_foo unless some_condition',
44
+ 'end'])
45
+ expect(cop.messages)
46
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
47
+ end
48
+
49
+ it 'registers an offence for an elsif block' do
50
+ inspect_source(cop, ['def method_name',
51
+ ' if first_condition then',
52
+ ' call_foo',
53
+ ' elsif second_condition then',
54
+ ' call_bar',
55
+ ' else',
56
+ ' call_bam',
57
+ ' end',
58
+ 'end'])
59
+ expect(cop.messages)
60
+ .to eq(['Cyclomatic complexity for method_name is too high. [3/1]'])
61
+ end
62
+
63
+ it 'registers an offence for a ternary operator' do
64
+ inspect_source(cop, ['def method_name',
65
+ ' value = some_condition ? 1 : 2',
66
+ 'end'])
67
+ expect(cop.messages)
68
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
69
+ end
70
+
71
+ it 'registers an offence for a while block' do
72
+ inspect_source(cop, ['def method_name',
73
+ ' while some_condition do',
74
+ ' call_foo',
75
+ ' end',
76
+ 'end'])
77
+ expect(cop.messages)
78
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
79
+ end
80
+
81
+ it 'registers an offence for an until block' do
82
+ inspect_source(cop, ['def method_name',
83
+ ' until some_condition do',
84
+ ' call_foo',
85
+ ' end',
86
+ 'end'])
87
+ expect(cop.messages)
88
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
89
+ end
90
+
91
+ it 'registers an offence for a for block' do
92
+ inspect_source(cop, ['def method_name',
93
+ ' for i in 1..2 do',
94
+ ' call_method',
95
+ ' end',
96
+ 'end'])
97
+ expect(cop.messages)
98
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
99
+ end
100
+
101
+ it 'registers an offence for a rescue block' do
102
+ inspect_source(cop, ['def method_name',
103
+ ' begin',
104
+ ' call_foo',
105
+ ' rescue Exception',
106
+ ' call_bar',
107
+ ' end',
108
+ 'end'])
109
+ expect(cop.messages)
110
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
111
+ end
112
+
113
+ it 'registers an offence for a case/when block' do
114
+ inspect_source(cop, ['def method_name',
115
+ ' case value',
116
+ ' when 1',
117
+ ' call_foo',
118
+ ' when 2',
119
+ ' call_bar',
120
+ ' end',
121
+ 'end'])
122
+ expect(cop.messages)
123
+ .to eq(['Cyclomatic complexity for method_name is too high. [3/1]'])
124
+ end
125
+
126
+ it 'registers an offence for &&' do
127
+ inspect_source(cop, ['def method_name',
128
+ ' call_foo && call_bar',
129
+ 'end'])
130
+ expect(cop.messages)
131
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
132
+ end
133
+
134
+ it 'registers an offence for and' do
135
+ inspect_source(cop, ['def method_name',
136
+ ' call_foo and call_bar',
137
+ 'end'])
138
+ expect(cop.messages)
139
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
140
+ end
141
+
142
+ it 'registers an offence for ||' do
143
+ inspect_source(cop, ['def method_name',
144
+ ' call_foo || call_bar',
145
+ 'end'])
146
+ expect(cop.messages)
147
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
148
+ end
149
+
150
+ it 'registers an offence for or' do
151
+ inspect_source(cop, ['def method_name',
152
+ ' call_foo or call_bar',
153
+ 'end'])
154
+ expect(cop.messages)
155
+ .to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
156
+ end
157
+
158
+ it 'deals with nested if blocks containing && and ||' do
159
+ inspect_source(cop,
160
+ ['def method_name',
161
+ ' if first_condition then',
162
+ ' call_foo if second_condition && third_condition',
163
+ ' call_bar if fourth_condition || fifth_condition',
164
+ ' end',
165
+ 'end'])
166
+ expect(cop.messages)
167
+ .to eq(['Cyclomatic complexity for method_name is too high. [6/1]'])
168
+ end
169
+
170
+ it 'counts only a single method' do
171
+ inspect_source(cop, ['def method_name_1',
172
+ ' call_foo if some_condition',
173
+ 'end',
174
+ '',
175
+ 'def method_name_2',
176
+ ' call_foo if some_condition',
177
+ 'end'])
178
+ expect(cop.messages)
179
+ .to eq(['Cyclomatic complexity for method_name_1 is too high. [2/1]',
180
+ 'Cyclomatic complexity for method_name_2 is too high. [2/1]'])
181
+ end
182
+ end
183
+
184
+ context 'when Max is 2' do
185
+ let(:cop_config) { { 'Max' => 2 } }
186
+
187
+ it 'counts stupid nested if and else blocks' do
188
+ inspect_source(cop, ['def method_name',
189
+ ' if first_condition then',
190
+ ' call_foo',
191
+ ' else',
192
+ ' if second_condition then',
193
+ ' call_bar',
194
+ ' else',
195
+ ' call_bam if third_condition',
196
+ ' end',
197
+ ' call_baz if fourth_condition',
198
+ ' end',
199
+ 'end'])
200
+ expect(cop.messages)
201
+ .to eq(['Cyclomatic complexity for method_name is too high. [5/2]'])
202
+ end
203
+ end
204
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::DefWithParentheses do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for def with empty parens' do
9
+ src = ['def func()',
10
+ 'end']
11
+ inspect_source(cop, src)
12
+ expect(cop.offences.size).to eq(1)
13
+ end
14
+
15
+ it 'reports an offence for class def with empty parens' do
16
+ src = ['def Test.func()',
17
+ 'end']
18
+ inspect_source(cop, src)
19
+ expect(cop.offences.size).to eq(1)
20
+ end
21
+
22
+ it 'accepts def with arg and parens' do
23
+ src = ['def func(a)',
24
+ 'end']
25
+ inspect_source(cop, src)
26
+ expect(cop.offences).to be_empty
27
+ end
28
+
29
+ it 'accepts empty parentheses in one liners' do
30
+ src = ["def to_s() join '/' end"]
31
+ inspect_source(cop, src)
32
+ expect(cop.offences).to be_empty
33
+ end
34
+
35
+ it 'auto-removes unneeded parens' do
36
+ new_source = autocorrect_source(cop, "def test();\nsomething\nend")
37
+ expect(new_source).to eq("def test;\nsomething\nend")
38
+ end
39
+ end
@@ -0,0 +1,123 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::Documentation do
6
+
7
+ subject(:cop) { described_class.new(config) }
8
+ let(:config) do
9
+ Rubocop::Config.new('CommentAnnotation' => {
10
+ 'Keywords' => %w(TODO FIXME OPTIMIZE HACK REVIEW)
11
+ })
12
+ end
13
+
14
+ it 'registers an offence for non-empty class' do
15
+ inspect_source(cop,
16
+ ['class My_Class',
17
+ ' TEST = 20',
18
+ 'end'
19
+ ])
20
+ expect(cop.offences.size).to eq(1)
21
+ end
22
+
23
+ it 'does not consider comment followed by empty line to be class ' \
24
+ 'documentation' do
25
+ inspect_source(cop,
26
+ ['# Copyright 2014',
27
+ '# Some company',
28
+ '',
29
+ 'class My_Class',
30
+ ' TEST = 20',
31
+ 'end'
32
+ ])
33
+ expect(cop.offences.size).to eq(1)
34
+ end
35
+
36
+ it 'registers an offence for non-namespace' do
37
+ inspect_source(cop,
38
+ ['module My_Class',
39
+ ' TEST = 20',
40
+ 'end'
41
+ ])
42
+ expect(cop.offences.size).to eq(1)
43
+ end
44
+
45
+ it 'registers an offence for empty module without documentation' do
46
+ # Because why would you have an empty module? It requires some
47
+ # explanation.
48
+ inspect_source(cop,
49
+ ['module Test',
50
+ 'end'
51
+ ])
52
+ expect(cop.offences.size).to eq(1)
53
+ end
54
+
55
+ it 'accepts non-empty class with documentation' do
56
+ inspect_source(cop,
57
+ ['# class comment',
58
+ 'class My_Class',
59
+ ' TEST = 20',
60
+ 'end'
61
+ ])
62
+ expect(cop.offences).to be_empty
63
+ end
64
+
65
+ it 'registers an offence for non-empty class with annotation comment' do
66
+ inspect_source(cop,
67
+ ['# OPTIMIZE: Make this faster.',
68
+ 'class My_Class',
69
+ ' TEST = 20',
70
+ 'end'
71
+ ])
72
+ expect(cop.offences.size).to eq(1)
73
+ end
74
+
75
+ it 'accepts non-empty module with documentation' do
76
+ inspect_source(cop,
77
+ ['# class comment',
78
+ 'module My_Class',
79
+ ' TEST = 20',
80
+ 'end'
81
+ ])
82
+ expect(cop.offences).to be_empty
83
+ end
84
+
85
+ it 'accepts empty class without documentation' do
86
+ inspect_source(cop,
87
+ ['class My_Class',
88
+ 'end'
89
+ ])
90
+ expect(cop.offences).to be_empty
91
+ end
92
+
93
+ it 'accepts namespace module without documentation' do
94
+ inspect_source(cop,
95
+ ['module Test',
96
+ ' class A; end',
97
+ ' class B; end',
98
+ 'end'
99
+ ])
100
+ expect(cop.offences).to be_empty
101
+ end
102
+
103
+ it 'accepts namespace class without documentation' do
104
+ inspect_source(cop,
105
+ ['class Test',
106
+ ' class A; end',
107
+ ' class B; end',
108
+ 'end'
109
+ ])
110
+ expect(cop.offences).to be_empty
111
+ end
112
+
113
+ it 'does not raise an error for an implicit match conditional' do
114
+ expect do
115
+ inspect_source(cop,
116
+ ['class Test',
117
+ ' if //',
118
+ ' end',
119
+ 'end'
120
+ ])
121
+ end.to_not raise_error
122
+ end
123
+ end
@@ -0,0 +1,94 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::DotPosition, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'Leading dots style' do
9
+ let(:cop_config) { { 'Style' => 'leading' } }
10
+
11
+ it 'registers an offence for trailing dot in multi-line call' do
12
+ inspect_source(cop, ['something.',
13
+ ' method_name'])
14
+ expect(cop.offences.size).to eq(1)
15
+ expect(cop.highlights).to eq(['.'])
16
+ expect(cop.config_to_allow_offences).to eq('Style' => 'trailing')
17
+ end
18
+
19
+ it 'registers an offence for correct + opposite' do
20
+ inspect_source(cop, ['something',
21
+ ' .method_name',
22
+ 'something.',
23
+ ' method_name'])
24
+ expect(cop.offences.size).to eq(1)
25
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
26
+ end
27
+
28
+ it 'accepts leading do in multi-line method call' do
29
+ inspect_source(cop, ['something',
30
+ ' .method_name'])
31
+ expect(cop.offences).to be_empty
32
+ end
33
+
34
+ it 'does not err on method call with no dots' do
35
+ inspect_source(cop, ['puts something'])
36
+ expect(cop.offences).to be_empty
37
+ end
38
+
39
+ it 'does not err on method call without a method name' do
40
+ inspect_source(cop, ['l.', '(1)'])
41
+ expect(cop.offences.size).to eq(1)
42
+ end
43
+
44
+ it 'does not err on method call on same line' do
45
+ inspect_source(cop, ['something.method_name'])
46
+ expect(cop.offences).to be_empty
47
+ end
48
+ end
49
+
50
+ context 'Trailing dots style' do
51
+ let(:cop_config) { { 'Style' => 'trailing' } }
52
+
53
+ it 'registers an offence for leading dot in multi-line call' do
54
+ inspect_source(cop, ['something',
55
+ ' .method_name'])
56
+ expect(cop.messages)
57
+ .to eq(['Place the . on the previous line, together with the method ' \
58
+ 'call receiver.'])
59
+ expect(cop.highlights).to eq(['.'])
60
+ expect(cop.config_to_allow_offences).to eq('Style' => 'leading')
61
+ end
62
+
63
+ it 'accepts trailing dot in multi-line method call' do
64
+ inspect_source(cop, ['something.',
65
+ ' method_name'])
66
+ expect(cop.offences).to be_empty
67
+ end
68
+
69
+ it 'does not err on method call with no dots' do
70
+ inspect_source(cop, ['puts something'])
71
+ expect(cop.offences).to be_empty
72
+ end
73
+
74
+ it 'does not err on method call without a method name' do
75
+ inspect_source(cop, ['l', '.(1)'])
76
+ expect(cop.offences.size).to eq(1)
77
+ end
78
+
79
+ it 'does not err on method call on same line' do
80
+ inspect_source(cop, ['something.method_name'])
81
+ expect(cop.offences).to be_empty
82
+ end
83
+ end
84
+
85
+ context 'Unknown style' do
86
+ let(:cop_config) { { 'Style' => 'test' } }
87
+
88
+ it 'raises an exception' do
89
+ expect do
90
+ inspect_source(cop, ['something.top'])
91
+ end.to raise_error(RuntimeError)
92
+ end
93
+ end
94
+ end