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
@@ -3,81 +3,112 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for regexp literals and reports offenses based
7
- # on how many escaped slashes there are in the regexp and on the
8
- # value of the configuration parameter MaxSlashes.
6
+ # This cop enforces using // or %r around regular expressions.
7
+ #
8
+ # @example
9
+ # # Good if EnforcedStyle is slashes or mixed, bad if percent_r.
10
+ # snake_case = /^[\dA-Z_]+$/
11
+ #
12
+ # # Good if EnforcedStyle is percent_r, bad if slashes or mixed.
13
+ # snake_case = %r{^[\dA-Z_]+$}
14
+ #
15
+ # # Good if EnforcedStyle is slashes, bad if percent_r or mixed.
16
+ # regex = /
17
+ # foo
18
+ # (bar)
19
+ # (baz)
20
+ # /x
21
+ #
22
+ # # Good if EnforcedStyle is percent_r or mixed, bad if slashes.
23
+ # regex = %r{
24
+ # foo
25
+ # (bar)
26
+ # (baz)
27
+ # }x
28
+ #
29
+ # # Bad unless AllowInnerSlashes is true.
30
+ # x =~ /home\//
9
31
  class RegexpLiteral < Cop
10
- class << self
11
- attr_accessor :slash_count
12
- end
32
+ include ConfigurableEnforcedStyle
33
+
34
+ MSG_USE_SLASHES = 'Use `//` around regular expression.'
35
+ MSG_USE_PERCENT_R = 'Use `%r` around regular expression.'
13
36
 
14
37
  def on_regexp(node)
15
- string_parts = node.children.select { |child| child.type == :str }
16
- total_string = string_parts.map { |s| s.loc.expression.source }.join
17
- slashes = total_string.count('/')
18
- delimiter_start = node.loc.begin.source[0]
19
-
20
- if delimiter_start == '/'
21
- if slashes > max_slashes
22
- add_offense(node, :expression, error_message(''))
23
- end
24
- elsif slashes <= max_slashes
25
- add_offense(node, :expression, error_message('only '))
38
+ if slash_literal?(node)
39
+ check_slash_literal(node)
40
+ else
41
+ check_percent_r_literal(node)
26
42
  end
27
-
28
- configure_max(delimiter_start, slashes) if @options[:auto_gen_config]
29
43
  end
30
44
 
31
45
  private
32
46
 
33
- def max_slashes
34
- m = cop_config['MaxSlashes']
35
- unless m.is_a?(Fixnum) && m >= 0
36
- fail "Illegal value for MaxSlashes: #{m}"
37
- end
38
- m
47
+ def check_slash_literal(node)
48
+ return if style == :slashes && !contains_disallowed_slash?(node)
49
+ return if style == :mixed &&
50
+ single_line?(node) &&
51
+ !contains_disallowed_slash?(node)
52
+
53
+ add_offense(node, :expression, MSG_USE_PERCENT_R)
39
54
  end
40
55
 
41
- def configure_max(delimiter_start, value)
42
- self.class.slash_count ||= {
43
- '/' => Set.new([0]),
44
- '%' => Set.new([100_000])
45
- }
56
+ def check_percent_r_literal(node)
57
+ return if style == :slashes && contains_disallowed_slash?(node)
58
+ return if style == :percent_r
59
+ return if style == :mixed && multi_line?(node)
60
+ return if style == :mixed && contains_disallowed_slash?(node)
46
61
 
47
- self.class.slash_count[delimiter_start].add(value)
62
+ add_offense(node, :expression, MSG_USE_SLASHES)
63
+ end
48
64
 
49
- # To avoid reports, MaxSlashes must be set equal to the highest
50
- # number of slashes used within //, and also one less than the
51
- # highest number of slashes used within %r{}. If no value can satisfy
52
- # both requirements, just disable.
53
- max = self.class.slash_count['/'].max
54
- min = self.class.slash_count['%'].min
65
+ def contains_disallowed_slash?(node)
66
+ !allow_inner_slashes? && contains_slash?(node)
67
+ end
55
68
 
56
- self.config_to_allow_offenses = calculate_config(max, min)
69
+ def contains_slash?(node)
70
+ node_body(node).include?('/')
57
71
  end
58
72
 
