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
@@ -12,14 +12,14 @@ module RuboCop
12
12
  # # good
13
13
  #
14
14
  # begin
15
- # ...
15
+ # # ...
16
16
  # end
17
17
  #
18
18
  # # bad
19
19
  #
20
20
  # begin
21
21
  #
22
- # ...
22
+ # # ...
23
23
  #
24
24
  # end
25
25
  class EmptyLinesAroundBeginBody < Cop
@@ -6,24 +6,20 @@ module RuboCop
6
6
  # This cops checks if empty lines around the bodies of blocks match
7
7
  # the configuration.
8
8
  #
9
- # @example
10
- #
11
- # # EnforcedStyle: empty_lines
12
- #
9
+ # @example EnforcedStyle: empty_lines
13
10
  # # good
14
11
  #
15
12
  # foo do |bar|
16
13
  #
17
- # ...
14
+ # # ...
18
15
  #
19
16
  # end
20
17
  #
21
- # # EnforcedStyle: no_empty_lines
22
- #
18
+ # @example EnforcedStyle: no_empty_lines (default)
23
19
  # # good
24
20
  #
25
21
  # foo do |bar|
26
- # ...
22
+ # # ...
27
23
  # end
28
24
  class EmptyLinesAroundBlockBody < Cop
29
25
  include EmptyLinesAroundBody
@@ -6,18 +6,43 @@ module RuboCop
6
6
  # This cops checks if empty lines around the bodies of classes match
7
7
  # the configuration.
8
8
  #
9
- # @example
9
+ # @example EnforcedStyle: empty_lines
10
+ # # good
11
+ #
12
+ # class Foo
13
+ #
14
+ # def bar
15
+ # # ...
16
+ # end
10
17
  #
11
- # EnforcedStyle: empty_lines
18
+ # end
12
19
  #
20
+ # @example EnforcedStyle: empty_lines_except_namespace
13
21
  # # good
14
22
  #
15
23
  # class Foo
24
+ # class Bar
25
+ #
26
+ # # ...
27
+ #
28
+ # end
29
+ # end
30
+ #
31
+ # @example EnforcedStyle: empty_lines_special
32
+ # # good
33
+ # class Foo
34
+ #
35
+ # def bar; end
16
36
  #
17
- # def bar
18
- # ...
19
- # end
37
+ # end
38
+ #
39
+ # @example EnforcedStyle: no_empty_lines (default)
40
+ # # good
20
41
  #
42
+ # class Foo
43
+ # def bar
44
+ # # ...
45
+ # end
21
46
  # end
22
47
  class EmptyLinesAroundClassBody < Cop
23
48
  include EmptyLinesAroundBody
@@ -60,13 +60,13 @@ module RuboCop
60
60
  # end
61
61
  class EmptyLinesAroundExceptionHandlingKeywords < Cop
62
62
  include EmptyLinesAroundBody
63
- include OnMethodDef
64
63
 
65
- MSG = 'Extra empty line detected %s the `%s`.'.freeze
64
+ MSG = 'Extra empty line detected %<location>s the `%<keyword>s`.'.freeze
66
65
 
67
- def on_method_def(_node, _method_name, _args, body)
68
- check_body(body)
66
+ def on_def(node)
67
+ check_body(node.body)
69
68
  end
69
+ alias on_defs on_def
70
70
 
71
71
  def on_kwbegin(node)
72
72
  body, = *node
@@ -81,15 +81,19 @@ module RuboCop
81
81
  line = loc.line
82
82
  keyword = loc.source
83
83
  # below the keyword
84
- check_line(style, line, format(MSG, 'after', keyword), &:empty?)
84
+ check_line(style, line, message('after', keyword), &:empty?)
85
85
  # above the keyword
86
86
  check_line(style,
87
87
  line - 2,
88
- format(MSG, 'before', keyword),
88
+ message('before', keyword),
89
89
  &:empty?)
90
90
  end
91
91
  end
92
92
 
93
+ def message(location, keyword)
94
+ format(MSG, location: location, keyword: keyword)
95
+ end
96
+
93
97
  def style
