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
@@ -9,6 +9,7 @@ module RuboCop
9
9
  include SafeAssignment
10
10
 
11
11
  MSG = 'Assignment in condition - you probably meant to use `==`.'
12
+ ASGN_TYPES = [:begin, *EQUALS_ASGN_NODES, :send]
12
13
 
13
14
  def on_if(node)
14
15
  check(node)
@@ -29,15 +30,16 @@ module RuboCop
29
30
 
30
31
  # assignments inside blocks are not what we're looking for
31
32
  return if condition.type == :block
32
-
33
- condition.each_node(:begin, *EQUALS_ASGN_NODES, :send) do |asgn_node|
33
+ traverse_node(condition, ASGN_TYPES) do |asgn_node|
34
34
  if asgn_node.type == :send
35
35
  _receiver, method_name, *_args = *asgn_node
36
- return if method_name != :[]=
36
+ next :skip_children if method_name != :[]=
37
37
  end
38
38
 
39
39
  # skip safe assignment nodes if safe assignment is allowed
40
- return if safe_assignment_allowed? && safe_assignment?(asgn_node)
40
+ if safe_assignment_allowed? && safe_assignment?(asgn_node)
41
+ next :skip_children
42
+ end
41
43
 
42
44
  # assignment nodes from shorthand ops like ||= don't have operator
43
45
  if asgn_node.type != :begin && asgn_node.loc.operator
@@ -45,6 +47,16 @@ module RuboCop
45
47
  end
46
48
  end
47
49
  end
50
+
51
+ # each_node/visit_descendants_with_types with :skip_children
52
+ def traverse_node(node, types, &block)
53
+ result = yield node if types.include?(node.type)
54
+ # return to skip all descendant nodes
55
+ return if result == :skip_children
56
+ node.children.each do |child|
57
+ traverse_node(child, types, &block) if child.is_a?(Astrolabe::Node)
58
+ end
59
+ end
48
60
  end
49
61
  end
50
62
  end
@@ -16,24 +16,19 @@ module RuboCop
16
16
 
17
17
  MSG = '`end` at %d, %d is not aligned with `%s` at %d, %d%s'
18
18
 
19
- def initialize(config = nil, options = nil)
20
- super
21
- @inspected_blocks = []
22
- end
23
-
24
19
  def on_block(node)
25
- return if already_processed_node?(node)
20
+ return if ignored_node?(node)
26
21
  check_block_alignment(node, node)
27
22
  end
28
23
 
29
24
  def on_and(node)
30
- return if already_processed_node?(node)
25
+ return if ignored_node?(node)
31
26
 
32
27
  _left, right = *node
33
28
  return unless right.type == :block
34
29
 
35
30
  check_block_alignment(node, right)
36
- @inspected_blocks << right
31
+ ignore_node(right)
37
32
  end
38
33
 
39
34
  alias_method :on_or, :on_and
@@ -74,9 +69,9 @@ module RuboCop
74
69
  block_node)
75
70
  return
76
71
  end
77
- return if already_processed_node?(block_node)
72
+ return if ignored_node?(block_node)
78
73
 
79
- @inspected_blocks << block_node
74
+ ignore_node(block_node)
80
75
  check_block_alignment(begin_node, block_node)
81
76
  end
82
77
 
@@ -140,10 +135,6 @@ module RuboCop
140
135
  def message
141
136
  end
142
137
 
143
- def already_processed_node?(node)
144
- @inspected_blocks.include?(node)
145
- end
146
-
147
138
  def block_is_on_next_line?(begin_node, block_node)
148
139
  begin_node.loc.line != block_node.loc.line
149
140
  end
@@ -19,7 +19,7 @@ module RuboCop
19
19
  final_node = begin_node.children.last
20
20
  next unless final_node
21
21
  # handle strings like __FILE__
22
- return if special_string?(final_node)
22
+ next if special_string?(final_node)
23
23
  next unless LITERALS.include?(final_node.type)
24
24
 
25
25
  add_offense(final_node, :expression)
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for non-local exit from iterator, without return value.
7
+ # It warns only when satisfies all of these: `return` doesn't have return
8
+ # value, block followed by method chain, and block have arguments.
9
+ #
10
+ # @example
11
+ #
12
+ # class ItemApi
13
+ # rescue_from ValidationError do |e| # non-iteration block with arg
14
+ # return message: 'validation error' unless e.errors # allowd
15
+ # error_array = e.errors.map do |error| # block with method chain
16
+ # return if error.suppress? # warned
17
+ # return "#{error.param}: invalid" unless error.message # allowed
18
+ # "#{error.param}: #{error.message}"
19
+ # end
20
+ # message: 'validation error', errors: error_array
21
+ # end
22
+ #
23
+ # def update_items
24
+ # transaction do # block without arguments
25
+ # return unless update_necessary? # allowed
26
+ # find_each do |item| # block without method chain
27
+ # return if item.stock == 0 # false-negative...
28
+ # item.update!(foobar: true)
29
+ # end
30
+ # end
31
+ # end
32
+ # end
33
+ #
34
+ class NonLocalExitFromIterator < Cop
35
+ MSG = 'Non-local exit from iterator, without return value. ' \
36
+ '`next`, `break`, `Array#find`, `Array#any?`, etc. is preferred.'
37
+
38
+ def on_return(return_node)
39
+ return if return_value?(return_node)
40
+ return_node.each_ancestor(:block) do |block_node|
41
+ send_node, args_node, _body_node = *block_node
42
+ next if args_node.children.empty?
43
+ if chained_send?(send_node)
44
+ add_offense(return_node, :keyword)
45
+ break
46
+ end
47
+ end
48
+ end
49
+
50
+ def return_value?(return_node)
51
+ !return_node.children.empty?
52
+ end
53
+
54
+ def chained_send?(send_node)
55
+ receiver_node, _selector_node = *send_node
56
+ !receiver_node.nil?
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -13,9 +13,19 @@ module RuboCop
13
13
  OPS = %w(* / % + - == === != < > <= >= <=>)
