rubocop 0.80.1 → 0.85.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 (324) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/config/default.yml +202 -49
  4. data/lib/rubocop.rb +20 -61
  5. data/lib/rubocop/ast_aliases.rb +8 -0
  6. data/lib/rubocop/cli.rb +13 -7
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
  8. data/lib/rubocop/cli/command/show_cops.rb +2 -6
  9. data/lib/rubocop/comment_config.rb +1 -1
  10. data/lib/rubocop/config.rb +14 -2
  11. data/lib/rubocop/config_loader.rb +37 -33
  12. data/lib/rubocop/config_loader_resolver.rb +45 -6
  13. data/lib/rubocop/config_obsoletion.rb +2 -0
  14. data/lib/rubocop/config_store.rb +12 -2
  15. data/lib/rubocop/config_validator.rb +18 -1
  16. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  17. data/lib/rubocop/cop/badge.rb +5 -5
  18. data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
  19. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
  20. data/lib/rubocop/cop/commissioner.rb +0 -21
  21. data/lib/rubocop/cop/cop.rb +14 -6
  22. data/lib/rubocop/cop/corrector.rb +48 -24
  23. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -8
  24. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
  25. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  26. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +4 -4
  27. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  28. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  29. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
  30. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
  31. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
  32. data/lib/rubocop/cop/generator.rb +4 -3
  33. data/lib/rubocop/cop/ignored_node.rb +1 -3
  34. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
  35. data/lib/rubocop/cop/layout/array_alignment.rb +53 -10
  36. data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
  37. data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
  38. data/lib/rubocop/cop/layout/class_structure.rb +19 -16
  39. data/lib/rubocop/cop/layout/condition_position.rb +12 -2
  40. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  41. data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
  42. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  43. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
  44. data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
  45. data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -3
  46. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
  47. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  48. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  49. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  50. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  51. data/lib/rubocop/cop/layout/hash_alignment.rb +6 -6
  52. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +5 -9
  53. data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
  54. data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
  55. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  56. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  57. data/lib/rubocop/cop/layout/line_length.rb +23 -20
  58. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  59. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  60. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
  61. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
  62. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
  63. data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
  64. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
  65. data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
  66. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  67. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  68. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
  69. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
  70. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
  71. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
  72. data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
  73. data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
  74. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
  75. data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
  76. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  77. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
  78. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
  79. data/lib/rubocop/cop/lint/empty_when.rb +29 -6
  80. data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
  81. data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -4
  82. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  83. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  84. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  85. data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
  86. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  87. data/lib/rubocop/cop/lint/loop.rb +7 -5
  88. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +62 -0
  89. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
  90. data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
  91. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  92. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  93. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
  94. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  95. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
  96. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
  97. data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
  98. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
  99. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
  100. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  101. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  102. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
  103. data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
  104. data/lib/rubocop/cop/lint/suppressed_exception.rb +23 -26
  105. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  106. data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
  107. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  108. data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
  109. data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
  110. data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
  111. data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
  112. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
  113. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  114. data/lib/rubocop/cop/migration/department_name.rb +22 -9
  115. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  116. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
  117. data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
  118. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  119. data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
  120. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
  121. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
  122. data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -2
  123. data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
  124. data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
  125. data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
  126. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
  127. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
  128. data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
  129. data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
  130. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  131. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +1 -1
  132. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
  133. data/lib/rubocop/cop/naming/constant_name.rb +2 -1
  134. data/lib/rubocop/cop/naming/file_name.rb +27 -14
  135. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  136. data/lib/rubocop/cop/naming/method_name.rb +26 -0
  137. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  138. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  139. data/lib/rubocop/cop/registry.rb +12 -7
  140. data/lib/rubocop/cop/severity.rb +1 -3
  141. data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
  142. data/lib/rubocop/cop/style/alias.rb +4 -4
  143. data/lib/rubocop/cop/style/and_or.rb +7 -8
  144. data/lib/rubocop/cop/style/array_join.rb +2 -2
  145. data/lib/rubocop/cop/style/attr.rb +1 -3
  146. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  147. data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
  148. data/lib/rubocop/cop/style/case_equality.rb +24 -1
  149. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  150. data/lib/rubocop/cop/style/collection_methods.rb +2 -0
  151. data/lib/rubocop/cop/style/conditional_assignment.rb +9 -11
  152. data/lib/rubocop/cop/style/copyright.rb +3 -3
  153. data/lib/rubocop/cop/style/dir.rb +1 -1
  154. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
  155. data/lib/rubocop/cop/style/documentation.rb +43 -5
  156. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
  157. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  158. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  159. data/lib/rubocop/cop/style/each_with_object.rb +3 -3
  160. data/lib/rubocop/cop/style/empty_literal.rb +1 -3
  161. data/lib/rubocop/cop/style/empty_method.rb +2 -6
  162. data/lib/rubocop/cop/style/end_block.rb +6 -0
  163. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  164. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
  165. data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
  166. data/lib/rubocop/cop/style/format_string.rb +2 -2
  167. data/lib/rubocop/cop/style/format_string_token.rb +2 -3
  168. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
  169. data/lib/rubocop/cop/style/guard_clause.rb +25 -2
  170. data/lib/rubocop/cop/style/hash_each_methods.rb +6 -4
  171. data/lib/rubocop/cop/style/hash_syntax.rb +19 -12
  172. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -2
  173. data/lib/rubocop/cop/style/hash_transform_values.rb +6 -5
  174. data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
  175. data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
  176. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  177. data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
  178. data/lib/rubocop/cop/style/lambda.rb +3 -2
  179. data/lib/rubocop/cop/style/lambda_call.rb +1 -21
  180. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  181. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  182. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  183. data/lib/rubocop/cop/style/module_function.rb +58 -12
  184. data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
  185. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  186. data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
  187. data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
  188. data/lib/rubocop/cop/style/negated_if.rb +3 -3
  189. data/lib/rubocop/cop/style/negated_unless.rb +3 -3
  190. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
  191. data/lib/rubocop/cop/style/next.rb +2 -2
  192. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  193. data/lib/rubocop/cop/style/non_nil_check.rb +5 -5
  194. data/lib/rubocop/cop/style/not.rb +1 -1
  195. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  196. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  197. data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
  198. data/lib/rubocop/cop/style/one_line_conditional.rb +6 -9
  199. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  200. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  201. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  202. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
  203. data/lib/rubocop/cop/style/proc.rb +1 -1
  204. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  205. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  206. data/lib/rubocop/cop/style/redundant_condition.rb +3 -4
  207. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  208. data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
  209. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
  210. data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
  211. data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
  212. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
  213. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
  214. data/lib/rubocop/cop/style/redundant_return.rb +5 -7
  215. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  216. data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
  217. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  218. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  219. data/lib/rubocop/cop/style/safe_navigation.rb +3 -7
  220. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  221. data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
  222. data/lib/rubocop/cop/style/special_global_vars.rb +3 -7
  223. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
  224. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  225. data/lib/rubocop/cop/style/symbol_array.rb +2 -2
  226. data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
  227. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
  228. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -0
  229. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
  230. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
  231. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
  232. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
  233. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  234. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  235. data/lib/rubocop/cop/style/unpack_first.rb +0 -4
  236. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  237. data/lib/rubocop/cop/style/when_then.rb +1 -1
  238. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
  239. data/lib/rubocop/cop/style/word_array.rb +1 -1
  240. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  241. data/lib/rubocop/cop/team.rb +61 -25
  242. data/lib/rubocop/cop/util.rb +25 -1
  243. data/lib/rubocop/cop/variable_force.rb +3 -9
  244. data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
  245. data/lib/rubocop/cop/variable_force/branch.rb +1 -3
  246. data/lib/rubocop/cop/variable_force/scope.rb +1 -0
  247. data/lib/rubocop/cop/variable_force/variable.rb +3 -6
  248. data/lib/rubocop/ext/processed_source.rb +18 -0
  249. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  250. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  251. data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
  252. data/lib/rubocop/formatter/formatter_set.rb +1 -4
  253. data/lib/rubocop/formatter/junit_formatter.rb +27 -6
  254. data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
  255. data/lib/rubocop/formatter/tap_formatter.rb +1 -1
  256. data/lib/rubocop/magic_comment.rb +1 -1
  257. data/lib/rubocop/name_similarity.rb +12 -9
  258. data/lib/rubocop/options.rb +33 -12
  259. data/lib/rubocop/remote_config.rb +1 -3
  260. data/lib/rubocop/result_cache.rb +5 -7
  261. data/lib/rubocop/rspec/cop_helper.rb +3 -26
  262. data/lib/rubocop/rspec/expect_offense.rb +46 -16
  263. data/lib/rubocop/rspec/shared_contexts.rb +54 -20
  264. data/lib/rubocop/runner.rb +21 -14
  265. data/lib/rubocop/target_finder.rb +7 -7
  266. data/lib/rubocop/target_ruby.rb +5 -2
  267. data/lib/rubocop/version.rb +5 -3
  268. metadata +50 -77
  269. data/lib/rubocop/ast/builder.rb +0 -83
  270. data/lib/rubocop/ast/node.rb +0 -632
  271. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  272. data/lib/rubocop/ast/node/and_node.rb +0 -29
  273. data/lib/rubocop/ast/node/args_node.rb +0 -29
  274. data/lib/rubocop/ast/node/array_node.rb +0 -57
  275. data/lib/rubocop/ast/node/block_node.rb +0 -117
  276. data/lib/rubocop/ast/node/break_node.rb +0 -17
  277. data/lib/rubocop/ast/node/case_node.rb +0 -56
  278. data/lib/rubocop/ast/node/class_node.rb +0 -31
  279. data/lib/rubocop/ast/node/def_node.rb +0 -82
  280. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  281. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  282. data/lib/rubocop/ast/node/float_node.rb +0 -12
  283. data/lib/rubocop/ast/node/for_node.rb +0 -53
  284. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  285. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  286. data/lib/rubocop/ast/node/if_node.rb +0 -175
  287. data/lib/rubocop/ast/node/int_node.rb +0 -12
  288. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  289. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  290. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  291. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  292. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  293. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  294. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
  295. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  296. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  297. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  298. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  299. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  300. data/lib/rubocop/ast/node/module_node.rb +0 -24
  301. data/lib/rubocop/ast/node/or_node.rb +0 -29
  302. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  303. data/lib/rubocop/ast/node/range_node.rb +0 -18
  304. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  305. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  306. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  307. data/lib/rubocop/ast/node/return_node.rb +0 -24
  308. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  309. data/lib/rubocop/ast/node/send_node.rb +0 -13
  310. data/lib/rubocop/ast/node/str_node.rb +0 -16
  311. data/lib/rubocop/ast/node/super_node.rb +0 -21
  312. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  313. data/lib/rubocop/ast/node/until_node.rb +0 -35
  314. data/lib/rubocop/ast/node/when_node.rb +0 -53
  315. data/lib/rubocop/ast/node/while_node.rb +0 -35
  316. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  317. data/lib/rubocop/ast/sexp.rb +0 -16
  318. data/lib/rubocop/ast/traversal.rb +0 -200
  319. data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
  320. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
  321. data/lib/rubocop/node_pattern.rb +0 -887
  322. data/lib/rubocop/processed_source.rb +0 -216
  323. data/lib/rubocop/string_util.rb +0 -14
  324. data/lib/rubocop/token.rb +0 -114
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Layout
6
+ # Checks for a newline after an attribute accessor or a group of them.
7
+ # `alias` syntax and `alias_method`, `public`, `protected`, and `private` methods are allowed
8
+ # by default. These are customizable with `AllowAliasSyntax` and `AllowedMethods` options.
9
+ #
10
+ # @example
11
+ # # bad
12
+ # attr_accessor :foo
13
+ # def do_something
14
+ # end
15
+ #
16
+ # # good
17
+ # attr_accessor :foo
18
+ #
19
+ # def do_something
20
+ # end
21
+ #
22
+ # # good
23
+ # attr_accessor :foo
24
+ # attr_reader :bar
25
+ # attr_writer :baz
26
+ # attr :qux
27
+ #
28
+ # def do_something
29
+ # end
30
+ #
31
+ # @example AllowAliasSyntax: true (default)
32
+ # # good
33
+ # attr_accessor :foo
34
+ # alias :foo? :foo
35
+ #
36
+ # def do_something
37
+ # end
38
+ #
39
+ # @example AllowAliasSyntax: false
40
+ # # bad
41
+ # attr_accessor :foo
42
+ # alias :foo? :foo
43
+ #
44
+ # def do_something
45
+ # end
46
+ #
47
+ # # good
48
+ # attr_accessor :foo
49
+ #
50
+ # alias :foo? :foo
51
+ #
52
+ # def do_something
53
+ # end
54
+ #
55
+ # @example AllowedMethods: ['private']
56
+ # # good
57
+ # attr_accessor :foo
58
+ # private :foo
59
+ #
60
+ # def do_something
61
+ # end
62
+ #
63
+ class EmptyLinesAroundAttributeAccessor < Cop
64
+ include RangeHelp
65
+
66
+ MSG = 'Add an empty line after attribute accessor.'
67
+
68
+ def on_send(node)
69
+ return unless node.attribute_accessor?
70
+ return if next_line_empty?(node.last_line)
71
+
72
+ next_line_node = next_line_node(node)
73
+ return unless require_empty_line?(next_line_node)
74
+
75
+ add_offense(node)
76
+ end
77
+
78
+ def autocorrect(node)
79
+ lambda do |corrector|
80
+ range = range_by_whole_lines(node.source_range)
81
+
82
+ corrector.insert_after(range, "\n")
83
+ end
84
+ end
85
+
86
+ private
87
+
88
+ def next_line_empty?(line)
89
+ processed_source[line].blank?
90
+ end
91
+
92
+ def require_empty_line?(node)
93
+ return false unless node&.respond_to?(:type)
94
+
95
+ !allow_alias?(node) && !attribute_or_allowed_method?(node)
96
+ end
97
+
98
+ def next_line_node(node)
99
+ node.parent.children[node.sibling_index + 1]
100
+ end
101
+
102
+ def allow_alias?(node)
103
+ allow_alias_syntax? && node.alias_type?
104
+ end
105
+
106
+ def attribute_or_allowed_method?(node)
107
+ return false unless node.send_type?
108
+
109
+ node.attribute_accessor? || allowed_method?(node.method_name)
110
+ end
111
+
112
+ def allow_alias_syntax?
113
+ cop_config.fetch('AllowAliasSyntax', true)
114
+ end
115
+
116
+ def allowed_method?(name)
117
+ allowed_methods.include?(name.to_s)
118
+ end
119
+
120
+ def allowed_methods
121
+ cop_config.fetch('AllowedMethods', [])
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -75,8 +75,8 @@ module RuboCop
75
75
  style
