rubocop 0.49.1 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -9
  3. data/bin/rubocop +1 -1
  4. data/config/default.yml +264 -118
  5. data/config/disabled.yml +13 -9
  6. data/config/enabled.yml +1156 -918
  7. data/lib/rubocop.rb +555 -489
  8. data/lib/rubocop/ast/builder.rb +6 -1
  9. data/lib/rubocop/ast/node.rb +68 -52
  10. data/lib/rubocop/ast/node/args_node.rb +15 -10
  11. data/lib/rubocop/ast/node/array_node.rb +10 -1
  12. data/lib/rubocop/ast/node/block_node.rb +9 -0
  13. data/lib/rubocop/ast/node/def_node.rb +71 -0
  14. data/lib/rubocop/ast/node/for_node.rb +8 -0
  15. data/lib/rubocop/ast/node/if_node.rb +10 -2
  16. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
  17. data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
  18. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
  19. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
  20. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +18 -31
  21. data/lib/rubocop/ast/node/regexp_node.rb +35 -0
  22. data/lib/rubocop/ast/node/send_node.rb +21 -150
  23. data/lib/rubocop/ast/node/str_node.rb +14 -0
  24. data/lib/rubocop/ast/node/super_node.rb +3 -24
  25. data/lib/rubocop/ast/node/symbol_node.rb +20 -0
  26. data/lib/rubocop/ast/node/yield_node.rb +21 -0
  27. data/lib/rubocop/ast/traversal.rb +7 -7
  28. data/lib/rubocop/cached_data.rb +1 -6
  29. data/lib/rubocop/cli.rb +59 -13
  30. data/lib/rubocop/comment_config.rb +2 -5
  31. data/lib/rubocop/config.rb +136 -29
  32. data/lib/rubocop/config_loader.rb +61 -104
  33. data/lib/rubocop/config_loader_resolver.rb +102 -4
  34. data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
  35. data/lib/rubocop/cop/bundler/duplicated_gem.rb +13 -11
  36. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
  37. data/lib/rubocop/cop/bundler/ordered_gems.rb +7 -58
  38. data/lib/rubocop/cop/commissioner.rb +6 -3
  39. data/lib/rubocop/cop/cop.rb +11 -6
  40. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
  41. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +97 -0
  42. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
  43. data/lib/rubocop/cop/generator.rb +122 -25
  44. data/lib/rubocop/cop/internal_affairs.rb +6 -2
  45. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
  46. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +16 -5
  47. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  48. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +59 -0
  49. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
  50. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
  51. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -10
  52. data/lib/rubocop/cop/layout/align_array.rb +2 -2
  53. data/lib/rubocop/cop/layout/align_hash.rb +18 -18
  54. data/lib/rubocop/cop/layout/align_parameters.rb +11 -23
  55. data/lib/rubocop/cop/layout/block_end_newline.rb +20 -6
  56. data/lib/rubocop/cop/layout/case_indentation.rb +15 -18
  57. data/lib/rubocop/cop/layout/class_structure.rb +306 -0
  58. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +7 -6
  59. data/lib/rubocop/cop/layout/comment_indentation.rb +42 -3
  60. data/lib/rubocop/cop/layout/dot_position.rb +31 -13
  61. data/lib/rubocop/cop/layout/else_alignment.rb +37 -17
  62. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +1 -1
  63. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +22 -18
  64. data/lib/rubocop/cop/layout/empty_lines.rb +16 -2
  65. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +23 -6
  66. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +89 -0
  67. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -2
  68. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +4 -8
  69. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +30 -5
  70. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +10 -6
  71. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +5 -5
  72. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +22 -7
  73. data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
  74. data/lib/rubocop/cop/layout/extra_spacing.rb +23 -26
  75. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +3 -3
  76. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +9 -3
  77. data/lib/rubocop/cop/layout/indent_array.rb +68 -21
  78. data/lib/rubocop/cop/layout/indent_hash.rb +71 -26
  79. data/lib/rubocop/cop/layout/indent_heredoc.rb +70 -35
  80. data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -2
  81. data/lib/rubocop/cop/layout/indentation_width.rb +40 -27
  82. data/lib/rubocop/cop/layout/initial_indentation.rb +10 -7
  83. data/lib/rubocop/cop/layout/leading_comment_space.rb +32 -17
  84. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +47 -14
  85. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +12 -11
  86. data/lib/rubocop/cop/layout/multiline_block_layout.rb +19 -16
  87. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +46 -13
  88. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +29 -27
  89. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +7 -3
  90. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -0
  91. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +12 -4
  92. data/lib/rubocop/cop/layout/space_after_colon.rb +13 -6
  93. data/lib/rubocop/cop/layout/space_after_comma.rb +11 -1
  94. data/lib/rubocop/cop/layout/space_after_method_name.rb +8 -6
  95. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  96. data/lib/rubocop/cop/layout/space_after_semicolon.rb +8 -1
  97. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +32 -25
  98. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +28 -17
  99. data/lib/rubocop/cop/layout/space_around_keyword.rb +22 -16
  100. data/lib/rubocop/cop/layout/space_around_operators.rb +27 -14
  101. data/lib/rubocop/cop/layout/space_before_block_braces.rb +61 -12
  102. data/lib/rubocop/cop/layout/space_before_comma.rb +12 -1
  103. data/lib/rubocop/cop/layout/space_before_comment.rb +10 -5
  104. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -4
  105. data/lib/rubocop/cop/layout/space_before_semicolon.rb +8 -1
  106. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +12 -14
  107. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +235 -0
  108. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +4 -4
  109. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +89 -18
  110. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +62 -36
  111. data/lib/rubocop/cop/layout/space_inside_parens.rb +40 -3
  112. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
  113. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +15 -15
  114. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +81 -0
  115. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +32 -17
  116. data/lib/rubocop/cop/layout/tab.rb +7 -4
  117. data/lib/rubocop/cop/layout/trailing_blank_lines.rb +11 -9
  118. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  119. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +12 -19
  120. data/lib/rubocop/cop/lint/assignment_in_condition.rb +16 -2
  121. data/lib/rubocop/cop/lint/block_alignment.rb +42 -30
  122. data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
  123. data/lib/rubocop/cop/lint/circular_argument_reference.rb +3 -14
  124. data/lib/rubocop/cop/lint/condition_position.rb +5 -1
  125. data/lib/rubocop/cop/lint/debugger.rb +18 -11
  126. data/lib/rubocop/cop/lint/def_end_alignment.rb +9 -14
  127. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +4 -4
  128. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +3 -3
  129. data/lib/rubocop/cop/lint/duplicate_methods.rb +75 -5
  130. data/lib/rubocop/cop/lint/duplicated_key.rb +1 -1
  131. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  132. data/lib/rubocop/cop/lint/else_layout.rb +3 -3
  133. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  134. data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
  135. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
  136. data/lib/rubocop/cop/lint/empty_when.rb +1 -1
  137. data/lib/rubocop/cop/lint/end_alignment.rb +13 -14
  138. data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
  139. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  140. data/lib/rubocop/cop/lint/float_out_of_range.rb +5 -5
  141. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +36 -41
  142. data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
  143. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  144. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +25 -20
  145. data/lib/rubocop/cop/lint/inherit_exception.rb +16 -19
  146. data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
  147. data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +21 -7
  148. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  149. data/lib/rubocop/cop/lint/loop.rb +1 -1
  150. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
  151. data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
  152. data/lib/rubocop/cop/lint/nested_method_definition.rb +6 -8
  153. data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
  154. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  155. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +4 -4
  156. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -3
  157. data/lib/rubocop/cop/lint/percent_string_array.rb +13 -22
  158. data/lib/rubocop/cop/lint/percent_symbol_array.rb +12 -12
  159. data/lib/rubocop/cop/lint/rand_one.rb +8 -2
  160. data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
  161. data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
  162. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  163. data/lib/rubocop/cop/lint/require_parentheses.rb +5 -3
  164. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  165. data/lib/rubocop/cop/lint/rescue_type.rb +18 -9
  166. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  167. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  168. data/lib/rubocop/cop/lint/script_permission.rb +8 -1
  169. data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
  170. data/lib/rubocop/cop/lint/shadowed_exception.rb +37 -10
  171. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
  172. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +7 -7
  173. data/lib/rubocop/cop/lint/syntax.rb +23 -20
  174. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
  175. data/lib/rubocop/cop/lint/unified_integer.rb +5 -4
  176. data/lib/rubocop/cop/lint/unneeded_disable.rb +41 -16
  177. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
  178. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +45 -19
  179. data/lib/rubocop/cop/lint/unreachable_code.rb +53 -8
  180. data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
  181. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +74 -0
  182. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  183. data/lib/rubocop/cop/lint/useless_access_modifier.rb +12 -16
  184. data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
  185. data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
  186. data/lib/rubocop/cop/lint/useless_setter_call.rb +15 -12
  187. data/lib/rubocop/cop/lint/void.rb +38 -27
  188. data/lib/rubocop/cop/message_annotator.rb +4 -2
  189. data/lib/rubocop/cop/metrics/abc_size.rb +2 -2
  190. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  191. data/lib/rubocop/cop/metrics/class_length.rb +3 -1
  192. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
  193. data/lib/rubocop/cop/metrics/line_length.rb +8 -5
  194. data/lib/rubocop/cop/metrics/method_length.rb +8 -3
  195. data/lib/rubocop/cop/metrics/module_length.rb +3 -1
  196. data/lib/rubocop/cop/metrics/parameter_lists.rb +14 -5
  197. data/lib/rubocop/cop/metrics/perceived_complexity.rb +2 -1
  198. data/lib/rubocop/cop/mixin/array_hash_indentation.rb +3 -2
  199. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +2 -2
  200. data/lib/rubocop/cop/mixin/code_length.rb +1 -1
  201. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
  202. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  203. data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
  204. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +14 -7
  205. data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
  206. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +8 -4
  207. data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -3
  208. data/lib/rubocop/cop/mixin/first_element_line_break.rb +12 -3
  209. data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
  210. data/lib/rubocop/cop/mixin/method_complexity.rb +33 -7
  211. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +74 -33
  212. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +34 -8
  213. data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -1
  214. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +67 -0
  215. data/lib/rubocop/cop/mixin/parentheses.rb +12 -0
  216. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -1
  217. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  218. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +9 -8
  219. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +11 -10
  220. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -17
  221. data/lib/rubocop/cop/mixin/string_help.rb +1 -1
  222. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  223. data/lib/rubocop/cop/mixin/surrounding_space.rb +95 -8
  224. data/lib/rubocop/cop/mixin/too_many_lines.rb +2 -2
  225. data/lib/rubocop/cop/mixin/trailing_comma.rb +25 -17
  226. data/lib/rubocop/cop/mixin/unused_argument.rb +6 -2
  227. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  228. data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +35 -2
  229. data/lib/rubocop/cop/{style/op_method.rb → naming/binary_operator_parameter_name.rb} +7 -6
  230. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
  231. data/lib/rubocop/cop/naming/constant_name.rb +58 -0
  232. data/lib/rubocop/cop/{style → naming}/file_name.rb +28 -13
  233. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  234. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
  235. data/lib/rubocop/cop/naming/method_name.rb +40 -0
  236. data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
  237. data/lib/rubocop/cop/naming/variable_name.rb +50 -0
  238. data/lib/rubocop/cop/{style → naming}/variable_number.rb +11 -28
  239. data/lib/rubocop/cop/offense.rb +6 -1
  240. data/lib/rubocop/cop/performance/caller.rb +39 -11
  241. data/lib/rubocop/cop/performance/case_when_splat.rb +3 -7
  242. data/lib/rubocop/cop/performance/casecmp.rb +9 -8
  243. data/lib/rubocop/cop/performance/compare_with_block.rb +23 -13
  244. data/lib/rubocop/cop/performance/count.rb +7 -4
  245. data/lib/rubocop/cop/performance/detect.rb +9 -6
  246. data/lib/rubocop/cop/performance/double_start_end_with.rb +12 -20
  247. data/lib/rubocop/cop/performance/end_with.rb +6 -6
  248. data/lib/rubocop/cop/performance/fixed_size.rb +1 -1
  249. data/lib/rubocop/cop/performance/flat_map.rb +5 -2
  250. data/lib/rubocop/cop/performance/hash_each_methods.rb +85 -40
  251. data/lib/rubocop/cop/performance/lstrip_rstrip.rb +9 -6
  252. data/lib/rubocop/cop/performance/range_include.rb +3 -3
  253. data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -28
  254. data/lib/rubocop/cop/performance/redundant_match.rb +13 -12
  255. data/lib/rubocop/cop/performance/redundant_merge.rb +44 -26
  256. data/lib/rubocop/cop/performance/redundant_sort_by.rb +9 -6
  257. data/lib/rubocop/cop/performance/regexp_match.rb +19 -10
  258. data/lib/rubocop/cop/performance/reverse_each.rb +1 -1
  259. data/lib/rubocop/cop/performance/sample.rb +1 -1
  260. data/lib/rubocop/cop/performance/size.rb +3 -3
  261. data/lib/rubocop/cop/performance/start_with.rb +6 -6
  262. data/lib/rubocop/cop/performance/string_replacement.rb +6 -6
  263. data/lib/rubocop/cop/performance/times_map.rb +32 -22
  264. data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
  265. data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
  266. data/lib/rubocop/cop/rails/action_filter.rb +23 -1
  267. data/lib/rubocop/cop/rails/active_support_aliases.rb +4 -5
  268. data/lib/rubocop/cop/rails/application_job.rb +5 -3
  269. data/lib/rubocop/cop/rails/application_record.rb +5 -3
  270. data/lib/rubocop/cop/rails/blank.rb +20 -17
  271. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
  272. data/lib/rubocop/cop/rails/date.rb +7 -6
  273. data/lib/rubocop/cop/rails/delegate.rb +53 -29
  274. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +4 -4
  275. data/lib/rubocop/cop/rails/dynamic_find_by.rb +2 -2
  276. data/lib/rubocop/cop/rails/enum_uniqueness.rb +4 -4
  277. data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
  278. data/lib/rubocop/cop/rails/exit.rb +8 -1
  279. data/lib/rubocop/cop/rails/file_path.rb +8 -11
  280. data/lib/rubocop/cop/rails/find_by.rb +2 -1
  281. data/lib/rubocop/cop/rails/find_each.rb +1 -1
  282. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +8 -1
  283. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +76 -0
  284. data/lib/rubocop/cop/rails/http_positional_arguments.rb +40 -44
  285. data/lib/rubocop/cop/rails/inverse_of.rb +96 -0
  286. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
  287. data/lib/rubocop/cop/rails/not_null_column.rb +6 -6
  288. data/lib/rubocop/cop/rails/output.rb +11 -2
  289. data/lib/rubocop/cop/rails/output_safety.rb +16 -21
  290. data/lib/rubocop/cop/rails/pluralization_grammar.rb +10 -10
  291. data/lib/rubocop/cop/rails/presence.rb +105 -0
  292. data/lib/rubocop/cop/rails/present.rb +14 -17
  293. data/lib/rubocop/cop/rails/read_write_attribute.rb +13 -13
  294. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +91 -0
  295. data/lib/rubocop/cop/rails/relative_date_constant.rb +11 -11
  296. data/lib/rubocop/cop/rails/request_referer.rb +3 -3
  297. data/lib/rubocop/cop/rails/reversible_migration.rb +36 -35
  298. data/lib/rubocop/cop/rails/safe_navigation.rb +7 -8
  299. data/lib/rubocop/cop/rails/save_bang.rb +19 -17
  300. data/lib/rubocop/cop/rails/scope_args.rb +2 -2
  301. data/lib/rubocop/cop/rails/skips_model_validations.rb +2 -2
  302. data/lib/rubocop/cop/rails/time_zone.rb +3 -2
  303. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +4 -2
  304. data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
  305. data/lib/rubocop/cop/rails/validation.rb +8 -8
  306. data/lib/rubocop/cop/registry.rb +2 -1
  307. data/lib/rubocop/cop/security/eval.rb +4 -4
  308. data/lib/rubocop/cop/security/json_load.rb +7 -5
  309. data/lib/rubocop/cop/security/marshal_load.rb +8 -6
  310. data/lib/rubocop/cop/security/yaml_load.rb +4 -4
  311. data/lib/rubocop/cop/style/alias.rb +49 -27
  312. data/lib/rubocop/cop/style/and_or.rb +65 -45
  313. data/lib/rubocop/cop/style/array_join.rb +10 -1
  314. data/lib/rubocop/cop/style/ascii_comments.rb +24 -4
  315. data/lib/rubocop/cop/style/attr.rb +15 -5
  316. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +7 -5
  317. data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -10
  318. data/lib/rubocop/cop/style/begin_block.rb +1 -1
  319. data/lib/rubocop/cop/style/block_comments.rb +17 -3
  320. data/lib/rubocop/cop/style/block_delimiters.rb +82 -16
  321. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +68 -32
  322. data/lib/rubocop/cop/style/case_equality.rb +13 -1
  323. data/lib/rubocop/cop/style/character_literal.rb +10 -0
  324. data/lib/rubocop/cop/style/class_and_module_children.rb +8 -4
  325. data/lib/rubocop/cop/style/class_check.rb +29 -10
  326. data/lib/rubocop/cop/style/class_methods.rb +10 -9
  327. data/lib/rubocop/cop/style/class_vars.rb +5 -4
  328. data/lib/rubocop/cop/style/collection_methods.rb +5 -3
  329. data/lib/rubocop/cop/style/colon_method_call.rb +18 -2
  330. data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
  331. data/lib/rubocop/cop/style/command_literal.rb +90 -30
  332. data/lib/rubocop/cop/style/comment_annotation.rb +39 -11
  333. data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
  334. data/lib/rubocop/cop/style/conditional_assignment.rb +41 -41
  335. data/lib/rubocop/cop/style/copyright.rb +27 -28
  336. data/lib/rubocop/cop/style/date_time.rb +44 -0
  337. data/lib/rubocop/cop/style/def_with_parentheses.rb +31 -5
  338. data/lib/rubocop/cop/style/dir.rb +48 -0
  339. data/lib/rubocop/cop/style/documentation.rb +17 -2
  340. data/lib/rubocop/cop/style/documentation_method.rb +2 -6
  341. data/lib/rubocop/cop/style/double_negation.rb +1 -1
  342. data/lib/rubocop/cop/style/each_for_simple_loop.rb +8 -8
  343. data/lib/rubocop/cop/style/each_with_object.rb +6 -5
  344. data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
  345. data/lib/rubocop/cop/style/empty_case_condition.rb +3 -3
  346. data/lib/rubocop/cop/style/empty_else.rb +55 -24
  347. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
  348. data/lib/rubocop/cop/style/empty_literal.rb +25 -14
  349. data/lib/rubocop/cop/style/empty_method.rb +29 -25
  350. data/lib/rubocop/cop/style/encoding.rb +8 -51
  351. data/lib/rubocop/cop/style/end_block.rb +1 -1
  352. data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
  353. data/lib/rubocop/cop/style/even_odd.rb +4 -2
  354. data/lib/rubocop/cop/style/extend_self.rb +92 -0
  355. data/lib/rubocop/cop/style/flip_flop.rb +13 -2
  356. data/lib/rubocop/cop/style/for.rb +6 -2
  357. data/lib/rubocop/cop/style/format_string.rb +33 -5
  358. data/lib/rubocop/cop/style/format_string_token.rb +17 -15
  359. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +7 -6
  360. data/lib/rubocop/cop/style/global_vars.rb +12 -2
  361. data/lib/rubocop/cop/style/guard_clause.rb +6 -4
  362. data/lib/rubocop/cop/style/hash_syntax.rb +56 -56
  363. data/lib/rubocop/cop/style/identical_conditional_branches.rb +12 -8
  364. data/lib/rubocop/cop/style/if_inside_else.rb +11 -11
  365. data/lib/rubocop/cop/style/if_unless_modifier.rb +8 -7
  366. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -2
  367. data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -1
  368. data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -6
  369. data/lib/rubocop/cop/style/infinite_loop.rb +4 -4
  370. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  371. data/lib/rubocop/cop/style/inverse_methods.rb +24 -14
  372. data/lib/rubocop/cop/style/lambda.rb +45 -43
  373. data/lib/rubocop/cop/style/lambda_call.rb +37 -10
  374. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -5
  375. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +3 -19
  376. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +6 -4
  377. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
  378. data/lib/rubocop/cop/style/method_def_parentheses.rb +20 -25
  379. data/lib/rubocop/cop/style/method_missing.rb +13 -26
  380. data/lib/rubocop/cop/style/min_max.rb +68 -0
  381. data/lib/rubocop/cop/style/missing_else.rb +20 -6
  382. data/lib/rubocop/cop/style/mixin_grouping.rb +31 -21
  383. data/lib/rubocop/cop/style/mixin_usage.rb +71 -0
  384. data/lib/rubocop/cop/style/module_function.rb +27 -11
  385. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  386. data/lib/rubocop/cop/style/multiline_if_modifier.rb +8 -4
  387. data/lib/rubocop/cop/style/multiline_if_then.rb +15 -13
  388. data/lib/rubocop/cop/style/multiline_memoization.rb +33 -17
  389. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
  390. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  391. data/lib/rubocop/cop/style/mutable_constant.rb +11 -15
  392. data/lib/rubocop/cop/style/negated_if.rb +27 -31
  393. data/lib/rubocop/cop/style/negated_while.rb +1 -5
  394. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  395. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +26 -23
  396. data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
  397. data/lib/rubocop/cop/style/next.rb +41 -12
  398. data/lib/rubocop/cop/style/nil_comparison.rb +8 -8
  399. data/lib/rubocop/cop/style/non_nil_check.rb +41 -38
  400. data/lib/rubocop/cop/style/not.rb +15 -5
  401. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +8 -4
  402. data/lib/rubocop/cop/style/numeric_literals.rb +9 -9
  403. data/lib/rubocop/cop/style/numeric_predicate.rb +21 -21
  404. data/lib/rubocop/cop/style/one_line_conditional.rb +9 -4
  405. data/lib/rubocop/cop/style/option_hash.rb +11 -25
  406. data/lib/rubocop/cop/style/optional_arguments.rb +1 -2
  407. data/lib/rubocop/cop/style/or_assignment.rb +88 -0
  408. data/lib/rubocop/cop/style/parallel_assignment.rb +16 -16
  409. data/lib/rubocop/cop/style/parentheses_around_condition.rb +30 -13
  410. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +25 -4
  411. data/lib/rubocop/cop/style/percent_q_literals.rb +29 -8
  412. data/lib/rubocop/cop/style/perl_backrefs.rb +8 -1
  413. data/lib/rubocop/cop/style/preferred_hash_methods.rb +7 -11
  414. data/lib/rubocop/cop/style/proc.rb +10 -2
  415. data/lib/rubocop/cop/style/raise_args.rb +22 -29
  416. data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
  417. data/lib/rubocop/cop/style/redundant_begin.rb +16 -5
  418. data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
  419. data/lib/rubocop/cop/style/redundant_exception.rb +4 -4
  420. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  421. data/lib/rubocop/cop/style/redundant_parentheses.rb +14 -12
  422. data/lib/rubocop/cop/style/redundant_return.rb +28 -15
  423. data/lib/rubocop/cop/style/redundant_self.rb +35 -27
  424. data/lib/rubocop/cop/style/regexp_literal.rb +88 -27
  425. data/lib/rubocop/cop/style/rescue_modifier.rb +12 -1
  426. data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
  427. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  428. data/lib/rubocop/cop/style/safe_navigation.rb +100 -48
  429. data/lib/rubocop/cop/style/self_assignment.rb +13 -13
  430. data/lib/rubocop/cop/style/semicolon.rb +19 -9
  431. data/lib/rubocop/cop/style/send.rb +10 -1
  432. data/lib/rubocop/cop/style/signal_exception.rb +104 -3
  433. data/lib/rubocop/cop/style/single_line_block_params.rb +16 -15
  434. data/lib/rubocop/cop/style/single_line_methods.rb +26 -18
  435. data/lib/rubocop/cop/style/special_global_vars.rb +19 -14
  436. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +23 -50
  437. data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
  438. data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
  439. data/lib/rubocop/cop/style/string_literals.rb +26 -3
  440. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +16 -1
  441. data/lib/rubocop/cop/style/string_methods.rb +19 -8
  442. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
  443. data/lib/rubocop/cop/style/symbol_array.rb +7 -35
  444. data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
  445. data/lib/rubocop/cop/style/symbol_proc.rb +11 -25
  446. data/lib/rubocop/cop/style/ternary_parentheses.rb +46 -51
  447. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
  448. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +20 -6
  449. data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +22 -7
  450. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
  451. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +70 -24
  452. data/lib/rubocop/cop/style/trivial_accessors.rb +72 -65
  453. data/lib/rubocop/cop/style/unless_else.rb +16 -1
  454. data/lib/rubocop/cop/style/unneeded_capital_w.rb +18 -8
  455. data/lib/rubocop/cop/style/unneeded_interpolation.rb +15 -19
  456. data/lib/rubocop/cop/style/unneeded_percent_q.rb +14 -13
  457. data/lib/rubocop/cop/style/variable_interpolation.rb +23 -9
  458. data/lib/rubocop/cop/style/when_then.rb +14 -1
  459. data/lib/rubocop/cop/style/while_until_do.rb +27 -4
  460. data/lib/rubocop/cop/style/while_until_modifier.rb +26 -6
  461. data/lib/rubocop/cop/style/word_array.rb +9 -30
  462. data/lib/rubocop/cop/style/yoda_condition.rb +51 -22
  463. data/lib/rubocop/cop/style/zero_length_predicate.rb +44 -29
  464. data/lib/rubocop/cop/team.rb +16 -8
  465. data/lib/rubocop/cop/util.rb +43 -34
  466. data/lib/rubocop/cop/variable_force.rb +1 -1
  467. data/lib/rubocop/cop/variable_force/assignment.rb +4 -2
  468. data/lib/rubocop/cop/variable_force/scope.rb +1 -5
  469. data/lib/rubocop/cop/variable_force/variable.rb +1 -1
  470. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -4
  471. data/lib/rubocop/formatter/formatter_set.rb +3 -1
  472. data/lib/rubocop/formatter/html_formatter.rb +1 -1
  473. data/lib/rubocop/formatter/json_formatter.rb +9 -3
  474. data/lib/rubocop/formatter/offense_count_formatter.rb +2 -0
  475. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  476. data/lib/rubocop/formatter/simple_text_formatter.rb +3 -3
  477. data/lib/rubocop/formatter/tap_formatter.rb +71 -0
  478. data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -0
  479. data/lib/rubocop/node_pattern.rb +46 -29
  480. data/lib/rubocop/options.rb +13 -8
  481. data/lib/rubocop/path_util.rb +15 -3
  482. data/lib/rubocop/processed_source.rb +8 -9
  483. data/lib/rubocop/rake_task.rb +16 -23
  484. data/lib/rubocop/remote_config.rb +13 -1
  485. data/lib/rubocop/result_cache.rb +1 -0
  486. data/lib/rubocop/rspec/cop_helper.rb +10 -10
  487. data/lib/rubocop/rspec/expect_offense.rb +6 -8
  488. data/lib/rubocop/rspec/shared_contexts.rb +4 -8
  489. data/lib/rubocop/rspec/shared_examples.rb +8 -8
  490. data/lib/rubocop/rspec/support.rb +5 -5
  491. data/lib/rubocop/runner.rb +1 -1
  492. data/lib/rubocop/string_util.rb +2 -0
  493. data/lib/rubocop/token.rb +74 -0
  494. data/lib/rubocop/version.rb +1 -1
  495. metadata +118 -48
  496. data/lib/rubocop/cop/layout/space_inside_brackets.rb +0 -20
  497. data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -41
  498. data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -41
  499. data/lib/rubocop/cop/mixin/on_method_def.rb +0 -44
  500. data/lib/rubocop/cop/mixin/space_inside.rb +0 -76
  501. data/lib/rubocop/cop/style/accessor_method_name.rb +0 -45
  502. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -29
  503. data/lib/rubocop/cop/style/constant_name.rb +0 -29
  504. data/lib/rubocop/cop/style/method_name.rb +0 -34
  505. data/lib/rubocop/cop/style/predicate_name.rb +0 -67
  506. data/lib/rubocop/cop/style/variable_name.rb +0 -39
