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
@@ -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 `count` on an
7
+ # `Array` and `Hash` and change them to `size`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # [1, 2, 3].count
12
+ #
13
+ # # bad
14
+ # {a: 1, b: 2, c: 3}.count
15
+ #
16
+ # # good
17
+ # [1, 2, 3].size
18
+ #
19
+ # # good
20
+ # {a: 1, b: 2, c: 3}.size
21
+ #
22
+ # # good
23
+ # [1, 2, 3].count { |e| e > 2 }
24
+ # TODO: Add advanced detection of variables that could
25
+ # have been assigned to an array or a hash.
26
+ class Size < Cop
27
+ MSG = 'Use `size` instead of `count`.'
28
+
29
+ def on_send(node)
30
+ receiver, method = *node
31
+
32
+ return if receiver.nil?
33
+ return unless method == :count
34
+ return unless array?(receiver) || hash?(receiver)
35
+ return if node.parent && node.parent.block_type?
36
+
37
+ add_offense(node, node.loc.selector)
38
+ end
39
+
40
+ def autocorrect(node)
41
+ @corrections << lambda do |corrector|
42
+ corrector.replace(node.loc.selector, 'size')
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def array?(node)
49
+ receiver, method = *node
50
+ _, constant = *receiver
51
+
52
+ node.array_type? || constant == :Array || method == :to_a
53
+ end
54
+
55
+ def hash?(node)
56
+ receiver, method = *node
57
+ _, constant = *receiver
58
+
59
+ node.hash_type? || constant == :Hash || method == :to_h
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,121 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rails
6
+ # This cop checks for the correct use of Date methods,
7
+ # such as Date.today, Date.current etc.
8
+ #
9
+ # Using Date.today is dangerous, because it doesn't know anything about
10
+ # Rails time zone. You must use Time.zone.today instead.
11
+ #
12
+ # The cop also reports warnings when you are using 'to_time' method,
13
+ # because it doesn't know about Rails time zone too.
14
+ #
15
+ # Two styles are supported for this cop. When EnforcedStyle is 'always'
16
+ # then the Date methods (today, current, yesterday, tomorrow)
17
+ # are prohibited and the usage of both 'to_time'
18
+ # and 'to_time_in_current_zone' is reported as warning.
19
+ #
20
+ # When EnforcedStyle is 'acceptable' then only 'Date.today' is prohibited
21
+ # and only 'to_time' is reported as warning.
22
+ #
23
+ # @example
24
+ # # no offense
25
+ # Time.zone.today
26
+ # Time.zone.today - 1.day
27
+ #
28
+ # # acceptable
29
+ # Date.current
30
+ # Date.yesterday
31
+ #
32
+ # # always reports offense
33
+ # Date.today
34
+ # date.to_time
35
+ #
36
+ # # reports offense only when style is 'always'
37
+ # date.to_time_in_current_zone
38
+ class Date < Cop
39
+ include ConfigurableEnforcedStyle
40
+
41
+ MSG = 'Do not use `%s` without zone. Use `%s` instead.'
42
+
43
+ MSG_SEND = 'Do not use `%s` on Date objects,' \
44
+ 'because it knows nothing about time zone in use.'
45
+
46
+ BAD_DAYS = [:today, :current, :yesterday, :tomorrow]
47
+
48
+ def on_const(node)
49
+ _, klass = *node.children
50
+
51
+ return unless method_send?(node)
52
+
53
+ check_date_node(node.parent) if klass == :Date
54
+ end
55
+
56
+ def on_send(node)
57
+ method_name = extract_method(node)
58
+ return unless bad_methods.include?(method_name)
59
+
60
+ add_offense(node, :selector,
61
+ format(MSG_SEND,
62
+ method_name
63
+ )
64
+ )
65
+ end
66
+
67
+ private
68
+
69
+ def check_date_node(node)
70
+ chain = extract_method_chain(node)
71
+ return if (chain & bad_days).empty?
72
+
73
+ method_name = *(chain & bad_days)
74
+
75
+ add_offense(node, :selector,
76
+ format(MSG,
77
+ "Date.#{method_name}",
78
+ 'Time.zone.today')
79
+ )
80
+ end
81
+
82
+ def extract_method_chain(node)
83
+ chain = []
84
+ p = node
85
+ while !p.nil? && p.send_type?
86
+ chain << extract_method(p)
87
+ p = p.parent
88
+ end
89
+ chain
90
+ end
91
+
92
+ def extract_method(node)
93
+ _receiver, method_name, *_args = *node
94
+ method_name
95
+ end
96
+
97
+ # checks that parent node of send_type
98
+ # and receiver is the given node
99
+ def method_send?(node)
100
+ return false unless node.parent.send_type?
101
+
102
+ receiver, _method_name, *_args = *node.parent
103
+
104
+ receiver == node
105
+ end
106
+
107
+ def good_days
108
+ style == :always ? [] : [:current, :yesterday, :tomorrow]
109
+ end
110
+
111
+ def bad_days
112
+ BAD_DAYS - good_days
113
+ end
114
+
115
+ def bad_methods
116
+ style == :always ? [:to_time, :to_time_in_current_zone] : [:to_time]
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rails
6
+ # This cop is used to identify usages of `where.first` and
7
+ # change them to use `find_by` instead.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # User.where(name: 'Bruce').first
12
+ # User.where(name: 'Bruce').take
13
+ #
14
+ # # good
15
+ # User.find_by(name: 'Bruce')
16
+ class FindBy < Cop
17
+ MSG = 'Use `find_by` instead of `where.%s`.'
18
+ TARGET_SELECTORS = [:first, :take]
19
+
20
+ def on_send(node)
21
+ receiver, second_method, _selector = *node
22
+ return unless TARGET_SELECTORS.include?(second_method)
23
+ return if receiver.nil?
24
+ _scope, first_method = *receiver
25
+ return unless first_method == :where
26
+ begin_of_offense = receiver.loc.selector.begin_pos
27
+ end_of_offense = node.loc.selector.end_pos
28
+ range = Parser::Source::Range.new(node.loc.expression.source_buffer,
29
+ begin_of_offense,
30
+ end_of_offense)
31
+
32
+ add_offense(node, range, format(MSG, second_method))
33
+ end
34
+
35
+ def autocorrect(node)
36
+ receiver, = *node
37
+ where_loc = receiver.loc.selector
38
+ first_loc = Parser::Source::Range.new(
39
+ node.loc.expression.source_buffer,
40
+ node.loc.dot.begin_pos,
41
+ node.loc.selector.end_pos
42
+ )
43
+
44
+ @corrections << lambda do |corrector|
45
+ corrector.replace(where_loc, 'find_by')
46
+ corrector.replace(first_loc, '')
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rails
6
+ # This cop is used to identify usages of `all.each` and
7
+ # change them to use `all.find_each` instead.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # User.all.each
12
+ #
13
+ # # good
14
+ # User.all.find_each
15
+ class FindEach < Cop
16
+ MSG = 'Use `find_each` instead of `each`.'
17
+
18
+ SCOPE_METHODS = [:all, :where]
19
+
20
+ def on_send(node)
21
+ receiver, second_method, _selector = *node
22
+ return unless second_method == :each
23
+ return if receiver.nil?
24
+
25
+ _model, first_method = *receiver
26
+ return unless SCOPE_METHODS.include?(first_method)
27
+
28
+ add_offense(node, node.loc.selector, MSG)
29
+ end
30
+
31
+ def autocorrect(node)
32
+ each_loc = node.loc.selector
33
+
34
+ @corrections << lambda do |corrector|
35
+ corrector.replace(each_loc, 'find_each')
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,93 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rails
6
+ # This cop checks for the use of Time methods without zone.
7
+ #
8
+ # Built on top of Ruby on Rails style guide (https://github.com/bbatsov/rails-style-guide#time)
9
+ # and the article http://danilenko.org/2012/7/6/rails_timezones/ .
10
+ #
11
+ # Two styles are supported for this cop. When EnforcedStyle is 'always'
12
+ # then only use of Time.zone is allowed.
13
+ #
14
+ # When EnforcedStyle is 'acceptable' then it's also allowed
15
+ # to use Time.in_time_zone.
16
+ #
17
+ # @example
18
+ # # always offense
19
+ # Time.now
20
+ # Time.parse('2015-03-02 19:05:37')
21
+ #
22
+ # # no offense
23
+ # Time.zone.now
24
+ # Time.zone.parse('2015-03-02 19:05:37')
25
+ #
26
+ # # no offense only if style is 'acceptable'
27
+ # DateTime.strptime(str, "%Y-%m-%d %H:%M %Z").in_time_zone
28
+ # Time.at(timestamp).in_time_zone
29
+ class TimeZone < Cop
30
+ include ConfigurableEnforcedStyle
31
+
32
+ MSG = 'Do not use `%s` without zone. Use `%s` instead.'
33
+
34
+ TIMECLASS = [:Time, :DateTime]
35
+
36
+ DANGER_METHODS = [:now, :local, :new, :strptime, :parse, :at]
37
+
38
+ def on_const(node)
39
+ _module, klass = *node
40
+
41
+ return unless method_send?(node)
42
+
43
+ check_time_node(klass, node.parent) if TIMECLASS.include?(klass)
44
+ end
45
+
46
+ private
47
+
48
+ def check_time_node(klass, node)
49
+ chain = extract_method_chain(node)
50
+ return if (chain & DANGER_METHODS).empty? ||
51
+ !(chain & good_methods).empty?
52
+
53
+ method_name = *(chain & DANGER_METHODS)
54
+
55
+ add_offense(node, :selector,
56
+ format(MSG,
57
+ "#{klass}.#{method_name}",
58
+ "#Time.zone.#{method_name}")
59
+ )
60
+ end
61
+
62
+ def extract_method_chain(node)
63
+ chain = []
64
+ p = node
65
+ while !p.nil? && p.send_type?
66
+ chain << extract_method(p)
67
+ p = p.parent
68
+ end
69
+ chain
70
+ end
71
+
72
+ def extract_method(node)
73
+ _receiver, method_name, *_args = *node
74
+ method_name
75
+ end
76
+
77
+ # checks that parent node of send_type
78
+ # and receiver is the given node
79
+ def method_send?(node)
80
+ return false unless node.parent.send_type?
81
+
82
+ receiver, _method_name, *_args = *node.parent
83
+
84
+ receiver == node
85
+ end
86
+
87
+ def good_methods
88
+ style == :always ? [:zone] : [:zone, :in_time_zone]
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for cases when you could use a block
7
+ # accepting version of a method that does automatic
8
+ # resource cleanup.
9
+ #
10
+ # @example
11
+ #
12
+ # # bad
13
+ # f = File.open('file')
14
+ #
15
+ # # good
16
+ # f = File.open('file') do
17
+ # ...
18
+ # end
19
+ class AutoResourceCleanup < Cop
20
+ include AST::Sexp
21
+ MSG = 'Use the block version of `%s.%s`.'
22
+
23
+ TARGET_METHODS = [
24
+ [:File, :open]
25
+ ]
26
+
27
+ def on_send(node)
28
+ receiver_node, method_name, *_arg_nodes = *node
29
+
30
+ TARGET_METHODS.each do |(target_class, target_method)|
31
+ target_receiver = s(:const, nil, target_class)
32
+
33
+ next if receiver_node != target_receiver
34
+ next if method_name != target_method
35
+ next if node.parent && node.parent.block_type?
36
+
37
+ add_offense(node,
38
+ :expression,
39
+ format(MSG, target_class, target_method))
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,186 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Check for uses of braces or do/end around single line or
7
+ # multi-line blocks.
8
+ class BlockDelimiters < Cop
9
+ include ConfigurableEnforcedStyle
10
+ include AutocorrectUnlessChangingAST
11
+
12
+ def on_send(node)
13
+ _receiver, method_name, *args = *node
14
+ return unless args.any?
15
+
16
+ block = get_block(args.last)
17
+ return unless block && !parentheses?(node) && !operator?(method_name)
18
+
19
+ # If there are no parentheses around the arguments, then braces and
20
+ # do-end have different meaning due to how they bind, so we allow
21
+ # either.
22
+ ignore_node(block)
23
+ end
24
+
25
+ def on_block(node)
26
+ return if ignored_node?(node)
27
+
28
+ if proper_block_style?(node)
29
+ correct_style_detected
30
+ else
31
+ add_offense(node, :begin) { opposite_style_detected }
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def message(node)
38
+ block_begin = node.loc.begin.source
39
+ block_length = Util.block_length(node)
40
+
41
+ case style
42
+ when :line_count_based
43
+ if block_length > 0
44
+ 'Avoid using `{...}` for multi-line blocks.'
45
+ else
46
+ 'Prefer `{...}` over `do...end` for single-line blocks.'
47
+ end
48
+ when :semantic
49
+ if block_begin == '{'
50
+ 'Prefer `do...end` over `{...}` for procedural blocks.'
51
+ else
52
+ 'Prefer `{...}` over `do...end` for functional blocks.'
53
+ end
54
+ end
55
+ end
56
+
57
+ def correction(node)
58
+ lambda do |corrector|
59
+ b, e = node.loc.begin, node.loc.end
60
+ if b.is?('{')
61
+ # If the left brace is not preceded by a whitespace character,
62
+ # then we need a space before `do` to get valid Ruby code.
63
+ if b.source_buffer.source[b.begin_pos - 1, 1] =~ /\S/
64
+ corrector.insert_before(b, ' ')
65
+ end
66
+ corrector.replace(b, 'do')
67
+ corrector.replace(e, 'end')
68
+ else
69
+ corrector.replace(b, '{')
70
+ corrector.replace(e, '}')
71
+ end
72
+ end
73
+ end
74
+
75
+ def get_block(node)
76
+ case node.type
77
+ when :block
78
+ node
79
+ when :send
80
+ receiver, _method_name, *_args = *node
81
+ get_block(receiver) if receiver
82
+ end
83
+ end
84
+
85
+ def parentheses?(send_node)
86
+ send_node.loc.begin
87
+ end
88
+
89
+ def operator?(method_name)
90
+ method_name =~ /^\W/
91
+ end
92
+
93
+ def proper_block_style?(node)
94
+ case style
95
+ when :line_count_based
96
+ line_count_based_block_style?(node)
97
+ when :semantic
98
+ semantic_block_style?(node)
99
+ end
100
+ end
101
+
102
+ def line_count_based_block_style?(node)
103
+ block_length = Util.block_length(node)
104
+ block_begin = node.loc.begin.source
105
+
106
+ if block_length > 0
107
+ block_begin != '{'
108
+ else
109
+ block_begin == '{'
110
+ end
111
+ end
112
+
113
+ def semantic_block_style?(node)
114
+ method_name = extract_method_name_from_block(node)
115
+ return true if ignored_method?(method_name)
116
+
117
+ block_begin = node.loc.begin.source
118
+
119
+ if block_begin == '{'
120
+ functional_method?(method_name) || functional_block?(node)
121
+ else
122
+ procedural_method?(method_name) || !return_value_used?(node)
123
+ end
124
+ end
125
+
126
+ def extract_method_name_from_block(block)
127
+ node, _args, _body = *block
128
+ _receiver, method_name, *_args = *node
129
+
130
+ method_name
131
+ end
132
+
133
+ def ignored_method?(method_name)
134
+ ignored_methods.include?(method_name)
135
+ end
136
+
137
+ def functional_method?(method_name)
138
+ functional_methods.include?(method_name)
139
+ end
140
+
141
+ def functional_block?(node)
142
+ return_value_used?(node) || return_value_of_scope?(node)
143
+ end
144
+
145
+ def procedural_method?(method_name)
146
+ procedural_methods.include?(method_name)
147
+ end
148
+
149
+ def return_value_used?(node)
150
+ return unless node.parent
151
+
152
+ # If there are parentheses around the block, check if that
153
+ # is being used.
154
+ if node.parent.begin_type?
155
+ return_value_used?(node.parent)
156
+ else
157
+ Util::ASGN_NODES.include?(node.parent.type) ||
158
+ node.parent.send_type?
159
+ end
160
+ end
161
+
162
+ def return_value_of_scope?(node)
163
+ return unless node.parent
164
+
165
+ conditional?(node.parent) || node.parent.children.last == node
166
+ end
167
+
168
+ def procedural_methods
169
+ cop_config['ProceduralMethods'].map(&:to_sym)
170
+ end
171
+
172
+ def functional_methods
173
+ cop_config['FunctionalMethods'].map(&:to_sym)
174
+ end
175
+
176
+ def ignored_methods
177
+ cop_config['IgnoredMethods'].map(&:to_sym)
178
+ end
179
+
180
+ def conditional?(node)
181
+ node.if_type? || node.or_type? || node.and_type?
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end