76
76
  end
77
77
  case effective_style
78
- when :lf then MSG_DETECTED if line =~ /\r$/
79
- else MSG_MISSING if line !~ /\r$/
78
+ when :lf then MSG_DETECTED if line.end_with?("\r", "\r\n")
79
+ else MSG_MISSING unless line.end_with?("\r\n")
80
80
  end
81
81
  end
82
82
 
@@ -2,13 +2,12 @@
2
2
 
3
3
  module RuboCop
4
4
  module Cop
5
- # rubocop:disable Layout/LineLength
6
5
  module Layout
7
6
  # This cop checks the indentation of the first argument in a method call.
8
7
  # Arguments after the first one are checked by Layout/ArgumentAlignment,
9
8
  # not by this cop.
10
9
  #
11
- # For indenting the first parameter of method *definitions*, check out
10
+ # For indenting the first parameter of method _definitions_, check out
12
11
  # Layout/FirstParameterIndentation.
13
12
  #
14
13
  # @example
@@ -143,7 +142,6 @@ module RuboCop
143
142
  # second_param
144
143
  #
145
144
  class FirstArgumentIndentation < Cop
146
- # rubocop:enable Layout/LineLength
147
145
  include Alignment
148
146
  include ConfigurableEnforcedStyle
149
147
  include RangeHelp