@@ -34,6 +34,7 @@ module RuboCop
34
34
  # def foo(a,
35
35
  # b
36
36
  # )
37
+ # end
37
38
  #
38
39
  # # symmetrical: bad
39
40
  # # new_line: bad
@@ -41,12 +42,14 @@ module RuboCop
41
42
  # def foo(
42
43
  # a,
43
44
  # b)
45
+ # end
44
46
  #
45
47
  # # symmetrical: good
46
48
  # # new_line: bad
47
49
  # # same_line: good
48
50
  # def foo(a,
49
51
  # b)
52
+ # end
50
53
  #
51
54
  # # symmetrical: good
52
55
  # # new_line: good
@@ -55,8 +58,8 @@ module RuboCop
55
58
  # a,
56
59
  # b
57
60
  # )
61
+ # end
58
62
  class MultilineMethodDefinitionBraceLayout < Cop
59
- include OnMethodDef
60
63
  include MultilineLiteralBraceLayout
61
64
 
62
65
  SAME_LINE_MESSAGE = 'Closing method definition brace must be on the ' \
@@ -73,9 +76,10 @@ module RuboCop
73
76
  ALWAYS_SAME_LINE_MESSAGE = 'Closing method definition brace must be ' \
74
77
  'on the same line as the last parameter.'.freeze