94
98
  :no_empty_lines
95
99
  end
@@ -10,25 +10,25 @@ module RuboCop
10
10
  # # good
11
11
  #
12
12
  # def foo
13
- # ...
13
+ # # ...
14
14
  # end
15
15
  #
16
16
  # # bad
17
17
  #
18
18
  # def bar
19
19
  #
20
- # ...
20
+ # # ...
21
21
  #
22
22
  # end
23
23
  class EmptyLinesAroundMethodBody < Cop
24
24
  include EmptyLinesAroundBody
25
- include OnMethodDef
26
25
 
27
26
  KIND = 'method'.freeze
28
27
 
29
- def on_method_def(node, _method_name, _args, body)
30
- check(node, body)
28
+ def on_def(node)
29
+ check(node, node.body)
31
30
  end
31
+ alias on_defs on_def
32
32
 
33
33
  private
34
34
 
@@ -6,27 +6,42 @@ module RuboCop
6
6
  # This cops checks if empty lines around the bodies of modules match
7
7
  # the configuration.
8
8
  #
9
- # @example
10
- #
11
- # EnforcedStyle: empty_lines
12
- #
9
+ # @example EnforcedStyle: empty_lines
13
10
  # # good
14
11
  #
15
12
  # module Foo
16
13
  #
17
14
  # def bar
18
- # ...
15
+ # # ...
19
16
  # end
20
17
  #
21
18
  # end
22
19
  #
23
- # EnforcedStyle: no_empty_lines
20
+ # @example EnforcedStyle: empty_lines_except_namespace
21
+ # # good
22
+ #
23
+ # module Foo
24
+ # module Bar
25
+ #
26
+ # # ...
27
+ #
28
+ # end
29
+ # end
30
+ #
31
+ # @example EnforcedStyle: empty_lines_special
32
+ # # good
33
+ # module Foo
34
+ #
35
+ # def bar; end
36
+ #
37
+ # end
24
38
  #
39
+ # @example EnforcedStyle: no_empty_lines (default)
25
40
  # # good
26
41
  #
27
42
  # module Foo
28
43
  # def bar
29
- # ...
44
+ # # ...
30
45
  # end
31
46
  # end
32
47
  class EmptyLinesAroundModuleBody < Cop
@@ -13,7 +13,7 @@ module RuboCop
13
13
  def investigate(processed_source)
14
14
  last_token = processed_source.tokens.last
15
15
  last_line =
16
- last_token ? last_token.pos.line : processed_source.lines.length
16
+ last_token ? last_token.line : processed_source.lines.length
17
17
 
18
18
  processed_source.raw_source.each_line.with_index do |line, index|
19
19
  break if index >= last_line
@@ -23,7 +23,7 @@ module RuboCop
23
23
 
24
24
  range =
25
25
  source_range(processed_source.buffer, index + 1, 0, line.length)
26
- add_offense(nil, range, msg)
26
+ add_offense(nil, location: range, message: msg)
27
27
  # Usually there will be carriage return characters on all or none
28
28
  # of the lines in a file, so we report only one offense.
29
29
  break
@@ -23,14 +23,15 @@ module RuboCop
23
23
  include PrecedingFollowingAlignment
24
24
 
25
25
  MSG_UNNECESSARY = 'Unnecessary spacing detected.'.freeze
26
- MSG_UNALIGNED_ASGN = '`=` is not aligned with the %s assignment.'.freeze
26
+ MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s ' \
27
+ 'assignment.'.freeze
27
28
 
28
29
  def investigate(processed_source)
29
30
  return if processed_source.ast.nil?
30
31
 
31
32
  if force_equal_sign_alignment?
32
33
  @asgn_tokens = assignment_tokens
33
- @asgn_lines = @asgn_tokens.map { |t| t.pos.line }
34
+ @asgn_lines = @asgn_tokens.map(&:line)
34
35
  # Don't attempt to correct the same = more than once
35
36
  @corrected = Set.new
36
37
  end
@@ -53,14 +54,14 @@ module RuboCop
53
54
  private