@@ -125,21 +125,13 @@ module RuboCop
125
125
 
126
126
  def check_right_bracket(right_bracket, left_bracket, left_parenthesis)
127
127
  # if the right bracket is on the same line as the last value, accept
128
- return if right_bracket.source_line[0...right_bracket.column] =~ /\S/
128
+ return if /\S/.match?(right_bracket.source_line[0...right_bracket.column])
129
129
 
130
130
  expected_column = base_column(left_bracket, left_parenthesis)
131
131
  @column_delta = expected_column - right_bracket.column
132
132
  return if @column_delta.zero?
133
133
 
134
- msg = if style == :align_brackets
135
- 'Indent the right bracket the same as the left bracket.'
136
- elsif style == :special_inside_parentheses && left_parenthesis
137
- 'Indent the right bracket the same as the first position ' \
138
- 'after the preceding left parenthesis.'
139
- else
140
- 'Indent the right bracket the same as the start of the line' \
141
- ' where the left bracket is.'
142
- end
134
+ msg = msg(left_parenthesis)
143
135
  add_offense(right_bracket, location: right_bracket, message: msg)
144
136
  end
145
137
 
@@ -161,6 +153,18 @@ module RuboCop
161
153
  base_description: base_description
162
154
  )
163
155
  end
156
+
157
+ def msg(left_parenthesis)
158
+ if style == :align_brackets
159
+ 'Indent the right bracket the same as the left bracket.'
160
+ elsif style == :special_inside_parentheses && left_parenthesis
161
+ 'Indent the right bracket the same as the first position ' \
162
+ 'after the preceding left parenthesis.'
163
+ else
164
+ 'Indent the right bracket the same as the start of the line' \
165
+ ' where the left bracket is.'
166
+ end
167
+ end
164
168
  end
