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,147 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::MethodLength, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'Max' => 5, 'CountComments' => false } }
8
+
9
+ it 'rejects a method with more than 5 lines' do
10
+ inspect_source(cop, ['def m()',
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.offences.map(&:line).sort).to eq([1])
20
+ expect(cop.config_to_allow_offences).to eq('Max' => 6)
21
+ end
22
+
23
+ it 'accepts a method with less than 5 lines' do
24
+ inspect_source(cop, ['def m()',
25
+ ' a = 1',
26
+ ' a = 2',
27
+ ' a = 3',
28
+ ' a = 4',
29
+ 'end'])
30
+ expect(cop.offences).to be_empty
31
+ end
32
+
33
+ it 'does not count blank lines' do
34
+ inspect_source(cop, ['def m()',
35
+ ' a = 1',
36
+ ' a = 2',
37
+ ' a = 3',
38
+ ' a = 4',
39
+ '',
40
+ '',
41
+ ' a = 7',
42
+ 'end'])
43
+ expect(cop.offences).to be_empty
44
+ end
45
+
46
+ it 'accepts empty methods' do
47
+ inspect_source(cop, ['def m()',
48
+ 'end'])
49
+ expect(cop.offences).to be_empty
50
+ end
51
+
52
+ it 'is not fooled by one-liner methods, syntax #1' do
53
+ inspect_source(cop, ['def one_line; 10 end',
54
+ 'def self.m()',
55
+ ' a = 1',
56
+ ' a = 2',
57
+ ' a = 4',
58
+ ' a = 5',
59
+ ' a = 6',
60
+ 'end'])
61
+ expect(cop.offences).to be_empty
62
+ end
63
+
64
+ it 'is not fooled by one-liner methods, syntax #2' do
65
+ inspect_source(cop, ['def one_line(test) 10 end',
66
+ 'def self.m()',
67
+ ' a = 1',
68
+ ' a = 2',
69
+ ' a = 4',
70
+ ' a = 5',
71
+ ' a = 6',
72
+ 'end'])
73
+ expect(cop.offences).to be_empty
74
+ end
75
+
76
+ it 'checks class methods, syntax #1' do
77
+ inspect_source(cop, ['def self.m()',
78
+ ' a = 1',
79
+ ' a = 2',
80
+ ' a = 3',
81
+ ' a = 4',
82
+ ' a = 5',
83
+ ' a = 6',
84
+ 'end'])
85
+ expect(cop.offences.size).to eq(1)
86
+ expect(cop.offences.map(&:line).sort).to eq([1])
87
+ end
88
+
89
+ it 'checks class methods, syntax #2' do
90
+ inspect_source(cop, ['class K',
91
+ ' class << self',
92
+ ' def m()',
93
+ ' a = 1',
94
+ ' a = 2',
95
+ ' a = 3',
96
+ ' a = 4',
97
+ ' a = 5',
98
+ ' a = 6',
99
+ ' end',
100
+ ' end',
101
+ 'end'])
102
+ expect(cop.offences.size).to eq(1)
103
+ expect(cop.offences.map(&:line).sort).to eq([3])
104
+ end
105
+
106
+ it 'properly counts lines when method ends with block' do
107
+ inspect_source(cop, ['def m()',
108
+ ' something do',
109
+ ' a = 2',
110
+ ' a = 3',
111
+ ' a = 4',
112
+ ' a = 5',
113
+ ' end',
114
+ 'end'])
115
+ expect(cop.offences.size).to eq(1)
116
+ expect(cop.offences.map(&:line).sort).to eq([1])
117
+ end
118
+
119
+ it 'does not count commented lines by default' do
120
+ inspect_source(cop, ['def m()',
121
+ ' a = 1',
122
+ ' #a = 2',
123
+ ' a = 3',
124
+ ' #a = 4',
125
+ ' a = 5',
126
+ ' a = 6',
127
+ 'end'])
128
+ expect(cop.offences).to be_empty
129
+ end
130
+
131
+ context 'when CountComments is enabled' do
132
+ before { cop_config['CountComments'] = true }
133
+
134
+ it 'also counts commented lines' do
135
+ inspect_source(cop, ['def m()',
136
+ ' a = 1',
137
+ ' #a = 2',
138
+ ' a = 3',
139
+ ' #a = 4',
140
+ ' a = 5',
141
+ ' a = 6',
142
+ 'end'])
143
+ expect(cop.offences.size).to eq(1)
144
+ expect(cop.offences.map(&:line).sort).to eq([1])
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,125 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::MethodName, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ shared_examples 'never accepted' do
9
+ it 'registers an offence for mixed snake case and camel case' do
10
+ inspect_source(cop, ['def visit_Arel_Nodes_SelectStatement',
11
+ 'end'])
12
+ expect(cop.offences.size).to eq(1)
13
+ expect(cop.highlights).to eq(['visit_Arel_Nodes_SelectStatement'])
14
+ end
15
+
16
+ it 'registers an offence for capitalized camel case' do
17
+ inspect_source(cop, ['def MyMethod',
18
+ 'end'])
19
+ expect(cop.offences.size).to eq(1)
20
+ expect(cop.highlights).to eq(['MyMethod'])
21
+ end
22
+ end
23
+
24
+ shared_examples 'always accepted' do
25
+ it 'accepts one line methods' do
26
+ inspect_source(cop, "def body; '' end")
27
+ expect(cop.offences).to be_empty
28
+ end
29
+
30
+ it 'accepts operator definitions' do
31
+ inspect_source(cop, ['def +(other)',
32
+ ' # ...',
33
+ 'end'])
34
+ expect(cop.offences).to be_empty
35
+ end
36
+ end
37
+
38
+ context 'when configured for snake_case' do
39
+ let(:cop_config) { { 'EnforcedStyle' => 'snake_case' } }
40
+
41
+ it 'registers an offence for camel case in instance method name' do
42
+ inspect_source(cop, ['def myMethod',
43
+ ' # ...',
44
+ 'end'])
45
+ expect(cop.offences.size).to eq(1)
46
+ expect(cop.highlights).to eq(['myMethod'])
47
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' =>
48
+ 'camelCase')
49
+ end
50
+
51
+ it 'registers an offence for opposite + correct' do
52
+ inspect_source(cop, ['def my_method',
53
+ 'end',
54
+ 'def myMethod',
55
+ 'end'])
56
+ expect(cop.highlights).to eq(['myMethod'])
57
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
58
+ end
59
+
60
+ it 'registers an offence for camel case in singleton method name' do
61
+ inspect_source(cop, ['def self.myMethod',
62
+ ' # ...',
63
+ 'end'])
64
+ expect(cop.offences.size).to eq(1)
65
+ expect(cop.highlights).to eq(['myMethod'])
66
+ end
67
+
68
+ it 'accepts snake case in names' do
69
+ inspect_source(cop, ['def my_method',
70
+ 'end'])
71
+ expect(cop.offences).to be_empty
72
+ end
73
+
74
+ include_examples 'never accepted'
75
+ include_examples 'always accepted'
76
+ end
77
+
78
+ context 'when configured for camelCase' do
79
+ let(:cop_config) { { 'EnforcedStyle' => 'camelCase' } }
80
+
81
+ it 'accepts camel case in instance method name' do
82
+ inspect_source(cop, ['def myMethod',
83
+ ' # ...',
84
+ 'end'])
85
+ expect(cop.offences).to be_empty
86
+ end
87
+
88
+ it 'accepts camel case in singleton method name' do
89
+ inspect_source(cop, ['def self.myMethod',
90
+ ' # ...',
91
+ 'end'])
92
+ expect(cop.offences).to be_empty
93
+ end
94
+
95
+ it 'registers an offence for snake case in names' do
96
+ inspect_source(cop, ['def my_method',
97
+ 'end'])
98
+ expect(cop.offences.size).to eq(1)
99
+ expect(cop.highlights).to eq(['my_method'])
100
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' =>
101
+ 'snake_case')
102
+ end
103
+
104
+ it 'registers an offence for correct + opposite' do
105
+ inspect_source(cop, ['def my_method',
106
+ 'end',
107
+ 'def myMethod',
108
+ 'end'])
109
+ expect(cop.highlights).to eq(['my_method'])
110
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
111
+ end
112
+
113
+ include_examples 'always accepted'
114
+ include_examples 'never accepted'
115
+ end
116
+
117
+ context 'when configured with a bad value' do
118
+ let(:cop_config) { { 'EnforcedStyle' => 'other' } }
119
+
120
+ it 'fails' do
121
+ expect { inspect_source(cop, ['def a', 'end']) }
122
+ .to raise_error(RuntimeError)
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::ModuleFunction do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for extend self in module' do
9
+ inspect_source(cop,
10
+ ['module Test',
11
+ ' extend self',
12
+ ' def test; end',
13
+ 'end'])
14
+ expect(cop.offences.size).to eq(1)
15
+ end
16
+
17
+ it 'accepts extend self in class' do
18
+ inspect_source(cop,
19
+ ['class Test',
20
+ ' extend self',
21
+ 'end'])
22
+ expect(cop.offences).to be_empty
23
+ end
24
+ end
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::MultilineBlockChain do
6
+ subject(:cop) { described_class.new }
7
+
8
+ context 'with multi-line block chaining' do
9
+ it 'registers an offence for a simple case' do
10
+ inspect_source(cop, ['a do',
11
+ ' b',
12
+ 'end.c do',
13
+ ' d',
14
+ 'end'])
15
+ expect(cop.offences.size).to eq(1)
16
+ expect(cop.highlights).to eq(['end.c'])
17
+ end
18
+
19
+ it 'registers an offence for a slightly more complicated case' do
20
+ inspect_source(cop, ['a do',
21
+ ' b',
22
+ 'end.c1.c2 do',
23
+ ' d',
24
+ 'end'])
25
+ expect(cop.offences.size).to eq(1)
26
+ expect(cop.highlights).to eq(['end.c1.c2'])
27
+ end
28
+
29
+ it 'registers two offences for a chain of three blocks' do
30
+ inspect_source(cop, ['a do',
31
+ ' b',
32
+ 'end.c do',
33
+ ' d',
34
+ 'end.e do',
35
+ ' f',
36
+ 'end'])
37
+ expect(cop.offences.size).to eq(2)
38
+ expect(cop.highlights).to eq(['end.c', 'end.e'])
39
+ end
40
+
41
+ it 'registers an offence for a chain where the second block is ' \
42
+ 'single-line' do
43
+ inspect_source(cop, ['Thread.list.find_all { |t|',
44
+ ' t.alive?',
45
+ '}.map { |thread| thread.object_id }'])
46
+ expect(cop.offences.size).to eq(1)
47
+ expect(cop.highlights).to eq(['}.map'])
48
+ end
49
+
50
+ it 'accepts a chain where the first block is single-line' do
51
+ inspect_source(cop,
52
+ ['Thread.list.find_all { |t| t.alive? }.map { |t| ',
53
+ ' t.object_id',
54
+ '}'])
55
+ expect(cop.offences).to be_empty
56
+ end
57
+ end
58
+
59
+ it 'accepts a chain of blocks spanning one line' do
60
+ inspect_source(cop, ['a { b }.c { d }',
61
+ 'w do x end.y do z end'])
62
+ expect(cop.offences).to be_empty
63
+ end
64
+
65
+ it 'accepts a multi-line block chained with calls on one line' do
66
+ inspect_source(cop, ['a do',
67
+ ' b',
68
+ 'end.c.d'])
69
+ expect(cop.offences).to be_empty
70
+ end
71
+
72
+ it 'accepts a chain of calls followed by a multi-line block' do
73
+ inspect_source(cop, ['a1.a2.a3 do',
74
+ ' b',
75
+ 'end'])
76
+ expect(cop.offences).to be_empty
77
+ end
78
+ end
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::MultilineIfThen do
6
+ subject(:cop) { described_class.new }
7
+
8
+ # if
9
+
10
+ it 'registers an offence for then in multiline if' do
11
+ inspect_source(cop, ['if cond then',
12
+ 'end',
13
+ "if cond then\t",
14
+ 'end',
15
+ 'if cond then ',
16
+ 'end',
17
+ 'if cond',
18
+ 'then',
19
+ 'end',
20
+ 'if cond then # bad',
21
+ 'end'])
22
+ expect(cop.offences.map(&:line)).to eq([1, 3, 5, 7, 10])
23
+ end
24
+
25
+ it 'accepts multiline if without then' do
26
+ inspect_source(cop, ['if cond',
27
+ 'end'])
28
+ expect(cop.offences).to be_empty
29
+ end
30
+
31
+ it 'accepts table style if/then/elsif/ends' do
32
+ inspect_source(cop,
33
+ ['if @io == $stdout then str << "$stdout"',
34
+ 'elsif @io == $stdin then str << "$stdin"',
35
+ 'elsif @io == $stderr then str << "$stderr"',
36
+ 'else str << @io.class.to_s',
37
+ 'end'])
38
+ expect(cop.offences).to be_empty
39
+ end
40
+
41
+ it 'does not get confused by a then in a when' do
42
+ inspect_source(cop,
43
+ ['if a',
44
+ ' case b',
45
+ ' when c then',
46
+ ' end',
47
+ 'end'])
48
+ expect(cop.offences).to be_empty
49
+ end
50
+
51
+ it 'does not get confused by a commented-out then' do
52
+ inspect_source(cop,
53
+ ['if a # then',
54
+ ' b',
55
+ 'end',
56
+ 'if c # then',
57
+ 'end'])
58
+ expect(cop.offences).to be_empty
59
+ end
60
+
61
+ it 'does not raise an error for an implicit match if' do
62
+ expect do
63
+ inspect_source(cop,
64
+ ['if //',
65
+ 'end'])
66
+ end.not_to raise_error
67
+ end
68
+
69
+ # unless
70
+
71
+ it 'registers an offence for then in multiline unless' do
72
+ inspect_source(cop, ['unless cond then',
73
+ 'end'])
74
+ expect(cop.messages).to eq(
75
+ ['Never use then for multi-line unless.'])
76
+ end
77
+
78
+ it 'accepts multiline unless without then' do
79
+ inspect_source(cop, ['unless cond',
80
+ 'end'])
81
+ expect(cop.offences).to be_empty
82
+ end
83
+
84
+ it 'does not get confused by a postfix unless' do
85
+ inspect_source(cop,
86
+ ['two unless one'
87
+ ])
88
+ expect(cop.offences).to be_empty
89
+ end
90
+
91
+ it 'does not get confused by a nested postfix unless' do
92
+ inspect_source(cop,
93
+ ['if two',
94
+ ' puts 1',
95
+ 'end unless two'
96
+ ])
97
+ expect(cop.offences).to be_empty
98
+ end
99
+
100
+ it 'does not raise an error for an implicit match unless' do
101
+ expect do
102
+ inspect_source(cop,
103
+ ['unless //',
104
+ 'end'])
105
+ end.not_to raise_error
106
+ end
107
+ end