75
78
 
76
- def on_method_def(_node, _method_name, args, _body)
77
- check_brace_layout(args)
79
+ def on_def(node)
80
+ check_brace_layout(node.arguments)
78
81
  end
82
+ alias on_defs on_def
79
83
  end
80
84
  end
81
85
  end
@@ -12,6 +12,12 @@ module RuboCop
12
12
  # b
13
13
  # something
14
14
  # end
15
+ #
16
+ # # good
17
+ # if a +
18
+ # b
19
+ # something
20
+ # end
15
21
  class MultilineOperationIndentation < Cop
16
22
  include ConfigurableEnforcedStyle
17
23
  include AutocorrectAlignment
@@ -22,7 +22,9 @@ module RuboCop
22
22
  # puts 'error'
23
23
  # end
24
24
  class RescueEnsureAlignment < Cop
25
- MSG = '`%s` at %d, %d is not aligned with `end` at %d, %d.'.freeze
25
+ MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
26
+ 'aligned with `end` at %<end_loc_line>d, %<end_loc_column>d.'
27
+ .freeze
26
28
 
27
29
  def on_resbody(node)
28
30
  check(node) unless modifier?(node)
@@ -57,12 +59,18 @@ module RuboCop
57
59
  return if end_loc.column == kw_loc.column