165
169
  end
166
170
  end
@@ -37,7 +37,7 @@ module RuboCop
37
37
 
38
38
  def assignment_on_same_line?(node)
39
39
  source = node.source_range.source_line[0...node.loc.column]
40
- source =~ /\s*\=\s*$/
40
+ source =~ /\s*=\s*$/
41
41
  end
42
42
  end
43
43
  end
@@ -128,7 +128,7 @@ module RuboCop
128
128
 
129
129
  def check_right_brace(right_brace, left_brace, left_parenthesis)
130
130
  # if the right brace is on the same line as the last value, accept
131
- return if right_brace.source_line[0...right_brace.column] =~ /\S/
131
+ return if /\S/.match?(right_brace.source_line[0...right_brace.column])
132
132
 
133
133
  expected_column = base_column(left_brace, left_parenthesis)
134
134
  @column_delta = expected_column - right_brace.column
@@ -36,9 +36,7 @@ module RuboCop
36
36
  # ...then each key/value pair is treated as a method 'argument'
37
37
  # when determining where line breaks should appear.
38
38
  if (last_arg = args.last)
39
- if last_arg.hash_type? && !last_arg.braces?
40
- args = args.concat(args.pop.children)
41
- end
39
+ args = args.concat(args.pop.children) if last_arg.hash_type? && !last_arg.braces?
42
40
  end
