rubocop 0.29.1 → 0.30.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubocop might be problematic. Click here for more details.

Files changed (341) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +73 -1
  3. data/README.md +11 -2
  4. data/config/default.yml +194 -6
  5. data/config/disabled.yml +25 -1
  6. data/config/enabled.yml +74 -12
  7. data/lib/rubocop.rb +19 -2
  8. data/lib/rubocop/config.rb +23 -3
  9. data/lib/rubocop/config_loader.rb +9 -1
  10. data/lib/rubocop/cop/autocorrect_logic.rb +26 -0
  11. data/lib/rubocop/cop/cop.rb +33 -17
  12. data/lib/rubocop/cop/lint/assignment_in_condition.rb +16 -4
  13. data/lib/rubocop/cop/lint/block_alignment.rb +5 -14
  14. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  15. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +61 -0
  16. data/lib/rubocop/cop/lint/void.rb +11 -3
  17. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +17 -0
  18. data/lib/rubocop/cop/performance/detect.rb +72 -0
  19. data/lib/rubocop/cop/performance/flat_map.rb +64 -0
  20. data/lib/rubocop/cop/performance/reverse_each.rb +43 -0
  21. data/lib/rubocop/cop/performance/sample.rb +58 -0
  22. data/lib/rubocop/cop/performance/size.rb +64 -0
  23. data/lib/rubocop/cop/rails/date.rb +121 -0
  24. data/lib/rubocop/cop/rails/find_by.rb +52 -0
  25. data/lib/rubocop/cop/rails/find_each.rb +41 -0
  26. data/lib/rubocop/cop/rails/time_zone.rb +93 -0
  27. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +45 -0
  28. data/lib/rubocop/cop/style/block_delimiters.rb +186 -0
  29. data/lib/rubocop/cop/style/closing_parenthesis_indentation.rb +76 -0
  30. data/lib/rubocop/cop/style/command_literal.rb +120 -0
  31. data/lib/rubocop/cop/style/copyright.rb +87 -0
  32. data/lib/rubocop/cop/style/documentation.rb +32 -0
  33. data/lib/rubocop/cop/style/empty_else.rb +85 -16
  34. data/lib/rubocop/cop/style/encoding.rb +14 -2
  35. data/lib/rubocop/cop/style/end_of_line.rb +5 -0
  36. data/lib/rubocop/cop/style/hash_syntax.rb +86 -23
  37. data/lib/rubocop/cop/style/if_unless_modifier.rb +15 -0
  38. data/lib/rubocop/cop/style/indentation_consistency.rb +13 -6
  39. data/lib/rubocop/cop/style/indentation_width.rb +34 -10
  40. data/lib/rubocop/cop/style/lambda.rb +32 -17
  41. data/lib/rubocop/cop/style/line_end_concatenation.rb +4 -0
  42. data/lib/rubocop/cop/style/missing_else.rb +72 -0
  43. data/lib/rubocop/cop/style/regexp_literal.rb +89 -58
  44. data/lib/rubocop/cop/style/space_around_operators.rb +13 -2
  45. data/lib/rubocop/cop/style/space_before_block_braces.rb +3 -3
  46. data/lib/rubocop/cop/style/space_inside_block_braces.rb +9 -5
  47. data/lib/rubocop/cop/style/symbol_literal.rb +36 -0
  48. data/lib/rubocop/cop/style/trailing_blank_lines.rb +7 -0
  49. data/lib/rubocop/cop/style/trailing_comma.rb +21 -7
  50. data/lib/rubocop/cop/style/trivial_accessors.rb +17 -3
  51. data/lib/rubocop/cop/style/unneeded_capital_w.rb +4 -6
  52. data/lib/rubocop/cop/style/while_until_modifier.rb +10 -0
  53. data/lib/rubocop/cop/util.rb +24 -19
  54. data/lib/rubocop/cop/variable_force.rb +14 -0
  55. data/lib/rubocop/cop/variable_force/reference.rb +10 -4
  56. data/lib/rubocop/formatter/html_formatter.rb +10 -4
  57. data/lib/rubocop/formatter/text_util.rb +5 -7
  58. data/lib/rubocop/options.rb +47 -45
  59. data/lib/rubocop/path_util.rb +12 -8
  60. data/lib/rubocop/processed_source.rb +12 -1
  61. data/lib/rubocop/rake_task.rb +2 -2
  62. data/lib/rubocop/version.rb +1 -1
  63. data/relnotes/v0.30.0.md +145 -0
  64. data/rubocop.gemspec +15 -3
  65. metadata +22 -545
  66. data/.gitignore +0 -54
  67. data/.rspec +0 -1
  68. data/.rubocop.yml +0 -11
  69. data/.rubocop_todo.yml +0 -28
  70. data/.travis.yml +0 -22
  71. data/Gemfile +0 -15
  72. data/Rakefile +0 -41
  73. data/lib/rubocop/cop/style/blocks.rb +0 -80
  74. data/lib/rubocop/cop/style/unneeded_percent_x.rb +0 -25
  75. data/logo/rubocop-final-logo.eps +0 -0
  76. data/spec/.rubocop.yml +0 -5
  77. data/spec/fixtures/html_formatter/expected.html +0 -495
  78. data/spec/fixtures/html_formatter/project/app/controllers/application_controller.rb +0 -5
  79. data/spec/fixtures/html_formatter/project/app/controllers/books_controller.rb +0 -74
  80. data/spec/fixtures/html_formatter/project/app/models/book.rb +0 -5
  81. data/spec/isolated_environment_spec.rb +0 -24
  82. data/spec/project_spec.rb +0 -119
  83. data/spec/rubocop/cli_spec.rb +0 -2740
  84. data/spec/rubocop/comment_config_spec.rb +0 -105
  85. data/spec/rubocop/config_loader_spec.rb +0 -377
  86. data/spec/rubocop/config_spec.rb +0 -235
  87. data/spec/rubocop/config_store_spec.rb +0 -53
  88. data/spec/rubocop/cop/commissioner_spec.rb +0 -85
  89. data/spec/rubocop/cop/cop_spec.rb +0 -135
  90. data/spec/rubocop/cop/corrector_spec.rb +0 -59
  91. data/spec/rubocop/cop/force_spec.rb +0 -29
  92. data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +0 -113
  93. data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +0 -35
  94. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +0 -130
  95. data/spec/rubocop/cop/lint/block_alignment_spec.rb +0 -533
  96. data/spec/rubocop/cop/lint/condition_position_spec.rb +0 -51
  97. data/spec/rubocop/cop/lint/debugger_spec.rb +0 -73
  98. data/spec/rubocop/cop/lint/def_end_alignment_spec.rb +0 -108
  99. data/spec/rubocop/cop/lint/deprecated_class_methods_spec.rb +0 -38
  100. data/spec/rubocop/cop/lint/duplicate_methods_spec.rb +0 -189
  101. data/spec/rubocop/cop/lint/else_layout_spec.rb +0 -65
  102. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +0 -27
  103. data/spec/rubocop/cop/lint/empty_interpolation_spec.rb +0 -18
  104. data/spec/rubocop/cop/lint/end_alignment_spec.rb +0 -91
  105. data/spec/rubocop/cop/lint/end_in_method_spec.rb +0 -29
  106. data/spec/rubocop/cop/lint/ensure_return_spec.rb +0 -39
  107. data/spec/rubocop/cop/lint/eval_spec.rb +0 -33
  108. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +0 -30
  109. data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +0 -33
  110. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +0 -172
  111. data/spec/rubocop/cop/lint/literal_in_interpolation_spec.rb +0 -31
  112. data/spec/rubocop/cop/lint/loop_spec.rb +0 -27
  113. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +0 -57
  114. data/spec/rubocop/cop/lint/require_parentheses_spec.rb +0 -82
  115. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +0 -123
  116. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +0 -237
  117. data/spec/rubocop/cop/lint/space_before_first_arg_spec.rb +0 -66
  118. data/spec/rubocop/cop/lint/string_conversion_in_interpolation_spec.rb +0 -51
  119. data/spec/rubocop/cop/lint/syntax_spec.rb +0 -34
  120. data/spec/rubocop/cop/lint/underscore_prefixed_variable_name_spec.rb +0 -179
  121. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +0 -63
  122. data/spec/rubocop/cop/lint/unused_block_argument_spec.rb +0 -231
  123. data/spec/rubocop/cop/lint/unused_method_argument_spec.rb +0 -278
  124. data/spec/rubocop/cop/lint/useless_access_modifier_spec.rb +0 -192
  125. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +0 -1778
  126. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +0 -30
  127. data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +0 -48
  128. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +0 -211
  129. data/spec/rubocop/cop/lint/void_spec.rb +0 -64
  130. data/spec/rubocop/cop/metrics/abc_size_spec.rb +0 -109
  131. data/spec/rubocop/cop/metrics/block_nesting_spec.rb +0 -156
  132. data/spec/rubocop/cop/metrics/class_length_spec.rb +0 -131
  133. data/spec/rubocop/cop/metrics/cyclomatic_complexity_spec.rb +0 -204
  134. data/spec/rubocop/cop/metrics/line_length_spec.rb +0 -136
  135. data/spec/rubocop/cop/metrics/method_length_spec.rb +0 -147
  136. data/spec/rubocop/cop/metrics/parameter_lists_spec.rb +0 -44
  137. data/spec/rubocop/cop/metrics/perceived_complexity_spec.rb +0 -222
  138. data/spec/rubocop/cop/offense_spec.rb +0 -133
  139. data/spec/rubocop/cop/rails/action_filter_spec.rb +0 -64
  140. data/spec/rubocop/cop/rails/default_scope_spec.rb +0 -37
  141. data/spec/rubocop/cop/rails/delegate_spec.rb +0 -177
  142. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +0 -13
  143. data/spec/rubocop/cop/rails/output_spec.rb +0 -37
  144. data/spec/rubocop/cop/rails/read_write_attribute_spec.rb +0 -130
  145. data/spec/rubocop/cop/rails/scope_args_spec.rb +0 -25
  146. data/spec/rubocop/cop/rails/validation_spec.rb +0 -28
  147. data/spec/rubocop/cop/severity_spec.rb +0 -113
  148. data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +0 -421
  149. data/spec/rubocop/cop/style/accessor_method_name_spec.rb +0 -81
  150. data/spec/rubocop/cop/style/alias_spec.rb +0 -59
  151. data/spec/rubocop/cop/style/align_array_spec.rb +0 -123
  152. data/spec/rubocop/cop/style/align_hash_spec.rb +0 -411
  153. data/spec/rubocop/cop/style/align_parameters_spec.rb +0 -431
  154. data/spec/rubocop/cop/style/and_or_spec.rb +0 -235
  155. data/spec/rubocop/cop/style/array_join_spec.rb +0 -29
  156. data/spec/rubocop/cop/style/ascii_comments_spec.rb +0 -21
  157. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +0 -36
  158. data/spec/rubocop/cop/style/attr_spec.rb +0 -29
  159. data/spec/rubocop/cop/style/bare_percent_literals_spec.rb +0 -132
  160. data/spec/rubocop/cop/style/begin_block_spec.rb +0 -13
  161. data/spec/rubocop/cop/style/block_comments_spec.rb +0 -45
  162. data/spec/rubocop/cop/style/block_end_newline_spec.rb +0 -61
  163. data/spec/rubocop/cop/style/blocks_spec.rb +0 -121
  164. data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +0 -288
  165. data/spec/rubocop/cop/style/case_equality_spec.rb +0 -13
  166. data/spec/rubocop/cop/style/case_indentation_spec.rb +0 -293
  167. data/spec/rubocop/cop/style/character_literal_spec.rb +0 -37
  168. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +0 -40
  169. data/spec/rubocop/cop/style/class_and_module_children_spec.rb +0 -133
  170. data/spec/rubocop/cop/style/class_check_spec.rb +0 -41
  171. data/spec/rubocop/cop/style/class_methods_spec.rb +0 -80
  172. data/spec/rubocop/cop/style/class_vars_spec.rb +0 -19
  173. data/spec/rubocop/cop/style/collection_methods_spec.rb +0 -48
  174. data/spec/rubocop/cop/style/colon_method_call_spec.rb +0 -65
  175. data/spec/rubocop/cop/style/comment_annotation_spec.rb +0 -86
  176. data/spec/rubocop/cop/style/comment_indentation_spec.rb +0 -179
  177. data/spec/rubocop/cop/style/constant_name_spec.rb +0 -65
  178. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +0 -43
  179. data/spec/rubocop/cop/style/deprecated_hash_methods_spec.rb +0 -45
  180. data/spec/rubocop/cop/style/documentation_spec.rb +0 -146
  181. data/spec/rubocop/cop/style/dot_position_spec.rb +0 -132
  182. data/spec/rubocop/cop/style/double_negation_spec.rb +0 -22
  183. data/spec/rubocop/cop/style/each_with_object_spec.rb +0 -73
  184. data/spec/rubocop/cop/style/else_alignment_spec.rb +0 -506
  185. data/spec/rubocop/cop/style/empty_else_spec.rb +0 -100
  186. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +0 -135
  187. data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +0 -178
  188. data/spec/rubocop/cop/style/empty_lines_around_block_body_spec.rb +0 -103
  189. data/spec/rubocop/cop/style/empty_lines_around_class_body_spec.rb +0 -135
  190. data/spec/rubocop/cop/style/empty_lines_around_method_body_spec.rb +0 -90
  191. data/spec/rubocop/cop/style/empty_lines_around_module_body_spec.rb +0 -79
  192. data/spec/rubocop/cop/style/empty_lines_spec.rb +0 -51
  193. data/spec/rubocop/cop/style/empty_literal_spec.rb +0 -117
  194. data/spec/rubocop/cop/style/encoding_spec.rb +0 -139
  195. data/spec/rubocop/cop/style/end_block_spec.rb +0 -13
  196. data/spec/rubocop/cop/style/end_of_line_spec.rb +0 -65
  197. data/spec/rubocop/cop/style/even_odd_spec.rb +0 -164
  198. data/spec/rubocop/cop/style/extra_spacing_spec.rb +0 -68
  199. data/spec/rubocop/cop/style/file_name_spec.rb +0 -84
  200. data/spec/rubocop/cop/style/first_parameter_indentation_spec.rb +0 -304
  201. data/spec/rubocop/cop/style/flip_flop_spec.rb +0 -23
  202. data/spec/rubocop/cop/style/for_spec.rb +0 -105
  203. data/spec/rubocop/cop/style/format_string_spec.rb +0 -184
  204. data/spec/rubocop/cop/style/global_vars_spec.rb +0 -34
  205. data/spec/rubocop/cop/style/guard_clause_spec.rb +0 -172
  206. data/spec/rubocop/cop/style/hash_syntax_spec.rb +0 -137
  207. data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +0 -146
  208. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +0 -24
  209. data/spec/rubocop/cop/style/indent_array_spec.rb +0 -173
  210. data/spec/rubocop/cop/style/indent_hash_spec.rb +0 -367
  211. data/spec/rubocop/cop/style/indentation_consistency_spec.rb +0 -509
  212. data/spec/rubocop/cop/style/indentation_width_spec.rb +0 -885
  213. data/spec/rubocop/cop/style/infinite_loop_spec.rb +0 -48
  214. data/spec/rubocop/cop/style/inline_comment_spec.rb +0 -13
  215. data/spec/rubocop/cop/style/lambda_call_spec.rb +0 -65
  216. data/spec/rubocop/cop/style/lambda_spec.rb +0 -76
  217. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +0 -64
  218. data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +0 -184
  219. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +0 -59
  220. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +0 -60
  221. data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +0 -108
  222. data/spec/rubocop/cop/style/method_name_spec.rb +0 -125
  223. data/spec/rubocop/cop/style/module_function_spec.rb +0 -24
  224. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +0 -78
  225. data/spec/rubocop/cop/style/multiline_block_layout_spec.rb +0 -199
  226. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +0 -134
  227. data/spec/rubocop/cop/style/multiline_operation_indentation_spec.rb +0 -464
  228. data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +0 -18
  229. data/spec/rubocop/cop/style/negated_if_spec.rb +0 -102
  230. data/spec/rubocop/cop/style/negated_while_spec.rb +0 -64
  231. data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +0 -21
  232. data/spec/rubocop/cop/style/next_spec.rb +0 -301
  233. data/spec/rubocop/cop/style/nil_comparison_spec.rb +0 -29
  234. data/spec/rubocop/cop/style/non_nil_check_spec.rb +0 -132
  235. data/spec/rubocop/cop/style/not_spec.rb +0 -28
  236. data/spec/rubocop/cop/style/numeric_literals_spec.rb +0 -80
  237. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +0 -13
  238. data/spec/rubocop/cop/style/op_method_spec.rb +0 -85
  239. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +0 -161
  240. data/spec/rubocop/cop/style/percent_literal_delimiters_spec.rb +0 -316
  241. data/spec/rubocop/cop/style/percent_q_literals_spec.rb +0 -122
  242. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +0 -22
  243. data/spec/rubocop/cop/style/predicate_name_spec.rb +0 -57
  244. data/spec/rubocop/cop/style/proc_spec.rb +0 -27
  245. data/spec/rubocop/cop/style/raise_args_spec.rb +0 -87
  246. data/spec/rubocop/cop/style/redundant_begin_spec.rb +0 -121
  247. data/spec/rubocop/cop/style/redundant_exception_spec.rb +0 -59
  248. data/spec/rubocop/cop/style/redundant_return_spec.rb +0 -171
  249. data/spec/rubocop/cop/style/redundant_self_spec.rb +0 -186
  250. data/spec/rubocop/cop/style/regexp_literal_spec.rb +0 -188
  251. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +0 -116
  252. data/spec/rubocop/cop/style/self_assignment_spec.rb +0 -49
  253. data/spec/rubocop/cop/style/semicolon_spec.rb +0 -114
  254. data/spec/rubocop/cop/style/signal_exception_spec.rb +0 -289
  255. data/spec/rubocop/cop/style/single_line_block_params_spec.rb +0 -82
  256. data/spec/rubocop/cop/style/single_line_methods_spec.rb +0 -94
  257. data/spec/rubocop/cop/style/single_space_before_first_arg_spec.rb +0 -63
  258. data/spec/rubocop/cop/style/space_after_colon_spec.rb +0 -55
  259. data/spec/rubocop/cop/style/space_after_comma_spec.rb +0 -30
  260. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +0 -84
  261. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +0 -70
  262. data/spec/rubocop/cop/style/space_after_not_spec.rb +0 -22
  263. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +0 -23
  264. data/spec/rubocop/cop/style/space_around_block_parameters_spec.rb +0 -155
  265. data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +0 -95
  266. data/spec/rubocop/cop/style/space_around_operators_spec.rb +0 -330
  267. data/spec/rubocop/cop/style/space_before_block_braces_spec.rb +0 -73
  268. data/spec/rubocop/cop/style/space_before_comma_spec.rb +0 -42
  269. data/spec/rubocop/cop/style/space_before_comment_spec.rb +0 -34
  270. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +0 -70
  271. data/spec/rubocop/cop/style/space_before_semicolon_spec.rb +0 -28
  272. data/spec/rubocop/cop/style/space_inside_block_braces_spec.rb +0 -317
  273. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +0 -83
  274. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +0 -147
  275. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +0 -44
  276. data/spec/rubocop/cop/style/space_inside_range_literal_spec.rb +0 -64
  277. data/spec/rubocop/cop/style/special_global_vars_spec.rb +0 -62
  278. data/spec/rubocop/cop/style/string_literals_in_interpolation_spec.rb +0 -99
  279. data/spec/rubocop/cop/style/string_literals_spec.rb +0 -228
  280. data/spec/rubocop/cop/style/struct_inheritance_spec.rb +0 -44
  281. data/spec/rubocop/cop/style/symbol_array_spec.rb +0 -37
  282. data/spec/rubocop/cop/style/symbol_proc_spec.rb +0 -100
  283. data/spec/rubocop/cop/style/tab_spec.rb +0 -47
  284. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +0 -83
  285. data/spec/rubocop/cop/style/trailing_comma_spec.rb +0 -390
  286. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +0 -31
  287. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +0 -558
  288. data/spec/rubocop/cop/style/unless_else_spec.rb +0 -23
  289. data/spec/rubocop/cop/style/unneeded_capital_w_spec.rb +0 -90
  290. data/spec/rubocop/cop/style/unneeded_percent_q_spec.rb +0 -127
  291. data/spec/rubocop/cop/style/unneeded_percent_x_spec.rb +0 -34
  292. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +0 -76
  293. data/spec/rubocop/cop/style/variable_name_spec.rb +0 -107
  294. data/spec/rubocop/cop/style/when_then_spec.rb +0 -42
  295. data/spec/rubocop/cop/style/while_until_do_spec.rb +0 -55
  296. data/spec/rubocop/cop/style/while_until_modifier_spec.rb +0 -93
  297. data/spec/rubocop/cop/style/word_array_spec.rb +0 -117
  298. data/spec/rubocop/cop/team_spec.rb +0 -190
  299. data/spec/rubocop/cop/util_spec.rb +0 -102
  300. data/spec/rubocop/cop/variable_force/assignment_spec.rb +0 -200
  301. data/spec/rubocop/cop/variable_force/locatable_spec.rb +0 -699
  302. data/spec/rubocop/cop/variable_force/reference_spec.rb +0 -19
  303. data/spec/rubocop/cop/variable_force/scope_spec.rb +0 -319
  304. data/spec/rubocop/cop/variable_force/variable_spec.rb +0 -59
  305. data/spec/rubocop/cop/variable_force/variable_table_spec.rb +0 -276
  306. data/spec/rubocop/cop/variable_force_spec.rb +0 -26
  307. data/spec/rubocop/formatter/base_formatter_spec.rb +0 -191
  308. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +0 -114
  309. data/spec/rubocop/formatter/colorizable_spec.rb +0 -107
  310. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +0 -50
  311. data/spec/rubocop/formatter/disabled_lines_formatter_spec.rb +0 -67
  312. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +0 -63
  313. data/spec/rubocop/formatter/file_list_formatter_spec.rb +0 -33
  314. data/spec/rubocop/formatter/formatter_set_spec.rb +0 -141
  315. data/spec/rubocop/formatter/fuubar_style_formatter_spec.rb +0 -129
  316. data/spec/rubocop/formatter/html_formatter_spec.rb +0 -48
  317. data/spec/rubocop/formatter/json_formatter_spec.rb +0 -152
  318. data/spec/rubocop/formatter/offense_count_formatter_spec.rb +0 -75
  319. data/spec/rubocop/formatter/progress_formatter_spec.rb +0 -182
  320. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +0 -135
  321. data/spec/rubocop/formatter/text_util_spec.rb +0 -55
  322. data/spec/rubocop/options_spec.rb +0 -181
  323. data/spec/rubocop/path_util_spec.rb +0 -77
  324. data/spec/rubocop/processed_source_spec.rb +0 -184
  325. data/spec/rubocop/rake_task_spec.rb +0 -122
  326. data/spec/rubocop/runner_spec.rb +0 -99
  327. data/spec/rubocop/string_util_spec.rb +0 -46
  328. data/spec/rubocop/target_finder_spec.rb +0 -245
  329. data/spec/rubocop/token_spec.rb +0 -29
  330. data/spec/spec_helper.rb +0 -39
  331. data/spec/support/cop_helper.rb +0 -75
  332. data/spec/support/cops/class_must_be_a_module_cop.rb +0 -19
  333. data/spec/support/cops/module_must_be_a_class_cop.rb +0 -19
  334. data/spec/support/coverage.rb +0 -15
  335. data/spec/support/custom_matchers.rb +0 -58
  336. data/spec/support/file_helper.rb +0 -23
  337. data/spec/support/jruby_workaround.rb +0 -15
  338. data/spec/support/mri_syntax_checker.rb +0 -73
  339. data/spec/support/shared_contexts.rb +0 -53
  340. data/spec/support/shared_examples.rb +0 -55
  341. data/spec/support/statement_modifier_helper.rb +0 -41