58
60
  return if end_loc.line == kw_loc.line
59
61
 
60
- add_offense(node, kw_loc, format_message(kw_loc, end_loc))
62
+ add_offense(node,
63
+ location: kw_loc,
64
+ message: format_message(kw_loc, end_loc))
61
65
  end
62
66
 
63
67
  def format_message(kw_loc, end_loc)
64
- format(MSG, kw_loc.source, kw_loc.line, kw_loc.column, end_loc.line,
65
- end_loc.column)
68
+ format(MSG,
69
+ kw_loc: kw_loc.source,
70
+ kw_loc_line: kw_loc.line,
71
+ kw_loc_column: kw_loc.column,
72
+ end_loc_line: end_loc.line,
73
+ end_loc_column: end_loc.column)
66
74
  end
67
75
 
68
76
  def modifier?(node)
@@ -6,6 +6,13 @@ module RuboCop
6
6
  # Checks for colon (:) not followed by some kind of space.
7
7
  # N.B. this cop does not handle spaces after a ternary operator, which are
8
8
  # instead handled by Layout/SpaceAroundOperators.
9
+ #
10
+ # @example
11
+ # # bad
12
+ # def f(a:, b:2); {a:3}; end
13
+ #
14
+ # # good
15
+ # def f(a:, b: 2); {a: 3}; end
9
16
  class SpaceAfterColon < Cop