43
41
 
44
42
  check_method_line_break(node, args)
@@ -7,9 +7,9 @@ module RuboCop
7
7
  # definition. Parameters after the first one are checked by
8
8
  # Layout/ParameterAlignment, not by this cop.
9
9
  #
10
- # For indenting the first argument of method *calls*, check out
10
+ # For indenting the first argument of method _calls_, check out
11
11
  # Layout/FirstArgumentIndentation, which supports options related to
12
- # nesting that are irrelevant for method *definitions*.
12
+ # nesting that are irrelevant for method _definitions_.
13
13
  #
14
14
  # @example
15
15
  #
@@ -7,16 +7,16 @@ module RuboCop
7
7
  # literal are aligned according to configuration. The configuration
8
8
  # options are:
9
9
  #
10
- # - key (left align keys, one space before hash rockets and values)
11
- # - separator (align hash rockets and colons, right align keys)
12
- # - table (left align keys, hash rockets, and values)
10
+ # * key (left align keys, one space before hash rockets and values)
11
+ # * separator (align hash rockets and colons, right align keys)
12
+ # * table (left align keys, hash rockets, and values)
13
13
  #
14
14
  # The treatment of hashes passed as the last argument to a method call
15
15
  # can also be configured. The options are:
16
16
  #
17
- # - always_inspect
18
- # - always_ignore
19
- # - ignore_implicit (without curly braces)
17
+ # * always_inspect
18
+ # * always_ignore
19
+ # * ignore_implicit (without curly braces)
20
20
  #
21
21
  # Alternatively you can specify multiple allowed styles. That's done by
22
22
  # passing a list of styles to EnforcedStyles.
@@ -98,13 +98,9 @@ module RuboCop
98
98
  lambda do |corrector|
99
99
  fix_closing_parenthesis(node, corrector)
100
100
 
101
- if internal_trailing_comma?(node)
102
- remove_internal_trailing_comma(node, corrector)
103
- end
101
+ remove_internal_trailing_comma(node, corrector) if internal_trailing_comma?(node)
104
102
 
105
- if external_trailing_comma?(node)
106
- fix_external_trailing_comma(node, corrector)
107
- end
103
+ fix_external_trailing_comma(node, corrector) if external_trailing_comma?(node)
108
104
  end
