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,222 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::AlignParameters do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for parameters with single indent' do
9
+ inspect_source(cop, ['function(a,',
10
+ ' if b then c else d end)'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.highlights).to eq(['if b then c else d end'])
13
+ end
14
+
15
+ it 'registers an offence for parameters with double indent' do
16
+ inspect_source(cop, ['function(a,',
17
+ ' if b then c else d end)'])
18
+ expect(cop.offences.size).to eq(1)
19
+ end
20
+
21
+ it 'accepts multiline []= method call' do
22
+ inspect_source(cop, ['Test.config["something"] =',
23
+ ' true'])
24
+ expect(cop.offences).to be_empty
25
+ end
26
+
27
+ it 'accepts correctly aligned parameters' do
28
+ inspect_source(cop, ['function(a,',
29
+ ' 0, 1,',
30
+ ' (x + y),',
31
+ ' if b then c else d end)'])
32
+ expect(cop.offences).to be_empty
33
+ end
34
+
35
+ it 'accepts calls that only span one line' do
36
+ inspect_source(cop, ['find(path, s, @special[sexp[0]])'])
37
+ expect(cop.offences).to be_empty
38
+ end
39
+
40
+ it "doesn't get confused by a symbol argument" do
41
+ inspect_source(cop, ['add_offence(index,',
42
+ ' MSG % kind)'])
43
+ expect(cop.offences).to be_empty
44
+ end
45
+
46
+ it "doesn't get confused by splat operator" do
47
+ inspect_source(cop, ['func1(*a,',
48
+ ' *b,',
49
+ ' c)',
50
+ 'func2(a,',
51
+ ' *b,',
52
+ ' c)',
53
+ 'func3(*a)'
54
+ ])
55
+ expect(cop.offences.map(&:to_s))
56
+ .to eq(['C: 5: 6: Align the parameters of a method call if ' \
57
+ 'they span more than one line.'])
58
+ expect(cop.highlights).to eq(['*b'])
59
+ end
60
+
61
+ it "doesn't get confused by extra comma at the end" do
62
+ inspect_source(cop, ['func1(a,',
63
+ ' b,)'])
64
+ expect(cop.offences.map(&:to_s))
65
+ .to eq(['C: 2: 6: Align the parameters of a method call if ' \
66
+ 'they span more than one line.'])
67
+ expect(cop.highlights).to eq(['b'])
68
+ end
69
+
70
+ it 'can handle a correctly aligned string literal as first argument' do
71
+ inspect_source(cop, ['add_offence(x,',
72
+ ' a)'])
73
+ expect(cop.offences).to be_empty
74
+ end
75
+
76
+ it 'can handle a string literal as other argument' do
77
+ inspect_source(cop, ['add_offence(',
78
+ ' "", a)'])
79
+ expect(cop.offences).to be_empty
80
+ end
81
+
82
+ it "doesn't get confused by a line break inside a parameter" do
83
+ inspect_source(cop, ['read(path, { headers: true,',
84
+ ' converters: :numeric })'])
85
+ expect(cop.offences).to be_empty
86
+ end
87
+
88
+ it "doesn't get confused by symbols with embedded expressions" do
89
+ inspect_source(cop, ['send(:"#{name}_comments_path")'])
90
+ expect(cop.offences).to be_empty
91
+ end
92
+
93
+ it "doesn't get confused by regexen with embedded expressions" do
94
+ inspect_source(cop, ['a(/#{name}/)'])
95
+ expect(cop.offences).to be_empty
96
+ end
97
+
98
+ it 'accepts braceless hashes' do
99
+ inspect_source(cop, ['run(collection, :entry_name => label,',
100
+ ' :paginator => paginator)'])
101
+ expect(cop.offences).to be_empty
102
+ end
103
+
104
+ it 'accepts the first parameter being on a new row' do
105
+ inspect_source(cop, [' match(',
106
+ ' a,',
107
+ ' b',
108
+ ' )'])
109
+ expect(cop.offences).to be_empty
110
+ end
111
+
112
+ it 'can handle heredoc strings' do
113
+ inspect_source(cop, ['class_eval(<<-EOS, __FILE__, __LINE__ + 1)',
114
+ ' def run_#{name}_callbacks(*args)',
115
+ ' a = 1',
116
+ ' return value',
117
+ ' end',
118
+ ' EOS'])
119
+ expect(cop.offences).to be_empty
120
+ end
121
+
122
+ it 'can handle a method call within a method call' do
123
+ inspect_source(cop, ['a(a1,',
124
+ ' b(b1,',
125
+ ' b2),',
126
+ ' a2)'])
127
+ expect(cop.offences).to be_empty
128
+ end
129
+
130
+ it 'can handle a call embedded in a string' do
131
+ inspect_source(cop, ['model("#{index(name)}", child)'])
132
+ expect(cop.offences).to be_empty
133
+ end
134
+
135
+ it 'can handle do-end' do
136
+ inspect_source(cop, [' run(lambda do |e|',
137
+ " w = e['warden']",
138
+ ' end)'])
139
+ expect(cop.offences).to be_empty
140
+ end
141
+
142
+ it 'can handle a call with a block inside another call' do
143
+ src = ['new(table_name,',
144
+ ' exec_query("info(\'#{row[\'name\']}\')").map { |col|',
145
+ " col['name']",
146
+ ' })']
147
+ inspect_source(cop, src)
148
+ expect(cop.offences).to be_empty
149
+ end
150
+
151
+ it 'can handle a ternary condition with a block reference' do
152
+ inspect_source(cop, ['cond ? a : func(&b)'])
153
+ expect(cop.offences).to be_empty
154
+ end
155
+
156
+ it 'can handle parentheses used with no parameters' do
157
+ inspect_source(cop, ['func()'])
158
+ expect(cop.offences).to be_empty
159
+ end
160
+
161
+ it 'can handle a multiline hash as second parameter' do
162
+ inspect_source(cop, ['tag(:input, {',
163
+ ' :value => value',
164
+ '})'])
165
+ expect(cop.offences).to be_empty
166
+ end
167
+
168
+ it 'can handle method calls without parentheses' do
169
+ inspect_source(cop, ['a(b c, d)'])
170
+ expect(cop.offences).to be_empty
171
+ end
172
+
173
+ it 'can handle other method calls without parentheses' do
174
+ src = ['chars(Unicode.apply_mapping @wrapped_string, :uppercase)']
175
+ inspect_source(cop, src)
176
+ expect(cop.offences).to be_empty
177
+ end
178
+
179
+ it 'auto-corrects alignment' do
180
+ new_source = autocorrect_source(cop, ['func(a,',
181
+ ' b,',
182
+ 'c)'])
183
+ expect(new_source).to eq(['func(a,',
184
+ ' b,',
185
+ ' c)'].join("\n"))
186
+ end
187
+
188
+ it 'auto-corrects each line of a multi-line parameter to the right' do
189
+ new_source =
190
+ autocorrect_source(cop,
191
+ ['create :transaction, :closed,',
192
+ ' account: account,',
193
+ ' open_price: 1.29,',
194
+ ' close_price: 1.30'])
195
+ expect(new_source)
196
+ .to eq(['create :transaction, :closed,',
197
+ ' account: account,',
198
+ ' open_price: 1.29,',
199
+ ' close_price: 1.30'].join("\n"))
200
+ end
201
+
202
+ it 'auto-corrects each line of a multi-line parameter to the left' do
203
+ new_source =
204
+ autocorrect_source(cop,
205
+ ['create :transaction, :closed,',
206
+ ' account: account,',
207
+ ' open_price: 1.29,',
208
+ ' close_price: 1.30'])
209
+ expect(new_source)
210
+ .to eq(['create :transaction, :closed,',
211
+ ' account: account,',
212
+ ' open_price: 1.29,',
213
+ ' close_price: 1.30'].join("\n"))
214
+ end
215
+
216
+ it 'auto-corrects only parameters that begin a line' do
217
+ original_source = ['foo(:bar, {',
218
+ ' whiz: 2, bang: 3 }, option: 3)']
219
+ new_source = autocorrect_source(cop, original_source)
220
+ expect(new_source).to eq(original_source.join("\n"))
221
+ end
222
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::AndOr do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for OR' do
9
+ inspect_source(cop,
10
+ ['test if a or b'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages).to eq(['Use || instead of or.'])
13
+ end
14
+
15
+ it 'registers an offence for AND' do
16
+ inspect_source(cop,
17
+ ['test if a and b'])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages).to eq(['Use && instead of and.'])
20
+ end
21
+
22
+ it 'accepts ||' do
23
+ inspect_source(cop,
24
+ ['test if a || b'])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+
28
+ it 'accepts &&' do
29
+ inspect_source(cop,
30
+ ['test if a && b'])
31
+ expect(cop.offences).to be_empty
32
+ end
33
+
34
+ it 'auto-corrects "and" with &&' do
35
+ new_source = autocorrect_source(cop, 'true and false')
36
+ expect(new_source).to eq('true && false')
37
+ end
38
+
39
+ it 'auto-corrects "or" with ||' do
40
+ new_source = autocorrect_source(cop, ['x = 12345',
41
+ 'true or false'])
42
+ expect(new_source).to eq(['x = 12345',
43
+ 'true || false'].join("\n"))
44
+ end
45
+
46
+ it 'leaves *or* as is if auto-correction changes the meaning' do
47
+ src = "teststring.include? 'a' or teststring.include? 'b'"
48
+ new_source = autocorrect_source(cop, src)
49
+ expect(new_source).to eq(src)
50
+ end
51
+
52
+ it 'leaves *and* as is if auto-correction changes the meaning' do
53
+ src = 'x = a + b and return x'
54
+ new_source = autocorrect_source(cop, src)
55
+ expect(new_source).to eq(src)
56
+ end
57
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::AsciiComments do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for a comment with non-ascii chars' do
9
+ inspect_source(cop,
10
+ ['# encoding: utf-8',
11
+ '# 这是什么?'])
12
+ expect(cop.offences.size).to eq(1)
13
+ expect(cop.messages)
14
+ .to eq(['Use only ascii symbols in comments.'])
15
+ end
16
+
17
+ it 'accepts comments with only ascii chars' do
18
+ inspect_source(cop,
19
+ ['# AZaz1@$%~,;*_`|'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+ end
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::AsciiIdentifiers do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for a variable name with non-ascii chars' do
9
+ inspect_source(cop,
10
+ ['# encoding: utf-8',
11
+ 'älg = 1'])
12
+ expect(cop.offences.size).to eq(1)
13
+ expect(cop.messages)
14
+ .to eq(['Use only ascii symbols in identifiers.'])
15
+ end
16
+
17
+ it 'accepts identifiers with only ascii chars' do
18
+ inspect_source(cop,
19
+ ['x.empty?'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+
23
+ it 'does not get confused by a byte order mark' do
24
+ bom = "\xef\xbb\xbf"
25
+ inspect_source(cop,
26
+ [bom + '# encoding: utf-8',
27
+ "puts 'foo'"])
28
+ expect(cop.offences).to be_empty
29
+ end
30
+
31
+ it 'does not get confused by an empty file' do
32
+ inspect_source(cop,
33
+ [''])
34
+ expect(cop.offences).to be_empty
35
+ end
36
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::Attr do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence attr' do
9
+ inspect_source(cop, ['class SomeClass',
10
+ ' attr :name',
11
+ 'end'])
12
+ expect(cop.offences.size).to eq(1)
13
+ end
14
+
15
+ it 'auto-corrects attr to attr_reader' do
16
+ new_source = autocorrect_source(cop, 'attr')
17
+ expect(new_source).to eq('attr_reader')
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::BeginBlock do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for a BEGIN block' do
9
+ src = ['BEGIN { test }']
10
+ inspect_source(cop, src)
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::BlockComments do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for block comments' do
9
+ inspect_source(cop,
10
+ ['=begin',
11
+ 'comment',
12
+ '=end'])
13
+ expect(cop.offences.size).to eq(1)
14
+ end
15
+
16
+ it 'accepts regular comments' do
17
+ inspect_source(cop,
18
+ ['# comment'])
19
+ expect(cop.offences).to be_empty
20
+ end
21
+ end
@@ -0,0 +1,156 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::BlockNesting, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'Max' => 2 } }
8
+
9
+ it 'accepts `Max` levels of nesting' do
10
+ source = ['if a',
11
+ ' if b',
12
+ ' puts b',
13
+ ' end',
14
+ 'end']
15
+ expect_nesting_offences(source, [])
16
+ end
17
+
18
+ it 'registers an offence for `Max + 1` levels of `if` nesting' do
19
+ source = ['if a',
20
+ ' if b',
21
+ ' if c',
22
+ ' puts c',
23
+ ' end',
24
+ ' end',
25
+ 'end']
26
+ expect_nesting_offences(source, [3])
27
+ end
28
+
29
+ it 'registers a single offence for `Max + 2` levels of `if` nesting' do
30
+ source = ['if a',
31
+ ' if b',
32
+ ' if c',
33
+ ' if d',
34
+ ' puts d',
35
+ ' end',
36
+ ' end',
37
+ ' end',
38
+ 'end']
39
+ expect_nesting_offences(source, [3])
40
+ end
41
+
42
+ it 'registers 2 offences' do
43
+ source = ['if a',
44
+ ' if b',
45
+ ' if c',
46
+ ' puts c',
47
+ ' end',
48
+ ' end',
49
+ ' if d',
50
+ ' if e',
51
+ ' puts e',
52
+ ' end',
53
+ ' end',
54
+ 'end']
55
+ expect_nesting_offences(source, [3, 8])
56
+ end
57
+
58
+ it 'registers an offence for nested `case`' do
59
+ source = ['if a',
60
+ ' if b',
61
+ ' case c',
62
+ ' when C',
63
+ ' puts C',
64
+ ' end',
65
+ ' end',
66
+ 'end']
67
+ expect_nesting_offences(source, [3])
68
+ end
69
+
70
+ it 'registers an offence for nested `while`' do
71
+ source = ['if a',
72
+ ' if b',
73
+ ' while c',
74
+ ' puts c',
75
+ ' end',
76
+ ' end',
77
+ 'end']
78
+ expect_nesting_offences(source, [3])
79
+ end
80
+
81
+ it 'registers an offence for nested modifier `while`' do
82
+ source = ['if a',
83
+ ' if b',
84
+ ' begin',
85
+ ' puts c',
86
+ ' end while c',
87
+ ' end',
88
+ 'end']
89
+ expect_nesting_offences(source, [3])
90
+ end
91
+
92
+ it 'registers an offence for nested `until`' do
93
+ source = ['if a',
94
+ ' if b',
95
+ ' until c',
96
+ ' puts c',
97
+ ' end',
98
+ ' end',
99
+ 'end']
100
+ expect_nesting_offences(source, [3])
101
+ end
102
+
103
+ it 'registers an offence for nested modifier `until`' do
104
+ source = ['if a',
105
+ ' if b',
106
+ ' begin',
107
+ ' puts c',
108
+ ' end until c',
109
+ ' end',
110
+ 'end']
111
+ expect_nesting_offences(source, [3])
112
+ end
113
+
114
+ it 'registers an offence for nested `for`' do
115
+ source = ['if a',
116
+ ' if b',
117
+ ' for c in [1,2] do',
118
+ ' puts c',
119
+ ' end',
120
+ ' end',
121
+ 'end']
122
+ expect_nesting_offences(source, [3])
123
+ end
124
+
125
+ it 'registers an offence for nested `rescue`' do
126
+ source = ['if a',
127
+ ' if b',
128
+ ' begin',
129
+ ' puts c',
130
+ ' rescue',
131
+ ' puts x',
132
+ ' end',
133
+ ' end',
134
+ 'end']
135
+ expect_nesting_offences(source, [5])
136
+ end
137
+
138
+ it 'accepts if/elsif' do
139
+ source = ['if a',
140
+ 'elsif b',
141
+ 'elsif c',
142
+ 'elsif d',
143
+ 'end']
144
+ expect_nesting_offences(source, [])
145
+ end
146
+
147
+ def expect_nesting_offences(source, lines, used_nesting_level = 3)
148
+ inspect_source(cop, source)
149
+ expect(cop.offences.map(&:line)).to eq(lines)
150
+ expect(cop.messages).to eq(
151
+ ['Avoid more than 2 levels of block nesting.'] * lines.length)
152
+ if cop.offences.size > 0
153
+ expect(cop.config_to_allow_offences['Max']).to eq(used_nesting_level)
154
+ end
155
+ end
156
+ end