10
17
  MSG = 'Space missing after colon.'.freeze
11
18
 
@@ -14,7 +21,7 @@ module RuboCop
14
21
 
15
22
  colon = node.loc.operator
16
23
 
17
- add_offense(colon, colon) unless followed_by_space?(colon)
24
+ add_offense(colon, location: colon) unless followed_by_space?(colon)
18
25
  end
19
26
 
20
27
  def on_kwoptarg(node)
@@ -22,7 +29,11 @@ module RuboCop
22
29
  # optional keyword argument's name, so must construct one.
23
30
  colon = node.loc.name.end.resize(1)
24
31
 
25
- add_offense(colon, colon) unless followed_by_space?(colon)
32
+ add_offense(colon, location: colon) unless followed_by_space?(colon)
33
+ end
34
+
35
+ def autocorrect(range)
36
+ ->(corrector) { corrector.insert_after(range, ' ') }
26
37
  end
27
38
 
28
39
  private
@@ -30,10 +41,6 @@ module RuboCop
30
41
  def followed_by_space?(colon)
31
42
  colon.source_buffer.source[colon.end_pos] =~ /\s/
32
43
  end
33
-
34
- def autocorrect(range)
35
- ->(corrector) { corrector.insert_after(range, ' ') }
36
- end
37
44
  end