109
105
  end
110
106
 
@@ -169,7 +165,7 @@ module RuboCop
169
165
  end
170
166
 
171
167
  def add_correct_closing_paren(node, corrector)
172
- corrector.insert_after(node.arguments.last.source_range, ')')
168
+ corrector.insert_after(node.arguments.last, ')')
173
169
  end
174
170
 
175
171
  def remove_incorrect_closing_paren(node, corrector)
@@ -194,7 +190,7 @@ module RuboCop
194
190
  def safe_to_remove_line_containing_closing_paren?(node)
195
191
  last_line = processed_source[node.loc.end.line - 1]
196
192
  # Safe to remove if last line only contains `)`, `,`, and whitespace.
197
- last_line.match(/^[ ]*\)[ ]{0,20},{0,1}[ ]*$/)
193
+ last_line.match?(/^ *\) {0,20},{0,1} *$/)
198
194
  end
199
195
 
200
196
  def incorrect_parenthesis_removal_end(node)
@@ -249,7 +245,7 @@ module RuboCop
249
245
  def add_correct_external_trailing_comma(node, corrector)
250
246
  return unless external_trailing_comma?(node)
251
247
 
252
- corrector.insert_after(node.arguments.last.source_range, ',')
248
+ corrector.insert_after(node.arguments.last, ',')
253
249
  end
254
250
 
255
251
  def remove_incorrect_external_trailing_comma(node, corrector)
@@ -5,66 +5,29 @@ module RuboCop
5
5
  module Layout
6
6
  # This cop checks the indentation of the here document bodies. The bodies
7
7
  # are indented one step.
8
- # In Ruby 2.3 or newer, squiggly heredocs (`<<~`) should be used. If you
9
- # use the older rubies, you should introduce some library to your project
10
- # (e.g. ActiveSupport, Powerpack or Unindent).
11
- # Note: When `Layout/LineLength`'s `AllowHeredoc` is false (not default),
8
+ #
9
+ # Note: When ``Layout/LineLength``'s `AllowHeredoc` is false (not default),
12
10
  # this cop does not add any offenses for long here documents to
13
11
  # avoid `Layout/LineLength`'s offenses.
14
12
  #
15
- # @example EnforcedStyle: squiggly (default)
13
+ # @example
16
14
  # # bad
17
15
  # <<-RUBY
18
16
  # something
19
17
  # RUBY
20
18
  #
21
19
  # # good
22
- # # When EnforcedStyle is squiggly, bad code is auto-corrected to the
23
- # # following code.
24
20
  # <<~RUBY
25
21
  # something
26
22
  # RUBY
27
23
  #
28
- # @example EnforcedStyle: active_support
29
- # # good
30
- # # When EnforcedStyle is active_support, bad code is auto-corrected to
31
- # # the following code.
32
- # <<-RUBY.strip_heredoc
33
- # something
34
- # RUBY
35
- #
36
- # @example EnforcedStyle: powerpack
37
- # # good
38
- # # When EnforcedStyle is powerpack, bad code is auto-corrected to
39
- # # the following code.
40
- # <<-RUBY.strip_indent
41
- # something
42
- # RUBY
43
- #
44
- # @example EnforcedStyle: unindent
45
- # # good
46
- # # When EnforcedStyle is unindent, bad code is auto-corrected to
47
- # # the following code.
48
- # <<-RUBY.unindent
49
- # something
50
- # RUBY
51
24
  #
52
25
  class HeredocIndentation < Cop
53
26
  include Heredoc
54
- include ConfigurableEnforcedStyle
55
27
 
56
- RUBY23_TYPE_MSG = 'Use %<indentation_width>d spaces for indentation ' \
57
- 'in a heredoc by using `<<~` instead of ' \
58
- '`%<current_indent_type>s`.'
59
- RUBY23_WIDTH_MSG = 'Use %<indentation_width>d spaces for '\
60
- 'indentation in a heredoc.'
61
- LIBRARY_MSG = 'Use %<indentation_width>d spaces for indentation in a ' \
62
- 'heredoc by using %<method>s.'
63
- STRIP_METHODS = {
64
- unindent: 'unindent',
65
- active_support: 'strip_heredoc',
66
- powerpack: 'strip_indent'
67
- }.freeze
28
+ TYPE_MSG = 'Use %<indentation_width>d spaces for indentation in a ' \
29
+ 'heredoc by using `<<~` instead of `%<current_indent_type>s`.'
30
+ WIDTH_MSG = 'Use %<indentation_width>d spaces for indentation in a heredoc.'
68
31
 