54
55
 
55
56
  def assignment_tokens
56
- tokens = processed_source.tokens.select { |t| equal_sign?(t) }
57
+ tokens = processed_source.tokens.select(&:equal_sign?)
57
58
  # we don't want to operate on equals signs which are part of an
58
59
  # optarg in a method definition
59
60
  # e.g.: def method(optarg = default_val); end
60
61
  tokens = remove_optarg_equals(tokens, processed_source)
61
62
 
62
63
  # Only attempt to align the first = on each line
63
- Set.new(tokens.uniq { |t| t.pos.line })
64
+ Set.new(tokens.uniq(&:line))
64
65
  end
65
66
 
66
67
  def check_tokens(ast, t1, t2)
@@ -68,8 +69,8 @@ module RuboCop
68
69
 
69
70
  if force_equal_sign_alignment? &&
70
71
  @asgn_tokens.include?(t2) &&
71
- (@asgn_lines.include?(t2.pos.line - 1) ||
72
- @asgn_lines.include?(t2.pos.line + 1))
72
+ (@asgn_lines.include?(t2.line - 1) ||
73
+ @asgn_lines.include?(t2.line + 1))
73
74
  check_assignment(t2)
74
75
  else
75
76
  check_other(t1, t2, ast)
@@ -81,25 +82,25 @@ module RuboCop
81
82
  message = ''
82
83
  if should_aligned_with_preceding_line?(token)
83
84
  assignment_line = preceding_line(token)
84
- message = format(MSG_UNALIGNED_ASGN, 'preceding')
85
+ message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
85
86
  else
86
87
  assignment_line = following_line(token)
87
- message = format(MSG_UNALIGNED_ASGN, 'following')
88
+ message = format(MSG_UNALIGNED_ASGN, location: 'following')
88
89
  end
89
90
  return if aligned_assignment?(token.pos, assignment_line)
90
- add_offense(token.pos, token.pos, message)
91
+ add_offense(token.pos, location: token.pos, message: message)
91
92
  end
92
93
 
93
94
  def should_aligned_with_preceding_line?(token)
94
- @asgn_lines.include?(token.pos.line - 1)
95
+ @asgn_lines.include?(token.line - 1)
95
96
  end
96
97
 
97
98
  def preceding_line(token)
98
- processed_source.lines[token.pos.line - 2]
99
+ processed_source.lines[token.line - 2]
99
100
  end
100
101
 
101
102
  def following_line(token)
102
- processed_source.lines[token.pos.line]
103
+ processed_source.lines[token.line]
103
104
  end
104
105
 
105
106
  def check_other(t1, t2, ast)
@@ -108,15 +109,15 @@ module RuboCop
108
109
  next if ignored_range?(ast, range.begin_pos)
109
110
  next if unary_plus_non_offense?(range)
110
111
 
111
- add_offense(range, range, MSG_UNNECESSARY)
112
+ add_offense(range, location: range, message: MSG_UNNECESSARY)
112
113
  end
113
114
  end
114
115
 
115
116
  def extra_space_range(t1, t2)
116
- return if t1.pos.line != t2.pos.line
117
+ return if t1.line != t2.line
117
118
 
118
- start_pos = t1.pos.end_pos
119
- end_pos = t2.pos.begin_pos - 1
119
+ start_pos = t1.end_pos
120
+ end_pos = t2.begin_pos - 1
120
121
  return if end_pos <= start_pos
121
122
 
122
123
  return if allow_for_alignment? && aligned_tok?(t2)
@@ -125,7 +126,7 @@ module RuboCop
125
126
  end
126
127
 
127
128
  def aligned_tok?(token)
128
- if token.type == :tCOMMENT
129
+ if token.comment?
129
130
  aligned_comments?(token)
130
131
  else
131
132
  aligned_with_something?(token.pos)
@@ -156,7 +157,7 @@ module RuboCop
156
157
 
157
158
  def aligned_comments?(token)
158
159
  ix = processed_source.comments.index do |c|