38
45
  end
39
46
  end
@@ -4,6 +4,16 @@ module RuboCop
4
4
  module Cop
5
5
  module Layout
6
6
  # Checks for comma (,) not followed by some kind of space.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # [1,2]
12
+ # { foo:bar,}
13
+ #
14
+ # # good
15
+ # [1, 2]
16
+ # { foo:bar, }
7
17
  class SpaceAfterComma < Cop
8
18
  include SpaceAfterPunctuation
9
19
 
@@ -13,7 +23,7 @@ module RuboCop
13
23
  end
14
24
 
15
25
  def kind(token)
16
- 'comma' if token.type == :tCOMMA
26
+ 'comma' if token.comma?
17
27
  end
18
28
  end
19
29
  end
@@ -8,25 +8,27 @@ module RuboCop
8
8
  # @example
9
9
  #
10
10
  # # bad
11
- # def func (x) ... end
11
+ # def func (x) end
12
+ # def method= (y) end
12
13
  #
13
14
  # # good
14
- # def func(x) ... end
15
+ # def func(x) end
16
+ # def method=(y) end
15
17
  class SpaceAfterMethodName < Cop
16
- include OnMethodDef
17
-
18
18
  MSG = 'Do not put a space between a method name and the opening ' \
19
19
  'parenthesis.'.freeze
20
20
 
21
- def on_method_def(_node, _method_name, args, _body)
21
+ def on_def(node)
22
+ args = node.arguments
22
23
  return unless args.loc.begin && args.loc.begin.is?('(')
23
24
  expr = args.source_range
24
25
  pos_before_left_paren = range_between(expr.begin_pos - 1,
25
26
  expr.begin_pos)
26
27
  return unless pos_before_left_paren.source =~ /\s/
27
28
 
28
- add_offense(pos_before_left_paren, pos_before_left_paren)
29
+ add_offense(pos_before_left_paren, location: pos_before_left_paren)
29
30
  end
31
+ alias on_defs on_def
30
32
 