69
32
  def on_heredoc(node)
70
33
  body = heredoc_body(node)
@@ -85,59 +48,38 @@ module RuboCop
85
48
  end
86
49
 
87
50
  def autocorrect(node)
88
- check_style!
89
-
90
- case style
91
- when :squiggly
92
- correct_by_squiggly(node)
93
- else
94
- correct_by_library(node)
51
+ lambda do |corrector|
52
+ if heredoc_indent_type(node) == '~'
53
+ adjust_squiggly(corrector, node)
54
+ else
55
+ adjust_minus(corrector, node)
56
+ end
95
57
  end
96
58
  end
97
59
 
98
60
  private
99
61
 
100
62
  def message(node)
101
- case style
102
- when :squiggly
103
- current_indent_type = "<<#{heredoc_indent_type(node)}"
104
- ruby23_message(indentation_width, current_indent_type)
105
- when nil
106
- method = "some library(e.g. ActiveSupport's `String#strip_heredoc`)"
107
- library_message(indentation_width, method)
108
- else
109
- method = "`String##{STRIP_METHODS[style]}`"
110
- library_message(indentation_width, method)
111
- end
112
- end
113
-
114
- def library_message(indentation_width, method)
115
- format(
116
- LIBRARY_MSG,
117
- indentation_width: indentation_width,
118
- method: method
119
- )
120
- end
63
+ current_indent_type = "<<#{heredoc_indent_type(node)}"
121
64
 
122
- def ruby23_message(indentation_width, current_indent_type)
123
65
  if current_indent_type == '<<~'
124
- ruby23_width_message(indentation_width)
66
+ width_message(indentation_width)
125
67
  else
126
- ruby23_type_message(indentation_width, current_indent_type)
68
+ type_message(indentation_width, current_indent_type)
127
69
  end
128
70
  end
129
71
 
130
- def ruby23_type_message(indentation_width, current_indent_type)
72
+ def type_message(indentation_width, current_indent_type)
131
73
  format(
132
- RUBY23_TYPE_MSG,
74
+ TYPE_MSG,
133
75
  indentation_width: indentation_width,
134
76
  current_indent_type: current_indent_type
135
77
  )
136
78
  end
137
79
 
138
- def ruby23_width_message(indentation_width)
80
+ def width_message(indentation_width)
139
81
  format(
140
- RUBY23_WIDTH_MSG,
82
+ WIDTH_MSG,
141
83
  indentation_width: indentation_width
142
84
  )
143
85
  end
@@ -166,16 +108,6 @@ module RuboCop
166
108
  config.for_cop('Layout/LineLength')['Max']
167
109
  end
168
110
 
169
- def correct_by_squiggly(node)
170
- lambda do |corrector|
171
- if heredoc_indent_type(node) == '~'
172
- adjust_squiggly(corrector, node)
173
- else
174
- adjust_minus(corrector, node)
175
- end
176
- end
177
- end
178
-
179
111
  def adjust_squiggly(corrector, node)
180
112
  corrector.replace(node.loc.heredoc_body, indented_body(node))
181
113
  corrector.replace(node.loc.heredoc_end, indented_end(node))
@@ -184,22 +116,7 @@ module RuboCop
184
116
  def adjust_minus(corrector, node)
185
117
  heredoc_beginning = node.loc.expression.source
186
118
  corrected = heredoc_beginning.sub(/<<-?/, '<<~')
187
- corrector.replace(node.loc.expression, corrected)
188
- end
189
-
190
- def correct_by_library(node)
191
- lambda do |corrector|
192
- corrector.replace(node.loc.heredoc_body, indented_body(node))
193
- corrected = ".#{STRIP_METHODS[style]}"
194
- corrector.insert_after(node.loc.expression, corrected)
195
- end
196
- end
197
-
198
- def check_style!
199
- return if style
200
-
201
- raise Warning, "Auto-correction does not work for #{cop_name}. " \
202
- 'Please configure EnforcedStyle.'
119
+ corrector.replace(node, corrected)
203
120
  end
204
121
 
205
122
  def indented_body(node)