159
- c.loc.expression.begin_pos == token.pos.begin_pos
160
+ c.loc.expression.begin_pos == token.begin_pos
160
161
  end
161
162
  aligned_with_previous_comment?(ix) || aligned_with_next_comment?(ix)
162
163
  end
@@ -178,13 +179,9 @@ module RuboCop
178
179
  cop_config['ForceEqualSignAlignment']
179
180
  end
180
181
 
181
- def equal_sign?(token)
182
- token.type == :tEQL || token.type == :tOP_ASGN
183
- end
184
-
185
182
  def align_equal_signs(range, corrector)
186
183
  lines = contiguous_assignment_lines(range)
187
- tokens = @asgn_tokens.select { |t| lines.include?(t.pos.line) }
184
+ tokens = @asgn_tokens.select { |t| lines.include?(t.line) }
188
185
 
189
186
  columns = tokens.map { |t| align_column(t) }
190
187
  align_to = columns.max
@@ -220,8 +217,8 @@ module RuboCop
220
217
  def align_column(asgn_token)
221
218
  # if we removed unneeded spaces from the beginning of this =,
222
219
  # what column would it end from?
223
- line = processed_source.lines[asgn_token.pos.line - 1]
224
- leading = line[0...asgn_token.pos.column]
220
+ line = processed_source.lines[asgn_token.line - 1]
221
+ leading = line[0...asgn_token.column]
225
222
  spaces = leading.size - (leading =~ / *\Z/)
226
223
  asgn_token.pos.last_column - spaces + 1
227
224
  end
@@ -229,7 +226,7 @@ module RuboCop
229
226
  def remove_optarg_equals(asgn_tokens, processed_source)
230
227
  optargs = processed_source.ast.each_node(:optarg)
231
228
  optarg_eql = optargs.map { |o| o.loc.operator.begin_pos }.to_set
232
- asgn_tokens.reject { |t| optarg_eql.include?(t.pos.begin_pos) }
229
+ asgn_tokens.reject { |t| optarg_eql.include?(t.begin_pos) }
233
230
  end
234
231
  end
235
232
  end
@@ -27,15 +27,15 @@ module RuboCop
27
27
  # do_something
28
28
  # end
29
29
  class FirstMethodParameterLineBreak < Cop
30
- include OnMethodDef
31
30
  include FirstElementLineBreak
32
31
 
33
32
  MSG = 'Add a line break before the first parameter of a ' \
34
33
  'multi-line method parameter list.'.freeze
35
34
 
36
- def on_method_def(node, _method_name, args, _body)
37
- check_method_line_break(node, args.to_a)
35
+ def on_def(node)
36
+ check_method_line_break(node, node.arguments)
38
37
  end
38
+ alias on_defs on_def
39
39
  end
40
40
  end
41
41
  end
@@ -22,6 +22,8 @@ module RuboCop
22
22
  include AutocorrectAlignment
23
23
  include ConfigurableEnforcedStyle
24
24
 
25
+ MSG = 'Indent the first parameter one step more than %<base>s.'.freeze
26
+
25
27
  def on_send(node)
26
28
  return if !node.arguments? || node.operator_method?
27
29
 
@@ -44,7 +46,8 @@ module RuboCop
44
46
  else
45
47
  'the start of the previous line'
46
48
  end
47
- format('Indent the first parameter one step more than %s.', base)
49
+
50
+ format(MSG, base: base)
48
51
  end
49
52
 
50
53
  def base_indentation(node)
@@ -60,8 +63,7 @@ module RuboCop
60
63
 
61
64
  parent = node.parent
62
65
 
63
- return false unless parent && parent.send_type? &&
64
- !parent.method?(:[]=)
66
+ return false unless eligible_method_call?(parent)
65
67
  return false if !parent.parenthesized? &&
66
68
  style == :special_for_inner_method_call_in_parentheses
67
69
 
@@ -70,6 +72,10 @@ module RuboCop
70
72
  node.source_range.begin_pos > parent.source_range.begin_pos
71
73
  end
72
74
 