14
14
  VARS = [:ivar, :lvar, :cvar, :const]
15
15
  LITERALS = [:str, :dstr, :int, :float, :array,
16
- :hash, :regexp, :nil, :true, :false]
16
+ :hash, :regexp, :nil, :true, :false, :sym]
17
17
 
18
18
  def on_begin(node)
19
+ check_begin(node)
20
+ end
21
+
22
+ def on_kwbegin(node)
23
+ check_begin(node)
24
+ end
25
+
26
+ private
27
+
28
+ def check_begin(node)
19
29
  expressions = *node
20
30
 
21
31
  expressions.drop_last(1).each do |expr|
@@ -25,8 +35,6 @@ module RuboCop
25
35
  end
26
36
  end
27
37
 
28
- private
29
-
30
38
  def check_for_void_op(node)
31
39
  return unless node.type == :send
32
40
  return unless node.loc.selector
@@ -15,6 +15,23 @@ module RuboCop
15
15
  return if modifier_if?(node) || ternary_op?(node)
16
16
  on_normal_if_unless(node)
17
17
  end
18
+
19
+ def if_else_clause(node)
20
+ return unless node.if_type?
21
+
22
+ keyword = node.loc.keyword
23
+ if keyword.is?('if')
24
+ node.children.last
25
+ elsif keyword.is?('elsif')
26
+ node.children.last
27
+ elsif keyword.is?('unless')
28
+ node.children[1]
29
+ end
30
+ end
31
+
32
+ def case_else_clause(node)
33
+ node.children.last if node.case_type?
34
+ end
18
35
  end
19
36
  end
20
37
  end