@@ -1,199 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Style::MultilineBlockLayout do
6
- subject(:cop) { described_class.new }
7
-
8
- it 'registers an offense for missing newline in do/end block w/o params' do
9
- inspect_source(cop,
10
- ['test do foo',
11
- 'end'
12
- ])
13
- expect(cop.messages)
14
- .to eq(['Block body expression is on the same line as the block start.'])
15
- end
16
-
17
- it 'registers an offense for missing newline in {} block w/o params' do
18
- inspect_source(cop,
19
- ['test { foo',
20
- '}'
21
- ])
22
- expect(cop.messages)
23
- .to eq(['Block body expression is on the same line as the block start.'])
24
- end
25
-
26
- it 'registers an offense for missing newline in do/end block with params' do
27
- inspect_source(cop,
28
- ['test do |x| foo',
29
- 'end'
30
- ])
31
- expect(cop.messages)
32
- .to eq(['Block body expression is on the same line as the block start.'])
33
- end
34
-
35
- it 'registers an offense for missing newline in {} block with params' do
36
- inspect_source(cop,
37
- ['test { |x| foo',
38
- '}'
39
- ])
40
- expect(cop.messages)
41
- .to eq(['Block body expression is on the same line as the block start.'])
42
- end
43
-
44
- it 'does not register an offense for one-line do/end blocks' do
45
- inspect_source(cop, 'test do foo end')
46
- expect(cop.offenses).to be_empty
47
- end
48
-
49
- it 'does not register an offense for one-line {} blocks' do
50
- inspect_source(cop, 'test { foo }')
51
- expect(cop.offenses).to be_empty
52
- end
53
-
54
- it 'does not register offenses when there is a newline for do/end block' do
55
- inspect_source(cop,
56
- ['test do',
57
- ' foo',
58
- 'end'
59
- ])
60
- expect(cop.offenses).to be_empty
61
- end
62
-
63
- it 'does not error out when the block is empty' do
64
- inspect_source(cop,
65
- ['test do |x|',
66
- 'end'
67
- ])
68
- expect(cop.offenses).to be_empty
69
- end
70
-
71
- it 'does not register offenses when there is a newline for {} block' do
72
- inspect_source(cop,
73
- ['test {',
74
- ' foo',
75
- '}'
76
- ])
77
- expect(cop.offenses).to be_empty
78
- end
79
-
80
- it 'registers offenses for lambdas as expected' do
81
- inspect_source(cop,
82
- ['-> (x) do foo',
83
- ' bar',
84
- 'end'
85
- ])
86
- expect(cop.messages)
87
- .to eq(['Block body expression is on the same line as the block start.'])
88
- end
89
-
90
- it 'registers an offense for line-break before arguments' do
91
- inspect_source(cop,
92
- ['test do',
93
- ' |x| play_with(x)',
94
- 'end'])
95
- expect(cop.messages)
96
- .to eq(['Block argument expression is not on the same line as the ' \
97
- 'block start.'])
98
- end
99
-
100
- it 'registers an offense for line-break before arguments with empty block' do
101
- inspect_source(cop,
102
- ['test do',
103
- ' |x|',
104
- 'end'])
105
- expect(cop.messages)
106
- .to eq(['Block argument expression is not on the same line as the ' \
107
- 'block start.'])
108
- end
109
-
110
- it 'registers an offense for line-break within arguments' do
111
- inspect_source(cop,
112
- ['test do |x,',
113
- ' y|',
114
- 'end'])
115
- expect(cop.messages)
116
- .to eq(['Block argument expression is not on the same line as the ' \
117
- 'block start.'])
118
- end
119
-
120
- it 'auto-corrects a do/end block with params that is missing newlines' do
121
- src = ['test do |foo| bar',
122
- 'end']
123
-
124
- new_source = autocorrect_source(cop, src)
125
-
126
- expect(new_source).to eq(['test do |foo| ',
127
- ' bar',
128
- 'end'].join("\n"))
129
- end
130
-
131
- it 'auto-corrects a do/end block with a mult-line body' do
132
- src = ['test do |foo| bar',
133
- ' test',
134
- 'end']
135
-
136
- new_source = autocorrect_source(cop, src)
137
-
138
- expect(new_source).to eq(['test do |foo| ',
139
- ' bar',
140
- ' test',
141
- 'end'].join("\n"))
142
- end
143
-
144
- it 'auto-corrects a {} block with params that is missing newlines' do
145
- src = ['test { |foo| bar',
146
- '}']
147
-
148
- new_source = autocorrect_source(cop, src)
149
-
150
- expect(new_source).to eq(['test { |foo| ',
151
- ' bar',
152
- '}'].join("\n"))
153
- end
154
-
155
- it 'autocorrects in more complex case with lambda and assignment, and '\
156
- 'aligns the next line two spaces out from the start of the block' do
157
- src = ['x = -> (y) { foo',
158
- ' bar',
159
- '}']
160
-
161
- new_source = autocorrect_source(cop, src)
162
-
163
- expect(new_source).to eq(['x = -> (y) { ',
164
- ' foo',
165
- ' bar',
166
- '}'].join("\n"))
167
- end
168
-
169
- it 'auto-corrects a line-break before arguments' do
170
- new_source = autocorrect_source(cop,
171
- ['test do',
172
- ' |x| play_with(x)',
173
- 'end'])
174
-
175
- expect(new_source).to eq(['test do |x|',
176
- ' play_with(x)',
177
- 'end'].join("\n"))
178
- end
179
-
180
- it 'auto-corrects a line-break before arguments with empty block' do
181
- new_source = autocorrect_source(cop,
182
- ['test do',
183
- ' |x|',
184
- 'end'])
185
-
186
- expect(new_source).to eq(['test do |x|',
187
- 'end'].join("\n"))
188
- end
189
-
190
- it 'auto-corrects a line-break within arguments' do
191
- new_source = autocorrect_source(cop,
192
- ['test do |x,',
193
- ' y| play_with(x, y)',
194
- 'end'])
195
- expect(new_source).to eq(['test do |x, y|',
196
- ' play_with(x, y)',
197
- 'end'].join("\n"))
198
- end
199
- end
@@ -1,134 +0,0 @@
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 'does not get confused by empty elsif branch' do
11
- inspect_source(cop, ['if cond',
12
- 'elsif cond',
13
- 'end'])
14
- expect(cop.offenses).to be_empty
15
- end
16
-
17
- it 'registers an offense for then in multiline if' do
18
- inspect_source(cop, ['if cond then',
19
- 'end',
20
- "if cond then\t",
21
- 'end',
22
- 'if cond then ',
23
- 'end',
24
- 'if cond',
25
- 'then',
26
- 'end',
27
- 'if cond then # bad',
28
- 'end'])
29
- expect(cop.offenses.map(&:line)).to eq([1, 3, 5, 8, 10])
30
- expect(cop.highlights).to eq(['then'] * 5)
31
- expect(cop.messages).to eq(['Do not use `then` for multi-line `if`.'] * 5)
32
- end
33
-
34
- it 'registers an offense for then in multiline elsif' do
35
- inspect_source(cop, ['if cond1',
36
- ' a',
37
- 'elsif cond2 then',
38
- ' b',
39
- 'end'])
40
- expect(cop.offenses.map(&:line)).to eq([3])
41
- expect(cop.highlights).to eq(['then'])
42
- expect(cop.messages).to eq(['Do not use `then` for multi-line `elsif`.'])
43
- end
44
-
45
- it 'accepts multiline if without then' do
46
- inspect_source(cop, ['if cond',
47
- 'end'])
48
- expect(cop.offenses).to be_empty
49
- end
50
-
51
- it 'accepts table style if/then/elsif/ends' do
52
- inspect_source(cop,
53
- ['if @io == $stdout then str << "$stdout"',
54
- 'elsif @io == $stdin then str << "$stdin"',
55
- 'elsif @io == $stderr then str << "$stderr"',
56
- 'else str << @io.class.to_s',
57
- 'end'])
58
- expect(cop.offenses).to be_empty
59
- end
60
-
61
- it 'does not get confused by a then in a when' do
62
- inspect_source(cop,
63
- ['if a',
64
- ' case b',
65
- ' when c then',
66
- ' end',
67
- 'end'])
68
- expect(cop.offenses).to be_empty
69
- end
70
-
71
- it 'does not get confused by a commented-out then' do
72
- inspect_source(cop,
73
- ['if a # then',
74
- ' b',
75
- 'end',
76
- 'if c # then',
77
- 'end'])
78
- expect(cop.offenses).to be_empty
79
- end
80
-
81
- it 'does not raise an error for an implicit match if' do
82
- expect do
83
- inspect_source(cop,
84
- ['if //',
85
- 'end'])
86
- end.not_to raise_error
87
- end
88
-
89
- # unless
90
-
91
- it 'registers an offense for then in multiline unless' do
92
- inspect_source(cop, ['unless cond then',
93
- 'end'])
94
- expect(cop.messages).to eq(
95
- ['Do not use `then` for multi-line `unless`.'])
96
- end
97
-
98
- it 'accepts multiline unless without then' do
99
- inspect_source(cop, ['unless cond',
100
- 'end'])
101
- expect(cop.offenses).to be_empty
102
- end
103
-
104
- it 'does not get confused by a postfix unless' do
105
- inspect_source(cop, 'two unless one')
106
- expect(cop.offenses).to be_empty
107
- end
108
-
109
- it 'does not get confused by a nested postfix unless' do
110
- inspect_source(cop,
111
- ['if two',
112
- ' puts 1',
113
- 'end unless two'
114
- ])
115
- expect(cop.offenses).to be_empty
116
- end
117
-
118
- it 'does not raise an error for an implicit match unless' do
119
- expect do
120
- inspect_source(cop,
121
- ['unless //',
122
- 'end'])
123
- end.not_to raise_error
124
- end
125
-
126
- it 'auto-corrects the usage of "then" in multiline if' do
127
- new_source = autocorrect_source(cop, ['if cond then',
128
- ' something',
129
- 'end'])
130
- expect(new_source).to eq(['if cond',
131
- ' something',
132
- 'end'].join("\n"))
133
- end
134
- end
@@ -1,464 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Style::MultilineOperationIndentation do
6
- subject(:cop) { described_class.new(config) }
7
- let(:config) do
8
- merged = RuboCop::ConfigLoader
9
- .default_configuration['Style/MultilineOperationIndentation']
10
- .merge(cop_config)
11
- RuboCop::Config
12
- .new('Style/MultilineOperationIndentation' => merged,
13
- 'Style/IndentationWidth' => { 'Width' => indentation_width })
14
- end
15
- let(:indentation_width) { 2 }
16
-
17
- shared_examples 'common' do
18
- it 'accepts indented operands in ordinary statement' do
19
- inspect_source(cop,
20
- ['a +',
21
- ' b'])
22
- expect(cop.messages).to be_empty
23
- end
24
-
25
- it 'registers an offense for no indentation of second line' do
26
- inspect_source(cop,
27
- ['a +',
28
- 'b'])
29
- expect(cop.messages).to eq(['Use 2 (not 0) spaces for indenting an ' \
30
- 'expression spanning multiple lines.'])
31
- expect(cop.highlights).to eq(['b'])
32
- end
33
-
34
- it 'registers an offense for one space indentation of second line' do
35
- inspect_source(cop,
36
- ['a',
37
- ' .b'])
38
- expect(cop.messages).to eq(['Use 2 (not 1) spaces for indenting an ' \
39
- 'expression spanning multiple lines.'])
40
- expect(cop.highlights).to eq(['.b'])
41
- end
42
-
43
- it 'registers an offense for proc call without a selector' do
44
- inspect_source(cop,
45
- ['a',
46
- ' .(args)'])
47
- expect(cop.messages).to eq(['Use 2 (not 1) spaces for indenting an ' \
48
- 'expression spanning multiple lines.'])
49
- expect(cop.highlights).to eq(['.('])
50
- end
51
-
52
- it 'registers an offense for three spaces indentation of second line' do
53
- inspect_source(cop,
54
- ['a ||',
55
- ' b',
56
- 'c and',
57
- ' d'])
58
- expect(cop.messages).to eq(['Use 2 (not 3) spaces for indenting an ' \
59
- 'expression spanning multiple lines.'] * 2)
60
- expect(cop.highlights).to eq(%w(b d))
61
- end
62
-
63
- it 'registers an offense for extra indentation of third line' do
64
- inspect_source(cop,
65
- [' a ||',
66
- ' b ||',
67
- ' c'])
68
- expect(cop.messages).to eq(['Use 2 (not 4) spaces for indenting an ' \
69
- 'expression spanning multiple lines.'])
70
- expect(cop.highlights).to eq(['c'])
71
- end
72
-
73
- it 'registers an offense for the emacs ruby-mode 1.1 indentation of an ' \
74
- 'expression in an array' do
75
- inspect_source(cop,
76
- [' [',
77
- ' a +',
78
- ' b',
79
- ' ]'])
80
- expect(cop.messages).to eq(['Use 2 (not 0) spaces for indenting an ' \
81
- 'expression spanning multiple lines.'])
82
- expect(cop.highlights).to eq(['b'])
83
- end
84
-
85
- it 'accepts two spaces indentation of second line' do
86
- inspect_source(cop,
87
- [' a ||',
88
- ' b'])
89
- expect(cop.messages).to be_empty
90
- end
91
-
92
- it 'accepts no extra indentation of third line' do
93
- inspect_source(cop,
94
- [' a &&',
95
- ' b &&',
96
- ' c'])
97
- expect(cop.messages).to be_empty
98
- end
99
-
100
- it 'accepts indented operands in for body' do
101
- inspect_source(cop,
102
- ['for x in a',
103
- ' something &&',
104
- ' something_else',
105
- 'end'])
106
- expect(cop.highlights).to be_empty
107
- end
108
-
109
- it 'accepts alignment inside a grouped expression' do
110
- inspect_source(cop,
111
- ['(a +',
112
- ' b)'])
113
- expect(cop.messages).to be_empty
114
- end
115
-
116
- it 'accepts an expression where the first operand spans multiple lines' do
117
- inspect_source(cop,
118
- ['subject.each do |item|',
119
- ' result = resolve(locale) and return result',
120
- 'end and nil'])
121
- expect(cop.messages).to be_empty
122
- end
123
-
124
- it 'registers an offense for badly indented operands in chained ' \
125
- 'method call' do
126
- inspect_source(cop,
127
- ['Foo',
128
- '.a',
129
- ' .b'])
130
- expect(cop.messages).to eq(['Use 2 (not 0) spaces for indenting an ' \
131
- 'expression spanning multiple lines.'])
132
- expect(cop.highlights).to eq(['.a'])
133
- end
134
-
135
- it 'registers an offense for badly indented operands in chained ' \
136
- 'method call' do
137
- inspect_source(cop,
138
- ['Foo',
139
- '.a',
140
- ' .b(c)'])
141
- expect(cop.messages).to eq(['Use 2 (not 0) spaces for indenting an ' \
142
- 'expression spanning multiple lines.'])
143
- expect(cop.highlights).to eq(['.a'])
144
- end
145
-
146
- it 'accepts even indentation of consecutive lines in typical RSpec code' do
147
- inspect_source(cop,
148
- ['expect { Foo.new }.',
149
- ' to change { Bar.count }.',
150
- ' from(1).to(2)'])
151
- expect(cop.messages).to be_empty
152
- end
153
-
154
- it 'accepts any indentation of parameters to #[]' do
155
- inspect_source(cop,
156
- ['payment = Models::IncomingPayments[',
157
- " id: input['incoming-payment-id'],",
158
- ' user_id: @user[:id]]'])
159
- expect(cop.messages).to be_empty
160
- end
161
-
162
- it 'registers an offense for extra indentation of 3rd line in typical ' \
163
- 'RSpec code' do
164
- inspect_source(cop,
165
- ['expect { Foo.new }.',
166
- ' to change { Bar.count }.',
167
- ' from(1).to(2)'])
168
- expect(cop.messages).to eq(['Use 2 (not 6) spaces for indenting an ' \
169
- 'expression spanning multiple lines.'])
170
- end
171
- end
172
-
173
- context 'when EnforcedStyle is aligned' do
174
- let(:cop_config) { { 'EnforcedStyle' => 'aligned' } }
175
-
176
- include_examples 'common'
177
-
178
- it 'accepts aligned operands in if condition' do
179
- inspect_source(cop,
180
- ['if a +',
181
- ' b',
182
- ' something',
183
- 'end'])
184
- expect(cop.messages).to be_empty
185
- end
186
-
187
- it 'registers an offense for misaligned operands in if condition' do
188
- inspect_source(cop,
189
- ['if a +',
190
- ' b',
191
- ' something',
192
- 'end'])
193
- expect(cop.messages).to eq(['Align the operands of a condition in an ' \
194
- '`if` statement spanning multiple lines.'])
195
- expect(cop.highlights).to eq(['b'])
196
- expect(cop.config_to_allow_offenses).to eq('EnforcedStyle' => 'indented')
197
- end
198
-
199
- it 'registers an offense for misaligned string operand when the first ' \
200
- 'operand has backslash continuation' do
201
- inspect_source(cop,
202
- ["flash[:error] = 'Here is a string ' \\",
203
- " 'That spans' <<",
204
- " 'multiple lines'"])
205
- expect(cop.messages).to eq(['Align the operands of an expression in an ' \
206
- 'assignment spanning multiple lines.'])
207
- expect(cop.highlights).to eq(["'multiple lines'"])
208
- end
209
-
210
- it 'registers an offense for misaligned string operand when plus is used' do
211
- inspect_source(cop,
212
- ["flash[:error] = 'Here is a string ' +",
213
- " 'That spans' <<",
214
- " 'multiple lines'"])
215
- expect(cop.messages).to eq(['Align the operands of an expression in an ' \
216
- 'assignment spanning multiple lines.'])
217
- expect(cop.highlights).to eq(["'multiple lines'"])
218
- end
219
-
220
- it 'registers an offense for misaligned operands in unless condition' do
221
- inspect_source(cop,
222
- ['unless a',
223
- ' .b',
224
- ' something',
225
- 'end'])
226
- expect(cop.messages).to eq(['Align the operands of a condition in an ' \
227
- '`unless` statement spanning multiple ' \
228
- 'lines.'])
229
- expect(cop.highlights).to eq(['.b'])
230
- expect(cop.config_to_allow_offenses).to eq('Enabled' => false)
231
- end
232
-
233
- it 'registers an offense for misaligned operands in while condition' do
234
- inspect_source(cop,
235
- ['while a.',
236
- ' b',
237
- ' something',
238
- 'end'])
239
- expect(cop.messages).to eq(['Align the operands of a condition in a ' \
240
- '`while` statement spanning multiple lines.'])
241
- expect(cop.highlights).to eq(['b'])
242
- end
243
-
244
- it 'registers an offense for misaligned operands in until condition' do
245
- inspect_source(cop,
246
- ['until a.',
247
- ' b',
248
- ' something',
249
- 'end'])
250
- expect(cop.messages).to eq(['Align the operands of a condition in an ' \
251
- '`until` statement spanning multiple lines.'])
252
- expect(cop.highlights).to eq(['b'])
253
- end
254
-
255
- it 'accepts aligned operands in assignment' do
256
- inspect_source(cop,
257
- ['formatted_int = int_part',
258
- ' .to_s',
259
- ' .reverse',
260
- " .gsub(/...(?=.)/, '\&_')"])
261
- expect(cop.messages).to be_empty
262
- end
263
-
264
- it 'registers an offense for unaligned operands in assignment' do
265
- inspect_source(cop,
266
- ['bar = Foo',
267
- ' .a',
268
- ' .b(c)'])
269
- expect(cop.messages).to eq(['Align the operands of an expression in an ' \
270
- 'assignment spanning multiple lines.'])
271
- expect(cop.highlights).to eq(['.a'])
272
- end
273
-
274
- it 'auto-corrects' do
275
- new_source = autocorrect_source(cop, ['until a.',
276
- ' b',
277
- ' something',
278
- 'end'])
279
- expect(new_source).to eq(['until a.',
280
- ' b',
281
- ' something',
282
- 'end'].join("\n"))
283
- end
284
- end
285
-
286
- context 'when EnforcedStyle is indented' do
287
- let(:cop_config) { { 'EnforcedStyle' => 'indented' } }
288
-
289
- include_examples 'common'
290
-
291
- it 'accepts indented operands in if condition' do
292
- inspect_source(cop,
293
- ['if a +',
294
- ' b',
295
- ' something',
296
- 'end'])
297
- expect(cop.messages).to be_empty
298
- end
299
-
300
- it 'registers an offense for aligned operands in if condition' do
301
- inspect_source(cop,
302
- ['if a +',
303
- ' b',
304
- ' something',
305
- 'end'])
306
- expect(cop.messages).to eq(['Use 4 (not 3) spaces for indenting a ' \
307
- 'condition in an `if` statement spanning ' \
308
- 'multiple lines.'])
309
- expect(cop.highlights).to eq(['b'])
310
- expect(cop.config_to_allow_offenses).to eq('EnforcedStyle' => 'aligned')
311
- end
312
-
313
- it 'accepts the indentation of a broken string' do
314
- inspect_source(cop,
315
- ["MSG = 'Use 2 (not %d) spaces for indenting a ' \\",
316
- " 'broken line.'"])
317
- expect(cop.messages).to be_empty
318
- end
319
-
320
- it 'accepts normal indentation of method parameters' do
321
- inspect_source(cop,
322
- ['Parser::Source::Range.new(expr.source_buffer,',
323
- ' begin_pos,',
324
- ' begin_pos + line.length)'])
325
- expect(cop.messages).to be_empty
326
- end
327
-
328
- it 'accepts any indentation of method parameters' do
329
- inspect_source(cop,
330
- ['a(b.',
331
- ' c',
332
- '.d)'])
333
- expect(cop.messages).to be_empty
334
- end
335
-
336
- it 'accepts normal indentation inside grouped expression' do
337
- inspect_source(cop,
338
- ['arg_array.size == a.size && (',
339
- ' arg_array == a ||',
340
- ' arg_array.map(&:children) == a.map(&:children)',
341
- ')'])
342
- expect(cop.messages).to be_empty
343
- end
344
-
345
- [
346
- %w(an if),
347
- %w(an unless),
348
- %w(a while),
349
- %w(an until)
350
- ].each do |article, keyword|
351
- it "accepts double indentation of #{keyword} condition" do
352
- inspect_source(cop,
353
- ["#{keyword} receiver.nil? &&",
354
- ' !args.empty? &&',
355
- ' BLACKLIST.include?(method_name)',
356
- 'end',
357
- "#{keyword} receiver.",
358
- ' nil?',
359
- 'end'])
360
- expect(cop.messages).to be_empty
361
- end
362
-
363
- it "registers an offense for a 2 space indentation of #{keyword} " \
364
- 'condition' do
365
- inspect_source(cop,
366
- ["#{keyword} receiver.nil? &&",
367
- ' !args.empty? &&',
368
- ' BLACKLIST.include?(method_name)',
369
- 'end',
370
- "#{keyword} receiver.",
371
- ' nil?',
372
- 'end'])
373
- expect(cop.highlights).to eq(['!args.empty?',
374
- 'BLACKLIST.include?(method_name)',
375
- 'nil?'])
376
- expect(cop.messages).to eq(['Use 4 (not 2) spaces for indenting a ' \
377
- "condition in #{article} `#{keyword}` " \
378
- 'statement spanning multiple lines.'] * 3)
379
- end
380
-
381
- it "accepts indented operands in #{keyword} body" do
382
- inspect_source(cop,
383
- ["#{keyword} a",
384
- ' something &&',
385
- ' something_else',
386
- 'end'])
387
- expect(cop.highlights).to be_empty
388
- end
389
- end
390
-
391
- %w(unless if).each do |keyword|
392
- it "accepts special indentation of return #{keyword} condition" do
393
- inspect_source(cop,
394
- ["return #{keyword} receiver.nil? &&",
395
- ' !args.empty? &&',
396
- ' BLACKLIST.include?(method_name)'])
397
- expect(cop.messages).to be_empty
398
- end
399
- end
400
-
401
- it 'registers an offense for wrong indentation of for expression' do
402
- inspect_source(cop,
403
- ['for n in a +',
404
- ' b',
405
- 'end'])
406
- expect(cop.messages).to eq(['Use 4 (not 2) spaces for indenting a ' \
407
- 'collection in a `for` statement spanning ' \
408
- 'multiple lines.'])
409
- expect(cop.highlights).to eq(['b'])
410
- end
411
-
412
- it 'accepts special indentation of for expression' do
413
- inspect_source(cop,
414
- ['for n in a +',
415
- ' b',
416
- 'end'])
417
- expect(cop.messages).to be_empty
418
- end
419
-
420
- it 'accepts indentation of assignment' do
421
- inspect_source(cop,
422
- ['formatted_int = int_part',
423
- ' .abs',
424
- ' .to_s',
425
- ' .reverse',
426
- " .gsub(/...(?=.)/, '\&_')",
427
- ' .reverse'])
428
- expect(cop.messages).to be_empty
429
- end
430
-
431
- it 'registers an offense for correct + unrecognized style' do
432
- inspect_source(cop,
433
- ['a ||',
434
- ' b',
435
- 'c and',
436
- ' d'])
437
- expect(cop.messages).to eq(['Use 2 (not 4) spaces for indenting an ' \
438
- 'expression spanning multiple lines.'])
439
- expect(cop.highlights).to eq(%w(d))
440
- expect(cop.config_to_allow_offenses).to eq('Enabled' => false)
441
- end
442
-
443
- it 'registers an offense for aligned operators in assignment' do
444
- inspect_source(cop,
445
- ['formatted_int = int_part',
446
- ' .abs',
447
- ' .reverse'])
448
- expect(cop.messages).to eq(['Use 2 (not 16) spaces for indenting an ' \
449
- 'expression in an assignment spanning ' \
450
- 'multiple lines.'] * 2)
451
- end
452
-
453
- it 'auto-corrects' do
454
- new_source = autocorrect_source(cop, ['until a.',
455
- ' b',
456
- ' something',
457
- 'end'])
458
- expect(new_source).to eq(['until a.',
459
- ' b',
460
- ' something',
461
- 'end'].join("\n"))
462
- end
463
- end
464
- end