59
- def calculate_config(max, min)
60
- if max > max_slashes
61
- if max < min
62
- { 'MaxSlashes' => max }
63
- else
64
- { 'Enabled' => false }
65
- end
66
- elsif min < max_slashes + 1
67
- if max < min
68
- { 'MaxSlashes' => min - 1 }
69
- else
70
- { 'Enabled' => false }
71
- end
72
- end
73
+ def allow_inner_slashes?
74
+ cop_config['AllowInnerSlashes']
75
+ end
76
+
77
+ def node_body(node)
78
+ string_parts = node.children.select { |child| child.type == :str }
79
+ string_parts.map { |s| s.loc.expression.source }.join
73
80
  end
74
81
 
75
- def error_message(word)
76
- format('Use %%r %sfor regular expressions matching more ' \
77
- "than %d '/' character%s.",
78
- word,
79
- max_slashes,
80
- max_slashes == 1 ? '' : 's')
82
+ def slash_literal?(node)
83
+ node.loc.begin.source == '/'
84
+ end
85
+
86
+ def single_line?(node)
87
+ !multi_line?(node)
88
+ end
89
+
90
+ def multi_line?(node)
91
+ block_length(node) > 1
92
+ end
93
+
94
+ def preferred_delimiters
95
+ config.for_cop('Style/PercentLiteralDelimiters') \
96
+ ['PreferredDelimiters']['%r'].split(//)
97
+ end
98
+
99
+ def autocorrect(node)
100
+ fail CorrectionNotPossible if contains_slash?(node)
101
+
102
+ if slash_literal?(node)
103
+ replacement = ['%r', ''].zip(preferred_delimiters).map(&:join)
104
+ else
105
+ replacement = %w(/ /)
106
+ end
107
+
108
+ @corrections << lambda do |corrector|
109
+ corrector.replace(node.loc.begin, replacement.first)
110
+ corrector.replace(node.loc.end, replacement.last)
111
+ end
81
112
  end
82
113
  end
83
114
  end
@@ -58,12 +58,23 @@ module RuboCop
58
58
  with_space = range_with_surrounding_space(op)
59
59
  if op.is?('**')
60
60
  unless with_space.is?('**')
61
- add_offense(with_space, op, 'Space around operator ** detected.')
61
+ add_offense(with_space, op,
62
+ 'Space around operator `**` detected.')
62
63
  end
63
64
  elsif with_space.source !~ /^\s.*\s$/
64
65
  add_offense(with_space, op,
65
66
  'Surrounding space missing for operator' \
66
- " '#{op.source}'.")
67
+ " `#{op.source}`.")
68
+ elsif with_space.source =~ /(^ | $)/ && !multi_space_operator?(op)
69
+ add_offense(with_space, op,
70
+ "Operator `#{op.source}` should be surrounded" \
71
+ ' with a single space.')
72
+ end
73
+ end
74
+
75
+ def multi_space_operator?(op)
76
+ cop_config['MultiSpaceAllowedForOperators'].any? do |multi_space_op|
77
+ op.is?(multi_space_op)
67
78
  end
68
79
  end
69
80
 
@@ -11,11 +11,11 @@ module RuboCop
11
11
  def on_block(node)
12
12
  return if node.loc.begin.is?('do') # No braces.
13
13
 
14
- # If braces are on separate lines, and the Blocks cop is enabled,
15
- # those braces will be changed to do..end by the user or by
14
+ # If braces are on separate lines, and the BlockDelimiters cop is
15
+ # enabled, those braces will be changed to do..end by the user or by
16
16
  # auto-correct, so reporting space issues is not useful, and it
17
17
  # creates auto-correct conflicts.
18
- if config.for_cop('Style/Blocks')['Enabled'] &&
18
+ if config.for_cop('Style/BlockDelimiters')['Enabled'] &&
19
19
  Util.block_length(node) > 0
20
20
  return
21
21
  end
@@ -14,11 +14,11 @@ module RuboCop
14
14
  def on_block(node)
15
15
  return if node.loc.begin.is?('do') # No braces.
16
16
 
17
- # If braces are on separate lines, and the Blocks cop is enabled,
18
- # those braces will be changed to do..end by the user or by
17
+ # If braces are on separate lines, and the BlockDelimiters cop is
18
+ # enabled, those braces will be changed to do..end by the user or by
19
19
  # auto-correct, so reporting space issues is not useful, and it