@@ -0,0 +1,72 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Performance
6
+ # This cop is used to identify usages of
7
+ # `select.first`, `select.last`, `find_all.first`, and `find_all.last`
8
+ # and change them to use `detect` instead.
9
+ #
10
+ # @example
11
+ # # bad
12
+ # [].select { |item| true }.first
13
+ # [].select { |item| true }.last
14
+ # [].find_all { |item| true }.first
15
+ # [].find_all { |item| true }.last
16
+ #
17
+ # # good
18
+ # [].detect { |item| true }
19
+ # [].reverse.detect { |item| true }
20
+ class Detect < Cop
21
+ MSG = 'Use `%s` instead of `%s.%s`.'
22
+ REVERSE_MSG = 'Use `reverse.%s` instead of `%s.%s`.'
23
+
24
+ SELECT_METHODS = [:select, :find_all]
25
+
26
+ def on_send(node)
27
+ receiver, second_method = *node
28
+ return unless second_method == :first || second_method == :last
29
+ return if receiver.nil?
30
+
31
+ receiver, _args, _body = *receiver if receiver.block_type?
32
+
33
+ _, first_method = *receiver
34
+ return unless SELECT_METHODS.include?(first_method)
35
+
36
+ range = receiver.loc.selector.join(node.loc.selector)
37
+
38
+ message = second_method == :last ? REVERSE_MSG : MSG
39
+ add_offense(node, range, format(message,
40
+ preferred_method,
41
+ first_method,
42
+ second_method))
43
+ end
44
+
45
+ def autocorrect(node)
46
+ receiver, first_method = *node
47
+
48
+ replacement = if first_method == :last
49
+ "reverse.#{preferred_method}"
50
+ else
51
+ preferred_method
52
+ end
53
+ first_range = node.loc.dot.join(node.loc.selector)
54
+
55
+ receiver, _args, _body = *receiver if receiver.block_type?
56
+
57
+ @corrections << lambda do |corrector|
58
+ corrector.remove(first_range)
59
+ corrector.replace(receiver.loc.selector, replacement)
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def preferred_method
66
+ config.for_cop('Style/CollectionMethods') \
67
+ ['PreferredMethods']['detect'] || 'detect'
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Performance
6
+ # This cop is used to identify usages of
7
+ #
8
+ # @example
9
+ # # bad
10
+ # [1, 2, 3, 4].map { |e| [e, e] }.flatten(1)
11
+ # [1, 2, 3, 4].collect { |e| [e, e] }.flatten(1)
12
+ #
13
+ # # good
14
+ # [1, 2, 3, 4].flat_map { |e| [e, e] }
15
+ # [1, 2, 3, 4].map { |e| [e, e] }.flatten
16
+ # [1, 2, 3, 4].collect { |e| [e, e] }.flatten
17
+ class FlatMap < Cop
18
+ MSG = 'Use `flat_map` instead of `%s...%s`.'
19
+ FLATTEN_MULTIPLE_LEVELS = ' Beware, `flat_map` only flattens 1 level ' \
20
+ 'and `flatten` can be used to flatten ' \
21
+ 'multiple levels'
22
+ FLATTEN = [:flatten, :flatten!]
23
+
24
+ def on_send(node)
25
+ left, second_method, flatten_param = *node
26
+ return unless FLATTEN.include?(second_method)
27
+ flatten_level, = *flatten_param
28
+ expression, = *left
29
+ _array, first_method = *expression
30
+ return unless first_method == :map || first_method == :collect
31
+
32
+ message = MSG
33
+ if cop_config['EnabledForFlattenWithoutParams'] && flatten_level.nil?
34
+ message = MSG + FLATTEN_MULTIPLE_LEVELS
35
+ else
36
+ return unless flatten_level == 1
37
+ end
38
+
39
+ range = Parser::Source::Range.new(node.loc.expression.source_buffer,
40
+ expression.loc.selector.begin_pos,
41
+ node.loc.selector.end_pos)
42
+
43
+ add_offense(node, range, format(message, first_method, second_method))
44
+ end
45
+
46
+ def autocorrect(node)
47
+ receiver, _flatten, flatten_param = *node
48
+ flatten_level, = *flatten_param
49
+ return if flatten_level.nil?
50
+ array, = *receiver
51
+
52
+ @corrections << lambda do |corrector|
53
+ range = Parser::Source::Range.new(node.loc.expression.source_buffer,
54
+ node.loc.dot.begin_pos,
55
+ node.loc.expression.end_pos)
56
+
57
+ corrector.remove(range)
58
+ corrector.replace(array.loc.selector, 'flat_map')
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Performance
6
+ # This cop is used to identify usages of `reverse.each` and
7
+ # change them to use `reverse_each` instead.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # [].reverse.each
12
+ #
13
+ # # good
14
+ # [].reverse_each
15
+ class ReverseEach < Cop
16
+ MSG = 'Use `reverse_each` instead of `reverse.each`.'
17
+
18
+ def on_send(node)
19
+ receiver, second_method = *node
20
+ return unless second_method == :each
21
+ return if receiver.nil?
22
+ _, first_method = *receiver
23
+ return unless first_method == :reverse
24
+
25
+ source_buffer = node.loc.expression.source_buffer
26
+ location_of_reverse = receiver.loc.selector.begin_pos
27
+ end_location = node.loc.selector.end_pos
28
+
29
+ range = Parser::Source::Range.new(source_buffer,
30
+ location_of_reverse,
31
+ end_location)
32
+ add_offense(node, range, MSG)
33
+ end
34
+
35
+ def autocorrect(node)
36
+ @corrections << lambda do |corrector|
37
+ corrector.replace(node.loc.dot, '_')
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Performance
6
+ # This cop is used to identify usages of `shuffle.first` and
7
+ # change them to use `sample` instead.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # [1, 2, 3].shuffle.first
12
+ # [1, 2, 3].shuffle.last
13
+ # [1, 2, 3].shuffle[0]
14
+ #
15
+ # # good
16
+ # [1, 2, 3].sample
17
+ class Sample < Cop
18
+ MSG = 'Use `sample` instead of `shuffle.%s`.'
19
+ MSG_SELECTOR = 'Use `sample` instead of `shuffle[%s]`.'
20
+ ARRAY_SELECTORS = [:first, :last, :[]]
21
+
22
+ def on_send(node)
23
+ receiver, second_method, selector = *node
24
+ return unless ARRAY_SELECTORS.include?(second_method)
25
+ return if receiver.nil?
26
+ _array, first_method = *receiver
27
+ return unless first_method == :shuffle
28
+
29
+ begin_of_offense = receiver.loc.selector.begin_pos
30
+ end_of_offense = node.loc.selector.end_pos
31
+ range = Parser::Source::Range.new(node.loc.expression.source_buffer,
32
+ begin_of_offense,
33
+ end_of_offense)
34
+
35
+ message = if second_method == :[]
36
+ format(MSG_SELECTOR, selector.loc.expression.source)
37
+ else
38
+ format(MSG, second_method)
39
+ end
40
+
41
+ add_offense(node, range, message)
42
+ end
43
+
44
+ def autocorrect(node)
45
+ receiver, = *node
46
+ location_of_shuffle = receiver.loc.selector.begin_pos
47
+ range = Parser::Source::Range.new(node.loc.expression.source_buffer,
48
+ location_of_shuffle,
49
+ node.loc.selector.end_pos)
50
+
51
+ @corrections << lambda do |corrector|
52
+ corrector.replace(range, 'sample')
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end