31
33
  def autocorrect(pos_before_left_paren)
32
34
  ->(corrector) { corrector.remove(pos_before_left_paren) }
@@ -17,7 +17,7 @@ module RuboCop
17
17
  def on_send(node)
18
18
  return unless node.keyword_bang? && whitespace_after_operator?(node)
19
19
 
20
- add_offense(node, :expression)
20
+ add_offense(node)
21
21
  end
22
22
 
23
23
  def whitespace_after_operator?(node)
@@ -4,6 +4,13 @@ module RuboCop
4
4
  module Cop
5
5
  module Layout
6
6
  # Checks for semicolon (;) not followed by some kind of space.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # x = 1;y = 2
11
+ #
12
+ # # good
13
+ # x = 1; y = 2
7
14
  class SpaceAfterSemicolon < Cop
8
15
  include SpaceAfterPunctuation
9
16
 
@@ -13,7 +20,7 @@ module RuboCop
13
20
  end
14
21
 
15
22
  def kind(token)
16
- 'semicolon' if token.type == :tSEMI
23
+ 'semicolon' if token.semicolon?
17
24
  end
18
25
  end
19
26
  end
@@ -5,10 +5,7 @@ module RuboCop
5
5
  module Layout
6
6
  # Checks the spacing inside and after block parameters pipes.
7
7
  #
8
- # @example
9
- #
10
- # # EnforcedStyleInsidePipes: no_space (default)
11
- #
8
+ # @example EnforcedStyleInsidePipes: no_space (default)
12
9
  # # bad
13
10
  # {}.each { | x, y |puts x }
14
11
  # ->( x, y ) { puts x }
@@ -17,10 +14,7 @@ module RuboCop
17
14
  # {}.each { |x, y| puts x }
18
15
  # ->(x, y) { puts x }
19
16
  #
20
- # @example
21
- #
22
- # # EnforcedStyleInsidePipes: space
23
- #
17
+ # @example EnforcedStyleInsidePipes: space
24
18
  # # bad
25
19
  # {}.each { |x, y| puts x }
26
20
  # ->(x, y) { puts x }
@@ -50,6 +44,15 @@ module RuboCop
50
44
  check_each_arg(args)
51
45
  end
52
46
 
47
+ def autocorrect(range)
48
+ lambda do |corrector|
49
+ case range.source
50
+ when /^\s+$/ then corrector.remove(range)
51
+ else corrector.insert_after(range, ' ')
52
+ end
53
+ end
54
+ end
55
+
53
56
  private
54
57
 
55
58
  def style_parameter_name
@@ -75,16 +78,25 @@ module RuboCop
75
78
  end
76
79
 
77
80
  def check_space_style_inside_pipes(args, opening_pipe, closing_pipe)
81
+ check_opening_pipe_space(args, opening_pipe)
82
+ check_closing_pipe_space(args, closing_pipe)
83
+ end
84
+
85
+ def check_opening_pipe_space(args, opening_pipe)
78
86
  first = args.first.source_range
79
- last = args.last.source_range
80
- last_end_pos = last_end_pos_inside_pipes(last.end_pos)
81
87
 
82
88
  check_space(opening_pipe.end_pos, first.begin_pos, first,
83
89
  'before first block parameter')
84
- check_space(last_end_pos, closing_pipe.begin_pos, last,
85
- 'after last block parameter')
86
90
  check_no_space(opening_pipe.end_pos, first.begin_pos - 1,
87
91
  'Extra space before first')
92
+ end
93
+
94
+ def check_closing_pipe_space(args, closing_pipe)
95
+ last = args.last.source_range
96
+ last_end_pos = last_end_pos_inside_pipes(last.end_pos)
97
+
98
+ check_space(last_end_pos, closing_pipe.begin_pos, last,
99
+ 'after last block parameter')
88
100
  check_no_space(last_end_pos + 1, closing_pipe.begin_pos,
89
101
  'Extra space after last')
90
102
  end
@@ -96,31 +108,26 @@ module RuboCop
96
108
  def check_each_arg(args)
97
109
  args.children.butfirst.each do |arg|
98
110
  expr = arg.source_range
99
- check_no_space(range_with_surrounding_space(expr, :left).begin_pos,
100
- expr.begin_pos - 1, 'Extra space before')
111
+ check_no_space(
112
+ range_with_surrounding_space(range: expr, side: :left).begin_pos,
113
+ expr.begin_pos - 1,
114
+ 'Extra space before'
115
+ )
101
116
  end
102
117
  end
103
118
 
104
119
  def check_space(space_begin_pos, space_end_pos, range, msg)
105
120
  return if space_begin_pos != space_end_pos
106
121
 
107
- add_offense(range, range, "Space #{msg} missing.")
122
+ add_offense(range, location: range, message: "Space #{msg} missing.")
108
123
  end
109
124
 
110
125
  def check_no_space(space_begin_pos, space_end_pos, msg)
111
126
  return if space_begin_pos >= space_end_pos
112
127
 
113
128
  range = range_between(space_begin_pos, space_end_pos)
114
- add_offense(range, range, "#{msg} block parameter detected.")
115
- end
116
-
117
- def autocorrect(range)
118
- lambda do |corrector|
119
- case range.source
120
- when /^\s+$/ then corrector.remove(range)
121
- else corrector.insert_after(range, ' ')
122
- end
123
- end
129
+ add_offense(range, location: range,
130
+ message: "#{msg} block parameter detected.")
124
131
  end
125
132
  end
126
133
  end
@@ -5,21 +5,40 @@ module RuboCop
5
5
  module Layout
6
6
  # Checks that the equals signs in parameter default assignments
7
7
  # have or don't have surrounding space depending on configuration.
8
+ # @example
9
+ # # bad
10
+ # def some_method(arg1=:default, arg2=nil, arg3=[])
11
+ # # do something...
12
+ # end
13
+ #
14
+ # # good
15
+ # def some_method(arg1 = :default, arg2 = nil, arg3 = [])
16
+ # # do something...
17
+ # end
8
18
  class SpaceAroundEqualsInParameterDefault < Cop