20
20
  # creates auto-correct conflicts.
21
- if config.for_cop('Style/Blocks')['Enabled'] &&
21
+ if config.for_cop('Style/BlockDelimiters')['Enabled'] &&
22
22
  Util.block_length(node) > 0
23
23
  return
24
24
  end
@@ -80,7 +80,9 @@ module RuboCop
80
80
  if left_brace.end_pos == args_delimiter.begin_pos &&
81
81
  cop_config['SpaceBeforeBlockParameters']
82
82
  offense(sb, left_brace.begin_pos, args_delimiter.end_pos,
83
- 'Space between { and | missing.')
83
+ 'Space between { and | missing.') do
84
+ opposite_style_detected
85
+ end
84
86
  end
85
87
  else
86
88
  # We indicate the position after the left brace. Otherwise it's
@@ -95,7 +97,9 @@ module RuboCop
95
97
  if pipe?(args_delimiter)
96
98
  unless cop_config['SpaceBeforeBlockParameters']
97
99
  offense(sb, left_brace.end_pos, args_delimiter.begin_pos,
98
- 'Space between { and | detected.')
100
+ 'Space between { and | detected.') do
101
+ opposite_style_detected
102
+ end
99
103
  end
100
104
  else
101
105
  brace_with_space = range_with_surrounding_space(left_brace, :right)
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop checks symbol literal syntax.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # :"symbol"
12
+ #
13
+ # # good
14
+ # :symbol
15
+ class SymbolLiteral < Cop
16
+ MSG = 'Do not use strings for word-like symbol literals.'
17
+
18
+ def on_sym(node)
19
+ sym_name = node.loc.expression.source
20
+
21
+ return unless sym_name =~ /\A:["'][A-Za-z_]\w*["']\z/
22
+
23
+ add_offense(node, :expression)
24
+ end
25
+
26
+ def autocorrect(node)
27
+ @corrections << lambda do |corrector|
28
+ current_name = node.loc.expression.source
29
+ corrector.replace(node.loc.expression,
30
+ current_name.gsub(/["']/, ''))
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -12,6 +12,13 @@ module RuboCop
12
12
  sb = processed_source.buffer
13
13
  return if sb.source.empty?
14
14
 
15
+ # The extra text that comes after the last token could be __END__
16
+ # followed by some data to read. If so, we don't check it because
17
+ # there could be good reasons why it needs to end with a certain
18
+ # number of newlines.
19
+ extra = sb.source[processed_source.tokens.last.pos.end_pos..-1]
20
+ return if extra.strip.start_with?('__END__')
21
+
15
22
  whitespace_at_end = sb.source[/\s*\Z/]
16
23
  blank_lines = whitespace_at_end.count("\n") - 1
17
24
  wanted_blank_lines = style == :final_newline ? 0 : 1
@@ -8,12 +8,14 @@ module RuboCop
8
8
  # @example
9
9
  # # always bad
10
10
  # a = [1, 2,]
11
- # b = [
11
+ #
12
+ # # good if EnforcedStyleForMultiline is consistent_comma
13
+ # a = [
12
14
  # 1, 2,
13
15
  # 3,
14
16
  # ]
15
17
  #
16
- # # good if EnforcedStyleForMultiline is comma
18
+ # # good if EnforcedStyleForMultiline is comma or consistent_comma
17
19
  # a = [
18
20
  # 1,
19
21
  # 2,
@@ -66,6 +68,7 @@ module RuboCop
66
68
  node.loc.end.begin_pos)
67
69
  end
68
70
 
71
+ # rubocop:disable Metrics/MethodLength
69
72
  def check(node, items, kind, begin_pos, end_pos)
70
73
  sb = items.first.loc.expression.source_buffer
71
74
  after_last_item = Parser::Source::Range.new(sb, begin_pos, end_pos)
@@ -73,11 +76,17 @@ module RuboCop
73
76
  return if heredoc?(after_last_item.source)
74
77
 
75
78
  comma_offset = after_last_item.source =~ /,/
76
- should_have_comma = style == :comma && multiline?(node)
79
+ should_have_comma =
80
+ [:comma, :consistent_comma].include?(style) && multiline?(node)
77
81
  if comma_offset
78
82
  unless should_have_comma
79
- extra_info = if style == :comma
83
+ extra_info = case style
84
+ when :comma
80
85
  ', unless each item is on its own line'
86
+ when :consistent_comma
87
+ ', unless items are split onto multiple lines'
88
+ else
89
+ ''
81
90
  end
82
91
  avoid_comma(kind, after_last_item.begin_pos + comma_offset, sb,
83
92
  extra_info)
@@ -86,6 +95,7 @@ module RuboCop
86
95
  put_comma(items, kind, sb)
87
96
  end
88
97
  end
98
+ # rubocop:enable Metrics/MethodLength
89
99
 
90
100
  def heredoc?(source_after_last_item)
91
101
  source_after_last_item =~ /\w/
@@ -106,9 +116,13 @@ module RuboCop
106
116
  else
107
117
  node.children
108
118
  end
109
- items = [*elements.map { |e| e.loc.expression }, node.loc.end]
110
- items.each_cons(2) { |a, b| return false if on_same_line?(a, b) }
111
- true
119
+ items = elements.map { |e| e.loc.expression }
120
+ if style == :consistent_comma
121
+ items.each_cons(2).any? { |a, b| !on_same_line?(a, b) }
122
+ else
123
+ items << node.loc.end
124
+ items.each_cons(2).all? { |a, b| !on_same_line?(a, b) }
125
+ end
112
126
  end
113
127
 
114
128
  def on_same_line?(a, b)
@@ -6,10 +6,19 @@ module RuboCop
6
6
  # This cop looks for trivial reader/writer methods, that could
7
7
  # have been created with the attr_* family of functions automatically.
8
8
  class TrivialAccessors < Cop
9
- include OnMethodDef
10
-
11
9
  MSG = 'Use `attr_%s` to define trivial %s methods.'
12
10
 
11
+ def on_def(node)
12
+ method_name, args, body = *node
13
+ on_method_def(node, method_name, args, body)
14
+ end
15
+
16
+ def on_defs(node)
17
+ return if ignore_class_methods?
18
+ _scope, method_name, args, body = *node
19
+ on_method_def(node, method_name, args, body)
20
+ end
21
+
13
22
  private
14
23
 
15
24
  def on_method_def(node, method_name, args, body)
@@ -35,6 +44,10 @@ module RuboCop
35
44
  cop_config['AllowDSLWriters']
36
45
  end
37
46
 
47
+ def ignore_class_methods?
48
+ cop_config['IgnoreClassMethods']
49
+ end
50
+
38
51
  def whitelist
39
52
  whitelist = cop_config['Whitelist']
40
53
  Array(whitelist).map(&:to_sym) + [:initialize]
@@ -65,7 +78,8 @@ module RuboCop
65
78
  end
66
79
 
67
80
  def looks_like_trivial_writer?(args, body)
68
- args.children.size == 1 && args.children[0].type != :restarg &&
81
+ args.children.size == 1 &&
82
+ ![:restarg, :blockarg].include?(args.children[0].type) &&
69
83
  body && body.type == :ivasgn &&
70
84
  body.children[1] && body.children[1].type == :lvar
71
85
  end
@@ -17,13 +17,11 @@ module RuboCop
17
17
  private
18
18
 
19
19
  def on_percent_literal(node)
20
- node.children.each do |string|
21
- if string.type == :dstr ||
22
- string.loc.expression.source =~ StringHelp::ESCAPED_CHAR_REGEXP
23
- return
24
- end
20
+ requires_interpolation = node.children.any? do |string|
21
+ string.type == :dstr ||
22
+ string.loc.expression.source =~ StringHelp::ESCAPED_CHAR_REGEXP
25
23
  end
26
- add_offense(node, :expression)
24
+ add_offense(node, :expression) unless requires_interpolation
27
25
  end
28
26
 
29
27
  def autocorrect(node)
@@ -17,6 +17,16 @@ module RuboCop
17
17
  check(node)
18
18
  end
19
19
 
20
+ def autocorrect(node)
21
+ cond, body = *node
22
+ @corrections << lambda do |corrector|
23
+ oneline = "#{body.loc.expression.source} " \
24
+ "#{node.loc.keyword.source} " +
25
+ cond.loc.expression.source
26
+ corrector.replace(node.loc.expression, oneline)
27
+ end
28
+ end
29
+
20
30
  private
21
31
 
22
32
  def check(node)