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,59 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Corrector do
6
- describe '#rewrite' do
7
- it 'allows removal of a range' do
8
- source = 'true and false'
9
- processed_source = parse_source(source)
10
-
11
- correction = lambda do |corrector|
12
- node = processed_source.ast
13
- corrector.remove(node.loc.operator)
14
- end
15
-
16
- corrector = described_class.new(processed_source.buffer, [correction])
17
- expect(corrector.rewrite).to eq 'true false'
18
- end
19
-
20
- it 'allows insertion before a source range' do
21
- source = 'true and false'
22
- processed_source = parse_source(source)
23
-
24
- correction = lambda do |corrector|
25
- node = processed_source.ast
26
- corrector.insert_before(node.loc.operator, ';nil ')
27
- end
28
-
29
- corrector = described_class.new(processed_source.buffer, [correction])
30
- expect(corrector.rewrite).to eq 'true ;nil and false'
31
- end
32
-
33
- it 'allows insertion after a source range' do
34
- source = 'true and false'
35
- processed_source = parse_source(source)
36
-
37
- correction = lambda do |corrector|
38
- node = processed_source.ast
39
- corrector.insert_after(node.loc.operator, ' nil;')
40
- end
41
-
42
- corrector = described_class.new(processed_source.buffer, [correction])
43
- expect(corrector.rewrite).to eq 'true and nil; false'
44
- end
45
-
46
- it 'allows replacement of a range' do
47
- source = 'true and false'
48
- processed_source = parse_source(source)
49
-
50
- correction = lambda do |corrector|
51
- node = processed_source.ast
52
- corrector.replace(node.loc.operator, 'or')
53
- end
54
-
55
- corrector = described_class.new(processed_source.buffer, [correction])
56
- expect(corrector.rewrite).to eq 'true or false'
57
- end
58
- end
59
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Force do
6
- subject(:force) { described_class.new(cops) }
7
- let(:cops) { [double('cop1'), double('cop2')] }
8
-
9
- describe '.force_name' do
10
- it 'returns the class name without namespace' do
11
- expect(RuboCop::Cop::VariableForce.force_name).to eq('VariableForce')
12
- end
13
- end
14
-
15
- describe '#run_hook' do
16
- it 'invokes a hook in all cops' do
17
- cops.each do |cop|
18
- expect(cop).to receive(:some_hook).with(:foo, :bar)
19
- end
20
-
21
- force.run_hook(:some_hook, :foo, :bar)
22
- end
23
-
24
- it 'does not invoke a hook if the cop does not respond to the hook' do
25
- expect(cops.last).to receive(:some_hook).with(:foo, :bar)
26
- force.run_hook(:some_hook, :foo, :bar)
27
- end
28
- end
29
- end
@@ -1,113 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Lint::AmbiguousOperator do
6
- subject(:cop) { described_class.new }
7
-
8
- before do
9
- inspect_source(cop, source)
10
- end
11
-
12
- context 'with a splat operator in the first argument' do
13
- context 'without parentheses' do
14
- context 'without whitespaces on the right of the operator' do
15
- let(:source) do
16
- [
17
- 'array = [1, 2, 3]',
18
- 'puts *array'
19
- ]
20
- end
21
-
22
- it 'registers an offense' do
23
- expect(cop.offenses.size).to eq(1)
24
- expect(cop.offenses.first.message).to eq(
25
- 'Ambiguous splat operator. ' \
26
- "Parenthesize the method arguments if it's surely a splat " \
27
- 'operator, ' \
28
- 'or add a whitespace to the right of the `*` if it should be a ' \
29
- 'multiplication.'
30
- )
31
- expect(cop.highlights).to eq(['*'])
32
- end
33
- end
34
-
35
- context 'with a whitespace on the right of the operator' do
36
- let(:source) do
37
- [
38
- 'array = [1, 2, 3]',
39
- 'puts * array'
40
- ]
41
- end
42
-
43
- it 'accepts' do
44
- expect(cop.offenses).to be_empty
45
- end
46
- end
47
- end
48
-
49
- context 'with parentheses' do
50
- let(:source) do
51
- [
52
- 'array = [1, 2, 3]',
53
- 'puts(*array)'
54
- ]
55
- end
56
-
57
- it 'accepts' do
58
- expect(cop.offenses).to be_empty
59
- end
60
- end
61
- end
62
-
63
- context 'with a block ampersand in the first argument' do
64
- context 'without parentheses' do
65
- context 'without whitespaces on the right of the operator' do
66
- let(:source) do
67
- [
68
- 'process = proc { do_something }',
69
- '2.times &process'
70
- ]
71
- end
72
-
73
- it 'registers an offense' do
74
- expect(cop.offenses.size).to eq(1)
75
- expect(cop.offenses.first.message).to eq(
76
- 'Ambiguous block operator. ' \
77
- "Parenthesize the method arguments if it's surely a block " \
78
- 'operator, ' \
79
- 'or add a whitespace to the right of the `&` if it should be a ' \
80
- 'binary AND.'
81
- )
82
- expect(cop.highlights).to eq(['&'])
83
- end
84
- end
85
-
86
- context 'with a whitespace on the right of the operator' do
87
- let(:source) do
88
- [
89
- 'process = proc { do_something }',
90
- '2.times & process'
91
- ]
92
- end
93
-
94
- it 'accepts' do
95
- expect(cop.offenses).to be_empty
96
- end
97
- end
98
- end
99
-
100
- context 'with parentheses' do
101
- let(:source) do
102
- [
103
- 'process = proc { do_something }',
104
- '2.times(&process)'
105
- ]
106
- end
107
-
108
- it 'accepts' do
109
- expect(cop.offenses).to be_empty
110
- end
111
- end
112
- end
113
- end
@@ -1,35 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Lint::AmbiguousRegexpLiteral do
6
- subject(:cop) { described_class.new }
7
-
8
- before do
9
- inspect_source(cop, source)
10
- end
11
-
12
- context 'with a regexp literal in the first argument' do
13
- context 'without parentheses' do
14
- let(:source) { 'p /pattern/' }
15
-
16
- it 'registers an offense' do
17
- expect(cop.offenses.size).to eq(1)
18
- expect(cop.offenses.first.message).to eq(
19
- 'Ambiguous regexp literal. Parenthesize the method arguments ' \
20
- "if it's surely a regexp literal, or add a whitespace to the " \
21
- 'right of the `/` if it should be a division.'
22
- )
23
- expect(cop.highlights).to eq(['/'])
24
- end
25
- end
26
-
27
- context 'with parentheses' do
28
- let(:source) { 'p(/pattern/)' }
29
-
30
- it 'accepts' do
31
- expect(cop.offenses).to be_empty
32
- end
33
- end
34
- end
35
- end
@@ -1,130 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Lint::AssignmentInCondition, :config do
6
- subject(:cop) { described_class.new(config) }
7
- let(:cop_config) { { 'AllowSafeAssignment' => true } }
8
-
9
- it 'registers an offense for lvar assignment in condition' do
10
- inspect_source(cop,
11
- ['if test = 10',
12
- 'end'
13
- ])
14
- expect(cop.offenses.size).to eq(1)
15
- end
16
-
17
- it 'registers an offense for lvar assignment in while condition' do
18
- inspect_source(cop,
19
- ['while test = 10',
20
- 'end'
21
- ])
22
- expect(cop.offenses.size).to eq(1)
23
- end
24
-
25
- it 'registers an offense for lvar assignment in until condition' do
26
- inspect_source(cop,
27
- ['until test = 10',
28
- 'end'
29
- ])
30
- expect(cop.offenses.size).to eq(1)
31
- end
32
-
33
- it 'registers an offense for ivar assignment in condition' do
34
- inspect_source(cop,
35
- ['if @test = 10',
36
- 'end'
37
- ])
38
- expect(cop.offenses.size).to eq(1)
39
- end
40
-
41
- it 'registers an offense for clvar assignment in condition' do
42
- inspect_source(cop,
43
- ['if @@test = 10',
44
- 'end'
45
- ])
46
- expect(cop.offenses.size).to eq(1)
47
- end
48
-
49
- it 'registers an offense for gvar assignment in condition' do
50
- inspect_source(cop,
51
- ['if $test = 10',
52
- 'end'
53
- ])
54
- expect(cop.offenses.size).to eq(1)
55
- end
56
-
57
- it 'registers an offense for constant assignment in condition' do
58
- inspect_source(cop,
59
- ['if TEST = 10',
60
- 'end'
61
- ])
62
- expect(cop.offenses.size).to eq(1)
63
- end
64
-
65
- it 'registers an offense for collection element assignment in condition' do
66
- inspect_source(cop,
67
- ['if a[3] = 10',
68
- 'end'
69
- ])
70
- expect(cop.offenses.size).to eq(1)
71
- end
72
-
73
- it 'accepts == in condition' do
74
- inspect_source(cop,
75
- ['if test == 10',
76
- 'end'
77
- ])
78
- expect(cop.offenses).to be_empty
79
- end
80
-
81
- it 'accepts = in a block that is called in a condition' do
82
- inspect_source(cop,
83
- 'return 1 if any_errors? { o = inspect(file) }')
84
- expect(cop.offenses).to be_empty
85
- end
86
-
87
- it 'accepts ||= in condition' do
88
- inspect_source(cop,
89
- 'raise StandardError unless foo ||= bar')
90
- expect(cop.offenses).to be_empty
91
- end
92
-
93
- context 'safe assignment is allowed' do
94
- it 'accepts = in condition surrounded with braces' do
95
- inspect_source(cop,
96
- ['if (test = 10)',
97
- 'end'
98
- ])
99
- expect(cop.offenses).to be_empty
100
- end
101
-
102
- it 'accepts []= in condition surrounded with braces' do
103
- inspect_source(cop,
104
- ['if (test[0] = 10)',
105
- 'end'
106
- ])
107
- expect(cop.offenses).to be_empty
108
- end
109
- end
110
-
111
- context 'safe assignment is not allowed' do
112
- let(:cop_config) { { 'AllowSafeAssignment' => false } }
113
-
114
- it 'does not accept = in condition surrounded with braces' do
115
- inspect_source(cop,
116
- ['if (test = 10)',
117
- 'end'
118
- ])
119
- expect(cop.offenses.size).to eq(1)
120
- end
121
-
122
- it 'does not accept []= in condition surrounded with braces' do
123
- inspect_source(cop,
124
- ['if (test[0] = 10)',
125
- 'end'
126
- ])
127
- expect(cop.offenses.size).to eq(1)
128
- end
129
- end
130
- end
@@ -1,533 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe RuboCop::Cop::Lint::BlockAlignment do
6
- subject(:cop) { described_class.new }
7
-
8
- context 'when the block has no arguments' do
9
- it 'registers an offense for mismatched block end' do
10
- inspect_source(cop,
11
- ['test do',
12
- ' end'
13
- ])
14
- expect(cop.messages)
15
- .to eq(['`end` at 2, 2 is not aligned with `test do` at 1, 0'])
16
- end
17
-
18
- it 'auto-corrects alignment' do
19
- new_source = autocorrect_source(cop, ['test do',
20
- ' end'
21
- ])
22
-
23
- expect(new_source).to eq(['test do',
24
- 'end'].join("\n"))
25
- end
26
- end
27
-
28
- context 'when the block has arguments' do
29
- it 'registers an offense for mismatched block end' do
30
- inspect_source(cop,
31
- ['test do |ala|',
32
- ' end'
33
- ])
34
- expect(cop.messages)
35
- .to eq(['`end` at 2, 2 is not aligned with `test do |ala|` at 1, 0'])
36
- end
37
-
38
- it 'auto-corrects alignment' do
39
- new_source = autocorrect_source(cop, ['test do |ala|',
40
- ' end'
41
- ])
42
-
43
- expect(new_source).to eq(['test do |ala|',
44
- 'end'].join("\n"))
45
- end
46
- end
47
-
48
- it 'accepts a block end that does not begin its line' do
49
- inspect_source(cop,
50
- [' scope :bar, lambda { joins(:baz)',
51
- ' .distinct }'
52
- ])
53
- expect(cop.offenses).to be_empty
54
- end
55
-
56
- context 'when the block is a logical operand' do
57
- it 'accepts a correctly aligned block end' do
58
- inspect_source(cop,
59
- ['(value.is_a? Array) && value.all? do |subvalue|',
60
- ' type_check_value(subvalue, array_type)',
61
- 'end',
62
- 'a || b do',
63
- 'end'
64
- ])
65
- expect(cop.offenses).to be_empty
66
- end
67
- end
68
-
69
- it 'accepts end aligned with a variable' do
70
- inspect_source(cop,
71
- ['variable = test do |ala|',
72
- 'end'
73
- ])
74
- expect(cop.offenses).to be_empty
75
- end
76
-
77
- context 'when there is an assignment chain' do
78
- it 'registers an offense for an end aligned with the 2nd variable' do
79
- inspect_source(cop,
80
- ['a = b = c = test do |ala|',
81
- ' end'
82
- ])
83
- expect(cop.messages)
84
- .to eq(['`end` at 2, 4 is not aligned with' \
85
- ' `a = b = c = test do |ala|` at 1, 0'])
86
- end
87
-
88
- it 'accepts end aligned with the first variable' do
89
- inspect_source(cop,
90
- ['a = b = c = test do |ala|',
91
- 'end'
92
- ])
93
- expect(cop.offenses).to be_empty
94
- end
95
-
96
- it 'auto-corrects alignment to the first variable' do
97
- new_source = autocorrect_source(cop,
98
- ['a = b = c = test do |ala|',
99
- ' end'
100
- ])
101
-
102
- expect(new_source).to eq(['a = b = c = test do |ala|',
103
- 'end'
104
- ].join("\n"))
105
- end
106
- end
107
-
108
- context 'and the block is an operand' do
109
- it 'accepts end aligned with a variable' do
110
- inspect_source(cop,
111
- ['b = 1 + preceding_line.reduce(0) do |a, e|',
112
- ' a + e.length + newline_length',
113
- 'end + 1'
114
- ])
115
- expect(cop.offenses).to be_empty
116
- end
117
- end
118
-
119
- it 'registers an offense for mismatched block end with a variable' do
120
- inspect_source(cop,
121
- ['variable = test do |ala|',
122
- ' end'
123
- ])
124
- expect(cop.messages)
125
- .to eq(['`end` at 2, 2 is not aligned with `variable = test do |ala|`' \
126
- ' at 1, 0'])
127
- end
128
-
129
- context 'when the block is defined on the next line' do
130
- it 'accepts end aligned with the block expression' do
131
- inspect_source(cop,
132
- ['variable =',
133
- ' a_long_method_that_dont_fit_on_the_line do |v|',
134
- ' v.foo',
135
- ' end'
136
- ])
137
- expect(cop.offenses).to be_empty
138
- end
139
-
140
- it 'registers an offenses for mismatched end alignment' do
141
- inspect_source(cop,
142
- ['variable =',
143
- ' a_long_method_that_dont_fit_on_the_line do |v|',
144
- ' v.foo',
145
- 'end'
146
- ])
147
- expect(cop.messages)
148
- .to eq(['`end` at 4, 0 is not aligned with' \
149
- ' `a_long_method_that_dont_fit_on_the_line do |v|` at 2, 2'])
150
- end
151
-
152
- it 'auto-corrects alignment' do
153
- new_source = autocorrect_source(
154
- cop,
155
- ['variable =',
156
- ' a_long_method_that_dont_fit_on_the_line do |v|',
157
- ' v.foo',
158
- 'end'
159
- ])
160
-
161
- expect(new_source)
162
- .to eq(['variable =',
163
- ' a_long_method_that_dont_fit_on_the_line do |v|',
164
- ' v.foo',
165
- ' end'
166
- ].join("\n"))
167
- end
168
- end
169
-
170
- context 'when the method part is a call chain that spans several lines' do
171
- # Example from issue 346 of bbatsov/rubocop on github:
172
- it 'accepts pretty alignment style' do
173
- src = [
174
- 'def foo(bar)',
175
- ' bar.get_stuffs',
176
- ' .reject do |stuff| ',
177
- ' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
178
- ' end.select do |stuff|',
179
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
180
- ' end',
181
- ' .select do |stuff|',
182
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
183
- ' end',
184
- 'end']
185
- inspect_source(cop, src)
186
- expect(cop.offenses).to be_empty
187
- end
188
-
189
- it 'registers offenses for misaligned ends' do
190
- src = [
191
- 'def foo(bar)',
192
- ' bar.get_stuffs',
193
- ' .reject do |stuff|',
194
- ' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
195
- ' end.select do |stuff|',
196
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
197
- ' end',
198
- ' .select do |stuff|',
199
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
200
- ' end',
201
- 'end']
202
- inspect_source(cop, src)
203
- expect(cop.messages)
204
- .to eq(['`end` at 5, 8 is not aligned with `bar.get_stuffs` at 2, 2' \
205
- ' or `.reject do |stuff|` at 3, 6',
206
- '`end` at 7, 4 is not aligned with `bar.get_stuffs` at 2, 2' \
207
- ' or `end.select do |stuff|` at 5, 8',
208
- '`end` at 10, 8 is not aligned with `bar.get_stuffs` at 2, 2' \
209
- ' or `.select do |stuff|` at 8, 6'])
210
- end
211
-
212
- # Example from issue 393 of bbatsov/rubocop on github:
213
- it 'accepts end indented as the start of the block' do
214
- src = ['my_object.chaining_this_very_long_method(with_a_parameter)',
215
- ' .and_one_with_a_block do',
216
- ' do_something',
217
- 'end',
218
- '', # Other variant:
219
- 'my_object.chaining_this_very_long_method(',
220
- ' with_a_parameter).and_one_with_a_block do',
221
- ' do_something',
222
- 'end']
223
- inspect_source(cop, src)
224
- expect(cop.offenses).to be_empty
225
- end
226
-
227
- # Example from issue 447 of bbatsov/rubocop on github:
228
- it 'accepts two kinds of end alignment' do
229
- src = [
230
- # Aligned with start of line where do is:
231
- 'params = default_options.merge(options)',
232
- ' .delete_if { |k, v| v.nil? }',
233
- ' .each_with_object({}) do |(k, v), new_hash|',
234
- ' new_hash[k.to_s] = v.to_s',
235
- ' end',
236
- # Aligned with start of the whole expression:
237
- 'params = default_options.merge(options)',
238
- ' .delete_if { |k, v| v.nil? }',
239
- ' .each_with_object({}) do |(k, v), new_hash|',
240
- ' new_hash[k.to_s] = v.to_s',
241
- 'end'
242
- ]
243
- inspect_source(cop, src)
244
- expect(cop.offenses).to be_empty
245
- end
246
-
247
- it 'auto-corrects misaligned ends with the start of the expression' do
248
- src = [
249
- 'def foo(bar)',
250
- ' bar.get_stuffs',
251
- ' .reject do |stuff|',
252
- ' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
253
- ' end.select do |stuff|',
254
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
255
- ' end',
256
- ' .select do |stuff|',
257
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
258
- ' end',
259
- 'end']
260
-
261
- aligned_src = [
262
- 'def foo(bar)',
263
- ' bar.get_stuffs',
264
- ' .reject do |stuff|',
265
- ' stuff.with_a_very_long_expression_that_doesnt_fit_the_line',
266
- ' end.select do |stuff|',
267
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
268
- ' end',
269
- ' .select do |stuff|',
270
- ' stuff.another_very_long_expression_that_doesnt_fit_the_line',
271
- ' end',
272
- 'end'].join("\n")
273
-
274
- new_source = autocorrect_source(cop, src)
275
- expect(new_source).to eq(aligned_src)
276
- end
277
- end
278
-
279
- context 'when variables of a mass assignment spans several lines' do
280
- it 'accepts end aligned with the variables' do
281
- src = ['e,',
282
- 'f = [5, 6].map do |i|',
283
- ' i - 5',
284
- 'end']
285
- inspect_source(cop, src)
286
- expect(cop.offenses).to be_empty
287
- end
288
-
289
- it 'registers an offense for end aligned with the block' do
290
- src = ['e,',
291
- 'f = [5, 6].map do |i|',
292
- ' i - 5',
293
- ' end']
294
- inspect_source(cop, src)
295
- expect(cop.messages)
296
- .to eq(['`end` at 4, 4 is not aligned with `e,` at 1, 0 or' \
297
- ' `f = [5, 6].map do |i|` at 2, 0'])
298
- end
299
-
300
- it 'can not auto-correct' do
301
- src = ['e,',
302
- 'f = [5, 6].map do |i|',
303
- ' i - 5',
304
- ' end']
305
-
306
- new_source = autocorrect_source(cop, src)
307
- expect(new_source).to eq(src.join("\n"))
308
- end
309
- end
310
-
311
- it 'accepts end aligned with an instance variable' do
312
- inspect_source(cop,
313
- ['@variable = test do |ala|',
314
- 'end'
315
- ])
316
- expect(cop.offenses).to be_empty
317
- end
318
-
319
- it 'registers an offense for mismatched block end with' \
320
- ' an instance variable' do
321
- inspect_source(cop,
322
- ['@variable = test do |ala|',
323
- ' end'
324
- ])
325
- expect(cop.messages)
326
- .to eq(['`end` at 2, 2 is not aligned with `@variable = test do |ala|`' \
327
- ' at 1, 0'])
328
- end
329
-
330
- it 'accepts end aligned with a class variable' do
331
- inspect_source(cop,
332
- ['@@variable = test do |ala|',
333
- 'end'
334
- ])
335
- expect(cop.offenses).to be_empty
336
- end
337
-
338
- it 'registers an offense for mismatched block end with a class variable' do
339
- inspect_source(cop,
340
- ['@@variable = test do |ala|',
341
- ' end'
342
- ])
343
- expect(cop.messages)
344
- .to eq(['`end` at 2, 2 is not aligned with `@@variable = test do |ala|`' \
345
- ' at 1, 0'])
346
- end
347
-
348
- it 'accepts end aligned with a global variable' do
349
- inspect_source(cop,
350
- ['$variable = test do |ala|',
351
- 'end'
352
- ])
353
- expect(cop.offenses).to be_empty
354
- end
355
-
356
- it 'registers an offense for mismatched block end with a global variable' do
357
- inspect_source(cop,
358
- ['$variable = test do |ala|',
359
- ' end'
360
- ])
361
- expect(cop.messages)
362
- .to eq(['`end` at 2, 2 is not aligned with `$variable = test do |ala|`' \
363
- ' at 1, 0'])
364
- end
365
-
366
- it 'accepts end aligned with a constant' do
367
- inspect_source(cop,
368
- ['CONSTANT = test do |ala|',
369
- 'end'
370
- ])
371
- expect(cop.offenses).to be_empty
372
- end
373
-
374
- it 'registers an offense for mismatched block end with a constant' do
375
- inspect_source(cop,
376
- ['Module::CONSTANT = test do |ala|',
377
- ' end'
378
- ])
379
- expect(cop.messages)
380
- .to eq(['`end` at 2, 2 is not aligned with' \
381
- ' `Module::CONSTANT = test do |ala|` at 1, 0'])
382
- end
383
-
384
- it 'accepts end aligned with a method call' do
385
- inspect_source(cop,
386
- ['parser.children << lambda do |token|',
387
- ' token << 1',
388
- 'end'
389
- ])
390
- expect(cop.offenses).to be_empty
391
- end
392
-
393
- it 'registers an offense for mismatched block end with a method call' do
394
- inspect_source(cop,
395
- ['parser.children << lambda do |token|',
396
- ' token << 1',
397
- ' end'
398
- ])
399
- expect(cop.messages)
400
- .to eq(['`end` at 3, 2 is not aligned with' \
401
- ' `parser.children << lambda do |token|` at 1, 0'])
402
- end
403
-
404
- it 'accepts end aligned with a method call with arguments' do
405
- inspect_source(cop,
406
- ['@h[:f] = f.each_pair.map do |f, v|',
407
- ' v = 1',
408
- 'end'
409
- ])
410
- expect(cop.offenses).to be_empty
411
- end
412
-
413
- it 'registers an offense for mismatched end with a method call' \
414
- ' with arguments' do
415
- inspect_source(cop,
416
- ['@h[:f] = f.each_pair.map do |f, v|',
417
- ' v = 1',
418
- ' end'
419
- ])
420
- expect(cop.messages)
421
- .to eq(['`end` at 3, 2 is not aligned with' \
422
- ' `@h[:f] = f.each_pair.map do |f, v|` at 1, 0'])
423
- end
424
-
425
- it 'does not raise an error for nested block in a method call' do
426
- inspect_source(cop,
427
- 'expect(arr.all? { |o| o.valid? })')
428
- expect(cop.offenses).to be_empty
429
- end
430
-
431
- it 'accepts end aligned with the block when the block is a method argument' do
432
- inspect_source(cop,
433
- ['expect(arr.all? do |o|',
434
- ' o.valid?',
435
- ' end)'
436
- ])
437
- expect(cop.offenses).to be_empty
438
- end
439
-
440
- it 'registers an offense for mismatched end not aligned with the block' \
441
- ' that is an argument' do
442
- inspect_source(cop,
443
- ['expect(arr.all? do |o|',
444
- ' o.valid?',
445
- ' end)'
446
- ])
447
- expect(cop.messages)
448
- .to eq(['`end` at 3, 2 is not aligned with `arr.all? do |o|` at 1, 7 or' \
449
- ' `expect(arr.all? do |o|` at 1, 0'])
450
- end
451
-
452
- it 'accepts end aligned with an op-asgn (+=, -=)' do
453
- inspect_source(cop,
454
- ['rb += files.select do |file|',
455
- ' file << something',
456
- 'end'
457
- ])
458
- expect(cop.offenses).to be_empty
459
- end
460
-
461
- it 'registers an offense for mismatched block end with an op-asgn (+=, -=)' do
462
- inspect_source(cop,
463
- ['rb += files.select do |file|',
464
- ' file << something',
465
- ' end'
466
- ])
467
- expect(cop.messages)
468
- .to eq(['`end` at 3, 2 is not aligned with `rb` at 1, 0'])
469
- end
470
-
471
- it 'accepts end aligned with an and-asgn (&&=)' do
472
- inspect_source(cop,
473
- ['variable &&= test do |ala|',
474
- 'end'
475
- ])
476
- expect(cop.offenses).to be_empty
477
- end
478
-
479
- it 'registers an offense for mismatched block end with an and-asgn (&&=)' do
480
- inspect_source(cop,
481
- ['variable &&= test do |ala|',
482
- ' end'
483
- ])
484
- expect(cop.messages)
485
- .to eq(['`end` at 2, 2 is not aligned with `variable &&= test do |ala|`' \
486
- ' at 1, 0'])
487
- end
488
-
489
- it 'accepts end aligned with an or-asgn (||=)' do
490
- inspect_source(cop,
491
- ['variable ||= test do |ala|',
492
- 'end'
493
- ])
494
- expect(cop.offenses).to be_empty
495
- end
496
-
497
- it 'registers an offense for mismatched block end with an or-asgn (||=)' do
498
- inspect_source(cop,
499
- ['variable ||= test do |ala|',
500
- ' end'
501
- ])
502
- expect(cop.messages)
503
- .to eq(['`end` at 2, 2 is not aligned with `variable ||= test do |ala|`' \
504
- ' at 1, 0'])
505
- end
506
-
507
- it 'accepts end aligned with a mass assignment' do
508
- inspect_source(cop,
509
- ['var1, var2 = lambda do |test|',
510
- ' [1, 2]',
511
- 'end'
512
- ])
513
- expect(cop.offenses).to be_empty
514
- end
515
-
516
- it 'accepts end aligned with a call chain left hand side' do
517
- inspect_source(cop,
518
- ['parser.diagnostics.consumer = lambda do |diagnostic|',
519
- ' diagnostics << diagnostic',
520
- 'end'])
521
- expect(cop.offenses).to be_empty
522
- end
523
-
524
- it 'registers an offense for mismatched block end with a mass assignment' do
525
- inspect_source(cop,
526
- ['var1, var2 = lambda do |test|',
527
- ' [1, 2]',
528
- ' end'
529
- ])
530
- expect(cop.messages)
531
- .to eq(['`end` at 3, 2 is not aligned with `var1, var2` at 1, 0'])
532
- end
533
- end