9
19
  include SurroundingSpace
10
20
  include ConfigurableEnforcedStyle
11
21
 
22
+ MSG = 'Surrounding space %<type>s in default value assignment.'.freeze
23
+
12
24
  def on_optarg(node)
13
25
  index = index_of_first_token(node)
14
26
  arg, equals, value = processed_source.tokens[index, 3]
15
27
  check_optarg(arg, equals, value)
16
28
  end
17
29
 
30
+ def autocorrect(range)
31
+ m = range.source.match(/=\s*(\S+)/)
32
+ rest = m ? m.captures[0] : ''
33
+ replacement = style == :space ? ' = ' : '='
34
+ ->(corrector) { corrector.replace(range, replacement + rest) }
35
+ end
36
+
18
37
  private
19
38
 
20
39
  def check_optarg(arg, equals, value)
21
- space_on_both_sides = space_on_both_sides?(arg, equals, value)
22
- no_surrounding_space = no_surrounding_space?(arg, equals, value)
40
+ space_on_both_sides = space_on_both_sides?(arg, equals)
41
+ no_surrounding_space = no_surrounding_space?(arg, equals)
23
42
 
24
43
  if style == :space && space_on_both_sides ||
25
44
  style == :no_space && no_surrounding_space
@@ -32,8 +51,8 @@ module RuboCop
32
51
 
33
52
  def incorrect_style_detected(arg, value, space_on_both_sides,
34
53
  no_surrounding_space)
35
- range = range_between(arg.pos.end_pos, value.pos.begin_pos)
36
- add_offense(range, range) do
54
+ range = range_between(arg.end_pos, value.begin_pos)
55
+ add_offense(range, location: range) do
37
56
  if style == :space && no_surrounding_space ||
38
57
  style == :no_space && space_on_both_sides
39
58
  opposite_style_detected
@@ -43,24 +62,16 @@ module RuboCop
43
62
  end
44
63
  end
45
64
 
46
- def space_on_both_sides?(arg, equals, value)
47
- space_between?(arg, equals) && space_between?(equals, value)
65
+ def space_on_both_sides?(arg, equals)
66
+ arg.space_after? && equals.space_after?
48
67
  end
49
68
 
50
- def no_surrounding_space?(arg, equals, value)
51
- !space_between?(arg, equals) && !space_between?(equals, value)
69
+ def no_surrounding_space?(arg, equals)
70
+ !arg.space_after? && !equals.space_after?
52
71
  end
53
72
 
54
73
  def message(_)
55
- format('Surrounding space %s in default value assignment.',
56
- style == :space ? 'missing' : 'detected')
57
- end
58
-
59
- def autocorrect(range)
60
- m = range.source.match(/=\s*(\S+)/)
61
- rest = m ? m.captures[0] : ''
62
- replacement = style == :space ? ' = ' : '='
63
- ->(corrector) { corrector.replace(range, replacement + rest) }
74
+ format(MSG, type: style == :space ? 'missing' : 'detected')
64
75
  end
65
76
  end
66
77
  end
@@ -25,8 +25,8 @@ module RuboCop
25
25
  #
26
26
  # something = 123 if test
27
27
  class SpaceAroundKeyword < Cop
28
- MSG_BEFORE = 'Space before keyword `%s` is missing.'.freeze
29
- MSG_AFTER = 'Space after keyword `%s` is missing.'.freeze
28
+ MSG_BEFORE = 'Space before keyword `%<range>s` is missing.'.freeze
29
+ MSG_AFTER = 'Space after keyword `%<range>s` is missing.'.freeze
30
30
 
31
31
  DO = 'do'.freeze
32
32
  SAFE_NAVIGATION = '&.'.freeze
@@ -127,6 +127,14 @@ module RuboCop
127
127
  check(node, [:keyword].freeze)
128
128
  end
129
129
 
130
+ def autocorrect(range)
131
+ if space_before_missing?(range)
132
+ ->(corrector) { corrector.insert_before(range, ' '.freeze) }
133
+ else
134
+ ->(corrector) { corrector.insert_after(range, ' '.freeze) }
135
+ end
136
+ end
137
+
130
138
  private
131
139
 
132
140
  def check(node, locations, begin_keyword = DO)
@@ -166,7 +174,9 @@ module RuboCop
166
174
  end
167
175
 
168
176
  def offense(range, msg)
169
- add_offense(range, range, msg % range.source)
177
+ add_offense(range,
178
+ location: range,
179
+ message: format(msg, range: range.source))
170
180
  end
171
181
 
172
182
  def space_before_missing?(range)
@@ -178,16 +188,20 @@ module RuboCop
178
188
  def space_after_missing?(range)
179
189
  pos = range.end_pos
180
190
  char = range.source_buffer.source[pos]
181
- return false unless char
182
- return false if accept_left_parenthesis?(range) &&
183
- char == '('.freeze
184
- return false if accept_left_square_bracket?(range) &&
185
- char == '['.freeze
191
+
192
+ return false if accepted_opening_delimiter?(range, char)
186
193
  return false if safe_navigation_call?(range, pos)
187
194
 
188
195
  char !~ /[\s;,#\\\)\}\]\.]/
189
196
  end
190
197
 
198
+ def accepted_opening_delimiter?(range, char)
199
+ return true unless char
200
+
201
+ accept_left_square_bracket?(range) && char == '[' ||
202
+ accept_left_parenthesis?(range) && char == '('
203
+ end
204
+
191
205
  def accept_left_parenthesis?(range)
192
206
  ACCEPT_LEFT_PAREN.include?(range.source)
193
207
  end
@@ -210,14 +224,6 @@ module RuboCop
210
224
  end
211
225
  false
212
226
  end
213
-
214
- def autocorrect(range)
215
- if space_before_missing?(range)
216
- ->(corrector) { corrector.insert_before(range, ' '.freeze) }
217
- else
218
- ->(corrector) { corrector.insert_after(range, ' '.freeze) }
219
- end
220
- end
221
227
  end
222
228
  end
223
229
  end