75
+ def_node_matcher :eligible_method_call?, <<-PATTERN
76
+ (send _ !:[]= ...)
77
+ PATTERN
78
+
73
79
  def base_range(send_node, arg_node)
74
80
  range_between(send_node.source_range.begin_pos,
75
81
  arg_node.source_range.begin_pos)
@@ -19,30 +19,74 @@ module RuboCop
19
19
  # This default style is called 'special_inside_parentheses'. Alternative
20
20
  # styles are 'consistent' and 'align_brackets'. Here are examples:
21
21
  #
22
- # # special_inside_parentheses
23
- # array = [
24
- # :value
25
- # ]
26
- # but_in_a_method_call([
27
- # :its_like_this
28
- # ])
29
- # # consistent
30
- # array = [
31
- # :value
32
- # ]
33
- # and_in_a_method_call([
34
- # :no_difference
35
- # ])
36
- # # align_brackets
37
- # and_now_for_something = [
38
- # :completely_different
39
- # ]
22
+ # @example EnforcedStyle: special_inside_parentheses
23
+ # # The `special_inside_parentheses` style enforces that the first
24
+ # # element in an array literal where the opening bracket and first
25
+ # # element are on seprate lines is indented one step (two spaces) more
26
+ # # than the position inside the opening parenthesis.
40
27
  #
28
+ # #bad
29
+ # array = [
30
+ # :value
31
+ # ]
32
+ # and_in_a_method_call([
33
+ # :no_difference
34
+ # ])
35
+ #
36
+ # #good
37
+ # array = [
38
+ # :value
39
+ # ]
40
+ # but_in_a_method_call([
41
+ # :its_like_this
42
+ # ])
43
+ #
44
+ # @example EnforcedStyle: consistent
45
+ # # The `consistent` style enforces that the first element in an array
46
+ # # literal where the opening bracket and the first element are on
47
+ # # seprate lines is indented the same as an array literal which is not
48
+ # # defined inside a method call.
49
+ #
50
+ # #bad
51
+ # # consistent
52
+ # array = [
53
+ # :value
54
+ # ]
55
+ # but_in_a_method_call([
56
+ # :its_like_this
57
+ # ])
58
+ #
59
+ # #good
60
+ # array = [
61
+ # :value
62
+ # ]
63
+ # and_in_a_method_call([
64
+ # :no_difference
65
+ # ])
66
+ #
67
+ # @example EnforcedStyle: align_brackets
68
+ # # The `align_brackets` style enforces that the opening and closing
69
+ # # brackets are indented to the same position.
70
+ #
71
+ # #bad
72
+ # # align_brackets
73
+ # and_now_for_something = [
74
+ # :completely_different
75
+ # ]
76
+ #
77
+ # #good
78
+ # # align_brackets
79
+ # and_now_for_something = [
80
+ # :completely_different
81
+ # ]
41
82
  class IndentArray < Cop
42
83
  include AutocorrectAlignment
43
84
  include ConfigurableEnforcedStyle
44
85
  include ArrayHashIndentation
45
86
 
87
+ MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
88
+ 'in an array, relative to %<base_description>s.'.freeze
89
+
46
90
  def on_array(node)
47
91
  check(node, nil) if node.loc.begin
48
92
  end
@@ -90,7 +134,7 @@ module RuboCop
90
134
  'Indent the right bracket the same as the start of the line' \
91
135
  ' where the left bracket is.'
92
136
  end
93
- add_offense(right_bracket, right_bracket, msg)
137
+ add_offense(right_bracket, location: right_bracket, message: msg)
94
138
  end
95
139
 
96
140
  # Returns the description of what the correct indentation is based on.
@@ -105,8 +149,11 @@ module RuboCop
105
149
  end
106
150
 
107
151
  def message(base_description)
108
- format('Use %d spaces for indentation in an array, relative to %s.',
109
- configured_indentation_width, base_description)
152
+ format(
153
+ MSG,
154
+ configured_indentation_width: configured_indentation_width,
155
+ base_description: base_description
156
+ )
110
157
  end
111
158
  end
112
159
  end