rubocop 0.42.0 → 0.52.1

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 (627) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +106 -20
  4. data/assets/output.html.erb +21 -10
  5. data/bin/rubocop +1 -2
  6. data/config/default.yml +914 -483
  7. data/config/disabled.yml +61 -41
  8. data/config/enabled.yml +1396 -878
  9. data/lib/rubocop/ast/builder.rb +72 -0
  10. data/lib/rubocop/ast/node/and_node.rb +37 -0
  11. data/lib/rubocop/ast/node/args_node.rb +29 -0
  12. data/lib/rubocop/ast/node/array_node.rb +57 -0
  13. data/lib/rubocop/ast/node/block_node.rb +116 -0
  14. data/lib/rubocop/ast/node/case_node.rb +64 -0
  15. data/lib/rubocop/ast/node/def_node.rb +71 -0
  16. data/lib/rubocop/ast/node/ensure_node.rb +25 -0
  17. data/lib/rubocop/ast/node/for_node.rb +61 -0
  18. data/lib/rubocop/ast/node/hash_node.rb +109 -0
  19. data/lib/rubocop/ast/node/if_node.rb +146 -0
  20. data/lib/rubocop/ast/node/keyword_splat_node.rb +45 -0
  21. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
  22. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +23 -0
  23. data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
  24. data/lib/rubocop/ast/node/mixin/conditional_node.rb +45 -0
  25. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +125 -0
  26. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
  27. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
  28. data/lib/rubocop/ast/node/mixin/modifier_node.rb +17 -0
  29. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +61 -0
  30. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +35 -0
  31. data/lib/rubocop/ast/node/or_node.rb +37 -0
  32. data/lib/rubocop/ast/node/pair_node.rb +64 -0
  33. data/lib/rubocop/ast/node/regexp_node.rb +35 -0
  34. data/lib/rubocop/ast/node/resbody_node.rb +25 -0
  35. data/lib/rubocop/ast/node/send_node.rb +45 -0
  36. data/lib/rubocop/ast/node/str_node.rb +14 -0
  37. data/lib/rubocop/ast/node/super_node.rb +21 -0
  38. data/lib/rubocop/ast/node/symbol_node.rb +20 -0
  39. data/lib/rubocop/ast/node/until_node.rb +43 -0
  40. data/lib/rubocop/ast/node/when_node.rb +61 -0
  41. data/lib/rubocop/ast/node/while_node.rb +43 -0
  42. data/lib/rubocop/ast/node/yield_node.rb +21 -0
  43. data/lib/rubocop/ast/node.rb +634 -0
  44. data/lib/rubocop/ast/sexp.rb +16 -0
  45. data/lib/rubocop/{ast_node → ast}/traversal.rb +23 -24
  46. data/lib/rubocop/cached_data.rb +11 -31
  47. data/lib/rubocop/cli.rb +116 -33
  48. data/lib/rubocop/comment_config.rb +4 -10
  49. data/lib/rubocop/config.rb +355 -102
  50. data/lib/rubocop/config_loader.rb +93 -78
  51. data/lib/rubocop/config_loader_resolver.rb +106 -7
  52. data/lib/rubocop/config_store.rb +4 -1
  53. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  54. data/lib/rubocop/cop/badge.rb +73 -0
  55. data/lib/rubocop/cop/bundler/duplicated_gem.rb +71 -0
  56. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +67 -0
  57. data/lib/rubocop/cop/bundler/ordered_gems.rb +71 -0
  58. data/lib/rubocop/cop/commissioner.rb +27 -10
  59. data/lib/rubocop/cop/cop.rb +62 -107
  60. data/lib/rubocop/cop/corrector.rb +0 -1
  61. data/lib/rubocop/cop/correctors/alignment_corrector.rb +121 -0
  62. data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
  63. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  64. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +62 -0
  65. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  66. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  67. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  68. data/lib/rubocop/cop/correctors/space_corrector.rb +34 -0
  69. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  70. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +31 -0
  71. data/lib/rubocop/cop/force.rb +0 -1
  72. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
  73. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +106 -0
  74. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
  75. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  76. data/lib/rubocop/cop/generator.rb +191 -0
  77. data/lib/rubocop/cop/ignored_node.rb +0 -1
  78. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
  79. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
  80. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  81. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +59 -0
  82. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +71 -0
  83. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
  84. data/lib/rubocop/cop/internal_affairs.rb +8 -0
  85. data/lib/rubocop/cop/{style → layout}/access_modifier_indentation.rb +39 -10
  86. data/lib/rubocop/cop/layout/align_array.rb +39 -0
  87. data/lib/rubocop/cop/layout/align_hash.rb +235 -0
  88. data/lib/rubocop/cop/{style → layout}/align_parameters.rb +38 -19
  89. data/lib/rubocop/cop/{style → layout}/block_end_newline.rb +26 -8
  90. data/lib/rubocop/cop/layout/case_indentation.rb +160 -0
  91. data/lib/rubocop/cop/layout/class_structure.rb +306 -0
  92. data/lib/rubocop/cop/{style → layout}/closing_parenthesis_indentation.rb +18 -13
  93. data/lib/rubocop/cop/{style → layout}/comment_indentation.rb +48 -6
  94. data/lib/rubocop/cop/{style → layout}/dot_position.rb +34 -21
  95. data/lib/rubocop/cop/{style → layout}/else_alignment.rb +55 -37
  96. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +63 -0
  97. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +147 -0
  98. data/lib/rubocop/cop/{style → layout}/empty_lines.rb +17 -4
  99. data/lib/rubocop/cop/{style → layout}/empty_lines_around_access_modifier.rb +40 -24
  100. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +87 -0
  101. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +46 -0
  102. data/lib/rubocop/cop/{style → layout}/empty_lines_around_block_body.rb +9 -12
  103. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +68 -0
  104. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +135 -0
  105. data/lib/rubocop/cop/{style → layout}/empty_lines_around_method_body.rb +10 -7
  106. data/lib/rubocop/cop/{style → layout}/empty_lines_around_module_body.rb +27 -9
  107. data/lib/rubocop/cop/layout/end_of_line.rb +52 -0
  108. data/lib/rubocop/cop/{style → layout}/extra_spacing.rb +63 -53
  109. data/lib/rubocop/cop/{style → layout}/first_array_element_line_break.rb +5 -2
  110. data/lib/rubocop/cop/{style → layout}/first_hash_element_line_break.rb +5 -2
  111. data/lib/rubocop/cop/{style → layout}/first_method_argument_line_break.rb +7 -4
  112. data/lib/rubocop/cop/{style → layout}/first_method_parameter_line_break.rb +8 -5
  113. data/lib/rubocop/cop/{style → layout}/first_parameter_indentation.rb +32 -26
  114. data/lib/rubocop/cop/{style → layout}/indent_array.rb +75 -25
  115. data/lib/rubocop/cop/{style → layout}/indent_assignment.rb +9 -6
  116. data/lib/rubocop/cop/{style → layout}/indent_hash.rb +80 -31
  117. data/lib/rubocop/cop/layout/indent_heredoc.rb +208 -0
  118. data/lib/rubocop/cop/{style → layout}/indentation_consistency.rb +7 -5
  119. data/lib/rubocop/cop/{style → layout}/indentation_width.rb +151 -117
  120. data/lib/rubocop/cop/layout/initial_indentation.rb +45 -0
  121. data/lib/rubocop/cop/layout/leading_comment_space.rb +58 -0
  122. data/lib/rubocop/cop/{style → layout}/multiline_array_brace_layout.rb +52 -16
  123. data/lib/rubocop/cop/{style → layout}/multiline_assignment_layout.rb +18 -21
  124. data/lib/rubocop/cop/{style → layout}/multiline_block_layout.rb +37 -43
  125. data/lib/rubocop/cop/{style → layout}/multiline_hash_brace_layout.rb +55 -15
  126. data/lib/rubocop/cop/{style → layout}/multiline_method_call_brace_layout.rb +15 -4
  127. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +221 -0
  128. data/lib/rubocop/cop/{style → layout}/multiline_method_definition_brace_layout.rb +12 -5
  129. data/lib/rubocop/cop/{style → layout}/multiline_operation_indentation.rb +23 -13
  130. data/lib/rubocop/cop/{style → layout}/rescue_ensure_alignment.rb +24 -13
  131. data/lib/rubocop/cop/{style → layout}/space_after_colon.rb +17 -13
  132. data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
  133. data/lib/rubocop/cop/{style → layout}/space_after_method_name.rb +11 -11
  134. data/lib/rubocop/cop/layout/space_after_not.rb +38 -0
  135. data/lib/rubocop/cop/{style → layout}/space_after_semicolon.rb +14 -4
  136. data/lib/rubocop/cop/{style → layout}/space_around_block_parameters.rb +52 -28
  137. data/lib/rubocop/cop/{style → layout}/space_around_equals_in_parameter_default.rb +29 -21
  138. data/lib/rubocop/cop/{style → layout}/space_around_keyword.rb +33 -29
  139. data/lib/rubocop/cop/layout/space_around_operators.rb +159 -0
  140. data/lib/rubocop/cop/layout/space_before_block_braces.rb +107 -0
  141. data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
  142. data/lib/rubocop/cop/{style → layout}/space_before_comment.rb +11 -7
  143. data/lib/rubocop/cop/{style → layout}/space_before_first_arg.rb +23 -20
  144. data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
  145. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +85 -0
  146. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +236 -0
  147. data/lib/rubocop/cop/{style → layout}/space_inside_array_percent_literal.rb +8 -8
  148. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +228 -0
  149. data/lib/rubocop/cop/{style → layout}/space_inside_hash_literal_braces.rb +91 -51
  150. data/lib/rubocop/cop/layout/space_inside_parens.rb +53 -0
  151. data/lib/rubocop/cop/{style → layout}/space_inside_percent_literal_delimiters.rb +14 -13
  152. data/lib/rubocop/cop/{style → layout}/space_inside_range_literal.rb +16 -17
  153. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +90 -0
  154. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +80 -0
  155. data/lib/rubocop/cop/{style → layout}/tab.rb +8 -6
  156. data/lib/rubocop/cop/{style → layout}/trailing_blank_lines.rb +14 -15
  157. data/lib/rubocop/cop/{style → layout}/trailing_whitespace.rb +3 -4
  158. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +59 -0
  159. data/lib/rubocop/cop/lint/ambiguous_operator.rb +13 -9
  160. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +7 -1
  161. data/lib/rubocop/cop/lint/assignment_in_condition.rb +55 -25
  162. data/lib/rubocop/cop/lint/block_alignment.rb +75 -34
  163. data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
  164. data/lib/rubocop/cop/lint/circular_argument_reference.rb +17 -15
  165. data/lib/rubocop/cop/lint/condition_position.rb +16 -15
  166. data/lib/rubocop/cop/lint/debugger.rb +57 -23
  167. data/lib/rubocop/cop/lint/def_end_alignment.rb +28 -14
  168. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +19 -10
  169. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
  170. data/lib/rubocop/cop/lint/duplicate_methods.rb +108 -14
  171. data/lib/rubocop/cop/lint/duplicated_key.rb +16 -9
  172. data/lib/rubocop/cop/lint/each_with_object_argument.rb +15 -6
  173. data/lib/rubocop/cop/lint/else_layout.rb +27 -31
  174. data/lib/rubocop/cop/lint/empty_ensure.rb +44 -3
  175. data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
  176. data/lib/rubocop/cop/lint/empty_interpolation.rb +16 -3
  177. data/lib/rubocop/cop/lint/empty_when.rb +38 -0
  178. data/lib/rubocop/cop/lint/end_alignment.rb +57 -39
  179. data/lib/rubocop/cop/lint/end_in_method.rb +24 -2
  180. data/lib/rubocop/cop/lint/ensure_return.rb +23 -3
  181. data/lib/rubocop/cop/lint/float_out_of_range.rb +10 -6
  182. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +67 -46
  183. data/lib/rubocop/cop/lint/handle_exceptions.rb +41 -4
  184. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +9 -5
  185. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +42 -29
  186. data/lib/rubocop/cop/lint/inherit_exception.rb +34 -23
  187. data/lib/rubocop/cop/lint/interpolation_check.rb +37 -0
  188. data/lib/rubocop/cop/lint/{literal_in_condition.rb → literal_as_condition.rb} +51 -40
  189. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +13 -8
  190. data/lib/rubocop/cop/lint/loop.rb +37 -2
  191. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
  192. data/lib/rubocop/cop/lint/multiple_compare.rb +48 -0
  193. data/lib/rubocop/cop/lint/nested_method_definition.rb +54 -12
  194. data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
  195. data/lib/rubocop/cop/lint/next_without_accumulator.rb +7 -3
  196. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +32 -23
  197. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +22 -14
  198. data/lib/rubocop/cop/lint/percent_string_array.rb +42 -27
  199. data/lib/rubocop/cop/lint/percent_symbol_array.rb +28 -19
  200. data/lib/rubocop/cop/lint/rand_one.rb +17 -8
  201. data/lib/rubocop/cop/lint/redundant_with_index.rb +80 -0
  202. data/lib/rubocop/cop/lint/redundant_with_object.rb +81 -0
  203. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  204. data/lib/rubocop/cop/lint/require_parentheses.rb +24 -30
  205. data/lib/rubocop/cop/lint/rescue_exception.rb +21 -2
  206. data/lib/rubocop/cop/lint/rescue_type.rb +90 -0
  207. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  208. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +70 -0
  209. data/lib/rubocop/cop/lint/script_permission.rb +49 -0
  210. data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
  211. data/lib/rubocop/cop/lint/shadowed_exception.rb +78 -57
  212. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +25 -2
  213. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +18 -12
  214. data/lib/rubocop/cop/lint/syntax.rb +23 -21
  215. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +26 -4
  216. data/lib/rubocop/cop/lint/unified_integer.rb +43 -0
  217. data/lib/rubocop/cop/lint/unneeded_disable.rb +117 -56
  218. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +51 -0
  219. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +167 -0
  220. data/lib/rubocop/cop/lint/unreachable_code.rb +72 -8
  221. data/lib/rubocop/cop/lint/unused_block_argument.rb +87 -27
  222. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  223. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +75 -0
  224. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  225. data/lib/rubocop/cop/lint/useless_access_modifier.rb +40 -18
  226. data/lib/rubocop/cop/lint/useless_assignment.rb +45 -14
  227. data/lib/rubocop/cop/lint/useless_comparison.rb +8 -10
  228. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +16 -2
  229. data/lib/rubocop/cop/lint/useless_setter_call.rb +57 -43
  230. data/lib/rubocop/cop/lint/void.rb +83 -23
  231. data/lib/rubocop/cop/message_annotator.rb +118 -0
  232. data/lib/rubocop/cop/metrics/abc_size.rb +3 -4
  233. data/lib/rubocop/cop/metrics/block_length.rb +32 -0
  234. data/lib/rubocop/cop/metrics/block_nesting.rb +21 -10
  235. data/lib/rubocop/cop/metrics/class_length.rb +3 -2
  236. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -4
  237. data/lib/rubocop/cop/metrics/line_length.rb +67 -14
  238. data/lib/rubocop/cop/metrics/method_length.rb +10 -10
  239. data/lib/rubocop/cop/metrics/module_length.rb +3 -2
  240. data/lib/rubocop/cop/metrics/parameter_lists.rb +15 -6
  241. data/lib/rubocop/cop/metrics/perceived_complexity.rb +5 -6
  242. data/lib/rubocop/cop/mixin/alignment.rb +70 -0
  243. data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -1
  244. data/lib/rubocop/cop/mixin/array_hash_indentation.rb +26 -22
  245. data/lib/rubocop/cop/mixin/array_min_size.rb +59 -0
  246. data/lib/rubocop/cop/mixin/array_syntax.rb +4 -12
  247. data/lib/rubocop/cop/mixin/check_assignment.rb +6 -7
  248. data/lib/rubocop/cop/mixin/classish_length.rb +0 -1
  249. data/lib/rubocop/cop/mixin/code_length.rb +4 -3
  250. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +21 -16
  251. data/lib/rubocop/cop/mixin/configurable_formatting.rb +48 -0
  252. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -4
  253. data/lib/rubocop/cop/mixin/configurable_naming.rb +5 -35
  254. data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
  255. data/lib/rubocop/cop/mixin/def_node.rb +29 -0
  256. data/lib/rubocop/cop/mixin/documentation_comment.rb +46 -0
  257. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  258. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +119 -27
  259. data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
  260. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +11 -27
  261. data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
  262. data/lib/rubocop/cop/mixin/first_element_line_break.rb +15 -11
  263. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +15 -13
  264. data/lib/rubocop/cop/mixin/hash_alignment.rb +116 -0
  265. data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
  266. data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
  267. data/lib/rubocop/cop/mixin/integer_node.rb +2 -1
  268. data/lib/rubocop/cop/mixin/match_range.rb +4 -6
  269. data/lib/rubocop/cop/mixin/method_complexity.rb +33 -8
  270. data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
  271. data/lib/rubocop/cop/mixin/min_body_length.rb +2 -1
  272. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +100 -66
  273. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +49 -51
  274. data/lib/rubocop/cop/mixin/negative_conditional.rb +18 -13
  275. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +1 -25
  276. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +48 -0
  277. data/lib/rubocop/cop/mixin/parentheses.rb +2 -8
  278. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +4 -2
  279. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  280. data/lib/rubocop/cop/mixin/percent_literal.rb +69 -6
  281. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +16 -5
  282. data/lib/rubocop/cop/mixin/rescue_node.rb +23 -0
  283. data/lib/rubocop/cop/mixin/safe_assignment.rb +3 -1
  284. data/lib/rubocop/cop/mixin/safe_mode.rb +22 -0
  285. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +8 -10
  286. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +10 -14
  287. data/lib/rubocop/cop/mixin/statement_modifier.rb +29 -32
  288. data/lib/rubocop/cop/mixin/string_help.rb +3 -2
  289. data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -15
  290. data/lib/rubocop/cop/mixin/surrounding_space.rb +78 -9
  291. data/lib/rubocop/cop/mixin/target_rails_version.rb +16 -0
  292. data/lib/rubocop/cop/mixin/target_ruby_version.rb +16 -0
  293. data/lib/rubocop/cop/mixin/too_many_lines.rb +39 -0
  294. data/lib/rubocop/cop/mixin/trailing_comma.rb +37 -38
  295. data/lib/rubocop/cop/mixin/unused_argument.rb +6 -16
  296. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  297. data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +36 -5
  298. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +42 -0
  299. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +33 -0
  300. data/lib/rubocop/cop/naming/constant_name.rb +58 -0
  301. data/lib/rubocop/cop/{style → naming}/file_name.rb +72 -29
  302. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  303. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +59 -0
  304. data/lib/rubocop/cop/naming/method_name.rb +40 -0
  305. data/lib/rubocop/cop/naming/predicate_name.rb +101 -0
  306. data/lib/rubocop/cop/naming/variable_name.rb +50 -0
  307. data/lib/rubocop/cop/naming/variable_number.rb +61 -0
  308. data/lib/rubocop/cop/offense.rb +9 -5
  309. data/lib/rubocop/cop/performance/caller.rb +69 -0
  310. data/lib/rubocop/cop/performance/case_when_splat.rb +65 -89
  311. data/lib/rubocop/cop/performance/casecmp.rb +37 -25
  312. data/lib/rubocop/cop/performance/compare_with_block.rb +117 -0
  313. data/lib/rubocop/cop/performance/count.rb +33 -43
  314. data/lib/rubocop/cop/performance/detect.rb +30 -31
  315. data/lib/rubocop/cop/performance/double_start_end_with.rb +55 -26
  316. data/lib/rubocop/cop/performance/end_with.rb +9 -9
  317. data/lib/rubocop/cop/performance/fixed_size.rb +21 -17
  318. data/lib/rubocop/cop/performance/flat_map.rb +30 -33
  319. data/lib/rubocop/cop/performance/hash_each_methods.rb +129 -0
  320. data/lib/rubocop/cop/performance/lstrip_rstrip.rb +14 -14
  321. data/lib/rubocop/cop/performance/range_include.rb +5 -4
  322. data/lib/rubocop/cop/performance/redundant_block_call.rb +28 -29
  323. data/lib/rubocop/cop/performance/redundant_match.rb +19 -15
  324. data/lib/rubocop/cop/performance/redundant_merge.rb +100 -52
  325. data/lib/rubocop/cop/performance/redundant_sort_by.rb +17 -14
  326. data/lib/rubocop/cop/performance/regexp_match.rb +224 -0
  327. data/lib/rubocop/cop/performance/reverse_each.rb +3 -6
  328. data/lib/rubocop/cop/performance/sample.rb +84 -83
  329. data/lib/rubocop/cop/performance/size.rb +22 -15
  330. data/lib/rubocop/cop/performance/start_with.rb +9 -9
  331. data/lib/rubocop/cop/performance/string_replacement.rb +35 -70
  332. data/lib/rubocop/cop/performance/times_map.rb +33 -24
  333. data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
  334. data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
  335. data/lib/rubocop/cop/rails/action_filter.rb +67 -47
  336. data/lib/rubocop/cop/rails/active_support_aliases.rb +68 -0
  337. data/lib/rubocop/cop/rails/application_job.rb +40 -0
  338. data/lib/rubocop/cop/rails/application_record.rb +40 -0
  339. data/lib/rubocop/cop/rails/blank.rb +142 -0
  340. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
  341. data/lib/rubocop/cop/rails/date.rb +47 -42
  342. data/lib/rubocop/cop/rails/delegate.rb +55 -33
  343. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +51 -0
  344. data/lib/rubocop/cop/rails/dynamic_find_by.rb +82 -0
  345. data/lib/rubocop/cop/rails/enum_uniqueness.rb +45 -0
  346. data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
  347. data/lib/rubocop/cop/rails/exit.rb +17 -11
  348. data/lib/rubocop/cop/rails/file_path.rb +72 -0
  349. data/lib/rubocop/cop/rails/find_by.rb +14 -20
  350. data/lib/rubocop/cop/rails/find_each.rb +8 -21
  351. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +9 -2
  352. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +84 -0
  353. data/lib/rubocop/cop/rails/http_positional_arguments.rb +102 -0
  354. data/lib/rubocop/cop/rails/inverse_of.rb +218 -0
  355. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
  356. data/lib/rubocop/cop/rails/not_null_column.rb +67 -0
  357. data/lib/rubocop/cop/rails/output.rb +15 -13
  358. data/lib/rubocop/cop/rails/output_safety.rb +65 -17
  359. data/lib/rubocop/cop/rails/pluralization_grammar.rb +30 -29
  360. data/lib/rubocop/cop/rails/presence.rb +118 -0
  361. data/lib/rubocop/cop/rails/present.rb +143 -0
  362. data/lib/rubocop/cop/rails/read_write_attribute.rb +20 -26
  363. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +133 -0
  364. data/lib/rubocop/cop/rails/relative_date_constant.rb +88 -0
  365. data/lib/rubocop/cop/rails/request_referer.rb +28 -13
  366. data/lib/rubocop/cop/rails/reversible_migration.rb +281 -0
  367. data/lib/rubocop/cop/rails/safe_navigation.rb +90 -0
  368. data/lib/rubocop/cop/rails/save_bang.rb +104 -19
  369. data/lib/rubocop/cop/rails/scope_args.rb +5 -10
  370. data/lib/rubocop/cop/rails/skips_model_validations.rb +70 -0
  371. data/lib/rubocop/cop/rails/time_zone.rb +34 -21
  372. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +17 -14
  373. data/lib/rubocop/cop/rails/unknown_env.rb +63 -0
  374. data/lib/rubocop/cop/rails/validation.rb +16 -20
  375. data/lib/rubocop/cop/registry.rb +172 -0
  376. data/lib/rubocop/cop/security/eval.rb +30 -0
  377. data/lib/rubocop/cop/security/json_load.rb +46 -0
  378. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  379. data/lib/rubocop/cop/security/yaml_load.rb +37 -0
  380. data/lib/rubocop/cop/severity.rb +1 -2
  381. data/lib/rubocop/cop/style/alias.rb +54 -33
  382. data/lib/rubocop/cop/style/and_or.rb +77 -63
  383. data/lib/rubocop/cop/style/array_join.rb +13 -9
  384. data/lib/rubocop/cop/style/ascii_comments.rb +25 -7
  385. data/lib/rubocop/cop/style/attr.rb +24 -11
  386. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -16
  387. data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -11
  388. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  389. data/lib/rubocop/cop/style/block_comments.rb +20 -11
  390. data/lib/rubocop/cop/style/block_delimiters.rb +122 -51
  391. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +142 -54
  392. data/lib/rubocop/cop/style/case_equality.rb +15 -4
  393. data/lib/rubocop/cop/style/character_literal.rb +12 -5
  394. data/lib/rubocop/cop/style/class_and_module_children.rb +85 -6
  395. data/lib/rubocop/cop/style/class_check.rb +35 -19
  396. data/lib/rubocop/cop/style/class_methods.rb +13 -14
  397. data/lib/rubocop/cop/style/class_vars.rb +5 -5
  398. data/lib/rubocop/cop/style/collection_methods.rb +12 -13
  399. data/lib/rubocop/cop/style/colon_method_call.rb +24 -16
  400. data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
  401. data/lib/rubocop/cop/style/command_literal.rb +98 -32
  402. data/lib/rubocop/cop/style/comment_annotation.rb +41 -15
  403. data/lib/rubocop/cop/style/commented_keyword.rb +84 -0
  404. data/lib/rubocop/cop/style/conditional_assignment.rb +161 -112
  405. data/lib/rubocop/cop/style/copyright.rb +32 -34
  406. data/lib/rubocop/cop/style/date_time.rb +44 -0
  407. data/lib/rubocop/cop/style/def_with_parentheses.rb +32 -9
  408. data/lib/rubocop/cop/style/dir.rb +48 -0
  409. data/lib/rubocop/cop/style/documentation.rb +44 -58
  410. data/lib/rubocop/cop/style/documentation_method.rb +76 -0
  411. data/lib/rubocop/cop/style/double_negation.rb +3 -3
  412. data/lib/rubocop/cop/style/each_for_simple_loop.rb +14 -13
  413. data/lib/rubocop/cop/style/each_with_object.rb +28 -25
  414. data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
  415. data/lib/rubocop/cop/style/empty_case_condition.rb +18 -30
  416. data/lib/rubocop/cop/style/empty_else.rb +82 -51
  417. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
  418. data/lib/rubocop/cop/style/empty_literal.rb +76 -48
  419. data/lib/rubocop/cop/style/empty_method.rb +112 -0
  420. data/lib/rubocop/cop/style/encoding.rb +10 -40
  421. data/lib/rubocop/cop/style/end_block.rb +1 -2
  422. data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
  423. data/lib/rubocop/cop/style/even_odd.rb +25 -44
  424. data/lib/rubocop/cop/style/flip_flop.rb +13 -3
  425. data/lib/rubocop/cop/style/for.rb +19 -15
  426. data/lib/rubocop/cop/style/format_string.rb +88 -42
  427. data/lib/rubocop/cop/style/format_string_token.rb +163 -0
  428. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +90 -15
  429. data/lib/rubocop/cop/style/global_vars.rb +14 -5
  430. data/lib/rubocop/cop/style/guard_clause.rb +22 -62
  431. data/lib/rubocop/cop/style/hash_syntax.rb +109 -59
  432. data/lib/rubocop/cop/style/identical_conditional_branches.rb +73 -32
  433. data/lib/rubocop/cop/style/if_inside_else.rb +16 -20
  434. data/lib/rubocop/cop/style/if_unless_modifier.rb +48 -39
  435. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +6 -12
  436. data/lib/rubocop/cop/style/if_with_semicolon.rb +10 -2
  437. data/lib/rubocop/cop/style/implicit_runtime_error.rb +7 -7
  438. data/lib/rubocop/cop/style/infinite_loop.rb +33 -32
  439. data/lib/rubocop/cop/style/inline_comment.rb +17 -5
  440. data/lib/rubocop/cop/style/inverse_methods.rb +149 -0
  441. data/lib/rubocop/cop/style/lambda.rb +66 -63
  442. data/lib/rubocop/cop/style/lambda_call.rb +50 -20
  443. data/lib/rubocop/cop/style/line_end_concatenation.rb +38 -17
  444. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +90 -0
  445. data/lib/rubocop/cop/style/{method_call_parentheses.rb → method_call_without_args_parentheses.rb} +32 -25
  446. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +9 -9
  447. data/lib/rubocop/cop/style/method_def_parentheses.rb +101 -29
  448. data/lib/rubocop/cop/style/method_missing.rb +14 -20
  449. data/lib/rubocop/cop/style/min_max.rb +68 -0
  450. data/lib/rubocop/cop/style/missing_else.rb +61 -21
  451. data/lib/rubocop/cop/style/mixin_grouping.rb +145 -0
  452. data/lib/rubocop/cop/style/mixin_usage.rb +82 -0
  453. data/lib/rubocop/cop/style/module_function.rb +44 -18
  454. data/lib/rubocop/cop/style/multiline_block_chain.rb +8 -15
  455. data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
  456. data/lib/rubocop/cop/style/multiline_if_then.rb +21 -14
  457. data/lib/rubocop/cop/style/multiline_memoization.rb +93 -0
  458. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +21 -9
  459. data/lib/rubocop/cop/style/multiple_comparison.rb +77 -0
  460. data/lib/rubocop/cop/style/mutable_constant.rb +17 -9
  461. data/lib/rubocop/cop/style/negated_if.rb +76 -25
  462. data/lib/rubocop/cop/style/negated_while.rb +4 -22
  463. data/lib/rubocop/cop/style/nested_modifier.rb +17 -47
  464. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +32 -28
  465. data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -6
  466. data/lib/rubocop/cop/style/next.rb +72 -53
  467. data/lib/rubocop/cop/style/nil_comparison.rb +10 -14
  468. data/lib/rubocop/cop/style/non_nil_check.rb +69 -62
  469. data/lib/rubocop/cop/style/not.rb +19 -13
  470. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +16 -7
  471. data/lib/rubocop/cop/style/numeric_literals.rb +33 -12
  472. data/lib/rubocop/cop/style/numeric_predicate.rb +30 -32
  473. data/lib/rubocop/cop/style/one_line_conditional.rb +21 -17
  474. data/lib/rubocop/cop/style/option_hash.rb +11 -37
  475. data/lib/rubocop/cop/style/optional_arguments.rb +20 -9
  476. data/lib/rubocop/cop/style/or_assignment.rb +88 -0
  477. data/lib/rubocop/cop/style/parallel_assignment.rb +83 -64
  478. data/lib/rubocop/cop/style/parentheses_around_condition.rb +37 -19
  479. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +50 -15
  480. data/lib/rubocop/cop/style/percent_q_literals.rb +40 -17
  481. data/lib/rubocop/cop/style/perl_backrefs.rb +9 -3
  482. data/lib/rubocop/cop/style/preferred_hash_methods.rb +48 -14
  483. data/lib/rubocop/cop/style/proc.rb +13 -10
  484. data/lib/rubocop/cop/style/raise_args.rb +46 -50
  485. data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
  486. data/lib/rubocop/cop/style/redundant_begin.rb +16 -6
  487. data/lib/rubocop/cop/style/redundant_conditional.rb +96 -0
  488. data/lib/rubocop/cop/style/redundant_exception.rb +4 -5
  489. data/lib/rubocop/cop/style/redundant_freeze.rb +7 -10
  490. data/lib/rubocop/cop/style/redundant_parentheses.rb +70 -31
  491. data/lib/rubocop/cop/style/redundant_return.rb +61 -23
  492. data/lib/rubocop/cop/style/redundant_self.rb +62 -60
  493. data/lib/rubocop/cop/style/regexp_literal.rb +100 -34
  494. data/lib/rubocop/cop/style/rescue_modifier.rb +15 -17
  495. data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
  496. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  497. data/lib/rubocop/cop/style/safe_navigation.rb +197 -0
  498. data/lib/rubocop/cop/style/self_assignment.rb +20 -17
  499. data/lib/rubocop/cop/style/semicolon.rb +25 -17
  500. data/lib/rubocop/cop/style/send.rb +14 -4
  501. data/lib/rubocop/cop/style/signal_exception.rb +105 -7
  502. data/lib/rubocop/cop/style/single_line_block_params.rb +27 -21
  503. data/lib/rubocop/cop/style/single_line_methods.rb +45 -31
  504. data/lib/rubocop/cop/style/special_global_vars.rb +32 -28
  505. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +24 -53
  506. data/lib/rubocop/cop/style/stderr_puts.rb +54 -0
  507. data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
  508. data/lib/rubocop/cop/style/string_literals.rb +31 -5
  509. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +20 -2
  510. data/lib/rubocop/cop/style/string_methods.rb +22 -9
  511. data/lib/rubocop/cop/style/struct_inheritance.rb +5 -17
  512. data/lib/rubocop/cop/style/symbol_array.rb +39 -65
  513. data/lib/rubocop/cop/style/symbol_literal.rb +1 -2
  514. data/lib/rubocop/cop/style/symbol_proc.rb +35 -52
  515. data/lib/rubocop/cop/style/ternary_parentheses.rb +143 -42
  516. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
  517. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +31 -20
  518. data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +26 -8
  519. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
  520. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +97 -37
  521. data/lib/rubocop/cop/style/trivial_accessors.rb +72 -66
  522. data/lib/rubocop/cop/style/unless_else.rb +19 -13
  523. data/lib/rubocop/cop/style/unneeded_capital_w.rb +24 -10
  524. data/lib/rubocop/cop/style/unneeded_interpolation.rb +22 -24
  525. data/lib/rubocop/cop/style/unneeded_percent_q.rb +28 -22
  526. data/lib/rubocop/cop/style/variable_interpolation.rb +23 -10
  527. data/lib/rubocop/cop/style/when_then.rb +18 -4
  528. data/lib/rubocop/cop/style/while_until_do.rb +34 -16
  529. data/lib/rubocop/cop/style/while_until_modifier.rb +32 -12
  530. data/lib/rubocop/cop/style/word_array.rb +45 -102
  531. data/lib/rubocop/cop/style/yoda_condition.rb +107 -0
  532. data/lib/rubocop/cop/style/zero_length_predicate.rb +55 -32
  533. data/lib/rubocop/cop/team.rb +33 -35
  534. data/lib/rubocop/cop/util.rb +120 -54
  535. data/lib/rubocop/cop/variable_force/assignment.rb +5 -9
  536. data/lib/rubocop/cop/variable_force/branch.rb +318 -0
  537. data/lib/rubocop/cop/variable_force/branchable.rb +21 -0
  538. data/lib/rubocop/cop/variable_force/reference.rb +1 -2
  539. data/lib/rubocop/cop/variable_force/scope.rb +37 -26
  540. data/lib/rubocop/cop/variable_force/variable.rb +12 -12
  541. data/lib/rubocop/cop/variable_force/variable_table.rb +3 -4
  542. data/lib/rubocop/cop/variable_force.rb +72 -39
  543. data/lib/rubocop/error.rb +0 -1
  544. data/lib/rubocop/formatter/base_formatter.rb +4 -9
  545. data/lib/rubocop/formatter/clang_style_formatter.rb +2 -3
  546. data/lib/rubocop/formatter/colorizable.rb +9 -10
  547. data/lib/rubocop/formatter/disabled_config_formatter.rb +48 -35
  548. data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -1
  549. data/lib/rubocop/formatter/emacs_style_formatter.rb +0 -1
  550. data/lib/rubocop/formatter/file_list_formatter.rb +0 -1
  551. data/lib/rubocop/formatter/formatter_set.rb +16 -13
  552. data/lib/rubocop/formatter/fuubar_style_formatter.rb +6 -1
  553. data/lib/rubocop/formatter/html_formatter.rb +5 -5
  554. data/lib/rubocop/formatter/json_formatter.rb +9 -4
  555. data/lib/rubocop/formatter/offense_count_formatter.rb +2 -1
  556. data/lib/rubocop/formatter/progress_formatter.rb +0 -1
  557. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  558. data/lib/rubocop/formatter/simple_text_formatter.rb +7 -17
  559. data/lib/rubocop/formatter/tap_formatter.rb +71 -0
  560. data/lib/rubocop/formatter/text_util.rb +0 -1
  561. data/lib/rubocop/formatter/worst_offenders_formatter.rb +6 -5
  562. data/lib/rubocop/magic_comment.rb +210 -0
  563. data/lib/rubocop/name_similarity.rb +0 -1
  564. data/lib/rubocop/node_pattern.rb +181 -118
  565. data/lib/rubocop/options.rb +154 -88
  566. data/lib/rubocop/path_util.rb +38 -4
  567. data/lib/rubocop/platform.rb +11 -0
  568. data/lib/rubocop/processed_source.rb +23 -20
  569. data/lib/rubocop/rake_task.rb +16 -24
  570. data/lib/rubocop/remote_config.rb +40 -13
  571. data/lib/rubocop/result_cache.rb +33 -24
  572. data/lib/rubocop/rspec/cop_helper.rb +21 -7
  573. data/lib/rubocop/rspec/expect_offense.rb +165 -0
  574. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +1 -2
  575. data/lib/rubocop/rspec/shared_contexts.rb +24 -9
  576. data/lib/rubocop/rspec/shared_examples.rb +10 -19
  577. data/lib/rubocop/rspec/support.rb +5 -5
  578. data/lib/rubocop/runner.rb +74 -39
  579. data/lib/rubocop/string_interpreter.rb +0 -1
  580. data/lib/rubocop/string_util.rb +11 -6
  581. data/lib/rubocop/target_finder.rb +70 -8
  582. data/lib/rubocop/token.rb +79 -2
  583. data/lib/rubocop/version.rb +2 -5
  584. data/lib/rubocop/warning.rb +0 -1
  585. data/lib/rubocop.rb +569 -398
  586. metadata +301 -112
  587. data/lib/rubocop/ast_node/builder.rb +0 -31
  588. data/lib/rubocop/ast_node/sexp.rb +0 -14
  589. data/lib/rubocop/ast_node.rb +0 -623
  590. data/lib/rubocop/cop/lint/eval.rb +0 -23
  591. data/lib/rubocop/cop/lint/invalid_character_literal.rb +0 -39
  592. data/lib/rubocop/cop/lint/useless_array_splat.rb +0 -56
  593. data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -42
  594. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -152
  595. data/lib/rubocop/cop/mixin/hash_node.rb +0 -15
  596. data/lib/rubocop/cop/mixin/if_node.rb +0 -37
  597. data/lib/rubocop/cop/mixin/on_method_def.rb +0 -31
  598. data/lib/rubocop/cop/mixin/space_inside.rb +0 -79
  599. data/lib/rubocop/cop/performance/hash_each.rb +0 -86
  600. data/lib/rubocop/cop/performance/push_splat.rb +0 -47
  601. data/lib/rubocop/cop/style/accessor_method_name.rb +0 -46
  602. data/lib/rubocop/cop/style/align_array.rb +0 -21
  603. data/lib/rubocop/cop/style/align_hash.rb +0 -256
  604. data/lib/rubocop/cop/style/case_indentation.rb +0 -92
  605. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +0 -30
  606. data/lib/rubocop/cop/style/constant_name.rb +0 -30
  607. data/lib/rubocop/cop/style/empty_line_between_defs.rb +0 -76
  608. data/lib/rubocop/cop/style/empty_lines_around_class_body.rb +0 -40
  609. data/lib/rubocop/cop/style/end_of_line.rb +0 -31
  610. data/lib/rubocop/cop/style/initial_indentation.rb +0 -38
  611. data/lib/rubocop/cop/style/leading_comment_space.rb +0 -33
  612. data/lib/rubocop/cop/style/method_name.rb +0 -29
  613. data/lib/rubocop/cop/style/multiline_method_call_indentation.rb +0 -176
  614. data/lib/rubocop/cop/style/op_method.rb +0 -44
  615. data/lib/rubocop/cop/style/predicate_name.rb +0 -68
  616. data/lib/rubocop/cop/style/space_after_comma.rb +0 -22
  617. data/lib/rubocop/cop/style/space_after_not.rb +0 -42
  618. data/lib/rubocop/cop/style/space_around_operators.rb +0 -132
  619. data/lib/rubocop/cop/style/space_before_block_braces.rb +0 -65
  620. data/lib/rubocop/cop/style/space_before_comma.rb +0 -17
  621. data/lib/rubocop/cop/style/space_before_semicolon.rb +0 -17
  622. data/lib/rubocop/cop/style/space_inside_block_braces.rb +0 -166
  623. data/lib/rubocop/cop/style/space_inside_brackets.rb +0 -21
  624. data/lib/rubocop/cop/style/space_inside_parens.rb +0 -17
  625. data/lib/rubocop/cop/style/space_inside_string_interpolation.rb +0 -52
  626. data/lib/rubocop/cop/style/variable_name.rb +0 -40
  627. data/lib/rubocop/cop/variable_force/locatable.rb +0 -197
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -36,7 +35,7 @@ module RuboCop
36
35
  :shadowarg # This means block local variable (obj.each { |arg; this| }).
37
36
  ].freeze
38
37
 
39
- LOGICAL_OPERATOR_ASSIGNMENT_TYPES = [:or_asgn, :and_asgn].freeze
38
+ LOGICAL_OPERATOR_ASSIGNMENT_TYPES = %i[or_asgn and_asgn].freeze
40
39
  OPERATOR_ASSIGNMENT_TYPES =
41
40
  (LOGICAL_OPERATOR_ASSIGNMENT_TYPES + [:op_asgn]).freeze
42
41
 
@@ -44,18 +43,30 @@ module RuboCop
44
43
 
45
44
  VARIABLE_REFERENCE_TYPE = :lvar
46
45
 
47
- POST_CONDITION_LOOP_TYPES = [:while_post, :until_post].freeze
48
- LOOP_TYPES = (POST_CONDITION_LOOP_TYPES + [:while, :until, :for]).freeze
46
+ POST_CONDITION_LOOP_TYPES = %i[while_post until_post].freeze
47
+ LOOP_TYPES = (POST_CONDITION_LOOP_TYPES + %i[while until for]).freeze
49
48
 
50
49
  RESCUE_TYPE = :rescue
51
50
 
52
51
  ZERO_ARITY_SUPER_TYPE = :zsuper
53
52
 
54
- TWISTED_SCOPE_TYPES = [:block, :class, :sclass, :defs].freeze
55
- SCOPE_TYPES = (TWISTED_SCOPE_TYPES + [:module, :def]).freeze
53
+ TWISTED_SCOPE_TYPES = %i[block class sclass defs].freeze
54
+ SCOPE_TYPES = (TWISTED_SCOPE_TYPES + %i[module def]).freeze
56
55
 
57
56
  SEND_TYPE = :send
58
57
 
58
+ VariableReference = Struct.new(:name) do
59
+ def assignment?
60
+ false
61
+ end
62
+ end
63
+
64
+ AssignmentReference = Struct.new(:node) do
65
+ def assignment?
66
+ true
67
+ end
68
+ end
69
+
59
70
  def variable_table
60
71
  @variable_table ||= VariableTable.new(self)
61
72
  end
@@ -70,6 +81,15 @@ module RuboCop
70
81
  variable_table.pop_scope
71
82
  end
72
83
 
84
+ def process_node(node)
85
+ catch(:skip_children) do
86
+ dispatch_node(node)
87
+ process_children(node)
88
+ end
89
+ end
90
+
91
+ private
92
+
73
93
  # This is called for each scope recursively.
74
94
  def inspect_variables_in_scope(scope_node)
75
95
  variable_table.push_scope(scope_node)
@@ -84,13 +104,6 @@ module RuboCop
84
104
  end
85
105
  end
86
106
 
87
- def process_node(node)
88
- catch(:skip_children) do
89
- dispatch_node(node)
90
- process_children(node)
91
- end
92
- end
93
-
94
107
  def skip_children!
95
108
  throw :skip_children
96
109
  end
@@ -158,10 +171,7 @@ module RuboCop
158
171
 
159
172
  def process_regexp_named_captures(node)
160
173
  regexp_node, rhs_node = *node
161
-
162
- regexp_string = regexp_node.children[0].children[0]
163
- regexp = Regexp.new(regexp_string)
164
- variable_names = regexp.named_captures.keys
174
+ variable_names = regexp_captured_names(regexp_node)
165
175
 
166
176
  variable_names.each do |name|
167
177
  next if variable_table.variable_exist?(name)
@@ -178,6 +188,13 @@ module RuboCop
178
188
  skip_children!
179
189
  end
180
190
 
191
+ def regexp_captured_names(node)
192
+ regexp_string = node.children[0].children[0] || ''
193
+ regexp = Regexp.new(regexp_string)
194
+
195
+ regexp.named_captures.keys
196
+ end
197
+
181
198
  def process_variable_operator_assignment(node)
182
199
  if LOGICAL_OPERATOR_ASSIGNMENT_TYPES.include?(node.type)
183
200
  asgn_node, rhs_node = *node
@@ -185,7 +202,7 @@ module RuboCop
185
202
  asgn_node, _operator, rhs_node = *node
186
203
  end
187
204
 
188
- return unless asgn_node.type == :lvasgn
205
+ return unless asgn_node.lvasgn_type?
189
206
 
190
207
  name = asgn_node.children.first
191
208
 
@@ -264,7 +281,7 @@ module RuboCop
264
281
  if TWISTED_SCOPE_TYPES.include?(node.type)
265
282
  # See the comment at the end of file for this behavior.
266
283
  twisted_nodes = [node.children[0]]
267
- twisted_nodes << node.children[1] if node.type == :class
284
+ twisted_nodes << node.children[1] if node.class_type?
268
285
  twisted_nodes.compact!
269
286
 
270
287
  twisted_nodes.each do |twisted_node|
@@ -303,7 +320,7 @@ module RuboCop
303
320
  next if assignment_nodes_in_loop.none? do |assignment_node|
304
321
  assignment_node.equal?(assignment.node)
305
322
  end
306
- assignment.reference!
323
+ assignment.reference!(node)
307
324
  end
308
325
  end
309
326
  end
@@ -312,23 +329,39 @@ module RuboCop
312
329
  referenced_variable_names_in_loop = []
313
330
  assignment_nodes_in_loop = []
314
331
 
332
+ each_descendant_reference(loop_node) do |reference|
333
+ if reference.assignment?
334
+ assignment_nodes_in_loop << reference.node
335
+ else
336
+ referenced_variable_names_in_loop << reference.name
337
+ end
338
+ end
339
+
340
+ [referenced_variable_names_in_loop, assignment_nodes_in_loop]
341
+ end
342
+
343
+ def each_descendant_reference(loop_node)
315
344
  # #each_descendant does not consider scope,
316
345
  # but we don't need to care about it here.
317
346
  loop_node.each_descendant do |node|
318
- case node.type
319
- when :lvar
320
- referenced_variable_names_in_loop << node.children.first
321
- when :lvasgn
322
- assignment_nodes_in_loop << node
323
- when *OPERATOR_ASSIGNMENT_TYPES
324
- asgn_node = node.children.first
325
- if asgn_node.type == :lvasgn
326
- referenced_variable_names_in_loop << asgn_node.children.first
327
- end
328
- end
347
+ reference = descendant_reference(node)
348
+
349
+ yield reference if reference
329
350
  end
351
+ end
330
352
 
331
- [referenced_variable_names_in_loop, assignment_nodes_in_loop]
353
+ def descendant_reference(node)
354
+ case node.type
355
+ when :lvar
356
+ VariableReference.new(node.children.first)
357
+ when :lvasgn
358
+ AssignmentReference.new(node)
359
+ when *OPERATOR_ASSIGNMENT_TYPES
360
+ asgn_node = node.children.first
361
+ if asgn_node.lvasgn_type?
362
+ VariableReference.new(asgn_node.children.first)
363
+ end
364
+ end
332
365
  end
333
366
 
334
367
  # Use Node#equal? for accurate check.
@@ -343,13 +376,13 @@ module RuboCop
343
376
  end
344
377
 
345
378
  # Hooks invoked by VariableTable.
346
- [
347
- :before_entering_scope,
348
- :after_entering_scope,
349
- :before_leaving_scope,
350
- :after_leaving_scope,
351
- :before_declaring_variable,
352
- :after_declaring_variable
379
+ %i[
380
+ before_entering_scope
381
+ after_entering_scope
382
+ before_leaving_scope
383
+ after_leaving_scope
384
+ before_declaring_variable
385
+ after_declaring_variable
353
386
  ].each do |hook|
354
387
  define_method(hook) do |arg|
355
388
  # Invoke hook in cops.
data/lib/rubocop/error.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  # rubocop:disable Metrics/LineLength
@@ -78,8 +77,7 @@ module RuboCop
78
77
  # all target file paths to be inspected
79
78
  #
80
79
  # @return [void]
81
- def started(target_files)
82
- end
80
+ def started(target_files); end
83
81
 
84
82
  # @api public
85
83
  #
@@ -92,8 +90,7 @@ module RuboCop
92
90
  # file specific information, currently this is always empty.
93
91
  #
94
92
  # @return [void]
95
- def file_started(file, options)
96
- end
93
+ def file_started(file, options); end
97
94
 
98
95
  # @api public
99
96
  #
@@ -108,8 +105,7 @@ module RuboCop
108
105
  # @return [void]
109
106
  #
110
107
  # @see RuboCop::Cop::Offense
111
- def file_finished(file, offenses)
112
- end
108
+ def file_finished(file, offenses); end
113
109
 
114
110
  # @api public
115
111
  #
@@ -121,8 +117,7 @@ module RuboCop
121
117
  # unless RuboCop is interrupted by user.
122
118
  #
123
119
  # @return [void]
124
- def finished(inspected_files)
125
- end
120
+ def finished(inspected_files); end
126
121
  end
127
122
  end
128
123
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -7,7 +6,7 @@ module RuboCop
7
6
  # The precise location of the problem is shown together with the
8
7
  # relevant source code.
9
8
  class ClangStyleFormatter < SimpleTextFormatter
10
- ELLIPSES = Rainbow('...').yellow.freeze
9
+ ELLIPSES = '...'.freeze
11
10
 
12
11
  def report_file(file, offenses)
13
12
  offenses.each { |offense| report_offense(file, offense) }
@@ -42,7 +41,7 @@ module RuboCop
42
41
  if location.first_line == location.last_line
43
42
  output.puts(source_line)
44
43
  else
45
- output.puts("#{source_line} #{ELLIPSES}")
44
+ output.puts("#{source_line} #{yellow(ELLIPSES)}")
46
45
  end
47
46
  end
48
47
 
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -23,15 +22,15 @@ module RuboCop
23
22
  rainbow.wrap(string).color(*args)
24
23
  end
25
24
 
26
- [
27
- :black,
28
- :red,
29
- :green,
30
- :yellow,
31
- :blue,
32
- :magenta,
33
- :cyan,
34
- :white
25
+ %i[
26
+ black
27
+ red
28
+ green
29
+ yellow
30
+ blue
31
+ magenta
32
+ cyan
33
+ white
35
34
  ].each do |color|
36
35
  define_method(color) do |string|
37
36
  colorize(string, color)
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -19,7 +18,7 @@ module RuboCop
19
18
  @config_to_allow_offenses = {}
20
19
  @detected_styles = {}
21
20
 
22
- COPS = Cop::Cop.all.group_by(&:cop_name)
21
+ COPS = Cop::Cop.registry.to_h
23
22
 
24
23
  class << self
25
24
  attr_accessor :config_to_allow_offenses, :detected_styles
@@ -51,13 +50,11 @@ module RuboCop
51
50
  output.puts HEADING % command
52
51
 
53
52
  # Syntax isn't a real cop and it can't be disabled.
54
- @cops_with_offenses.delete('Syntax')
53
+ @cops_with_offenses.delete('Lint/Syntax')
55
54
 
56
55
  output_offenses
57
56
 
58
57
  puts "Created #{output.path}."
59
- puts "Run `rubocop --config #{output.path}`, or add `inherit_from: " \
60
- "#{output.path}` in a .rubocop.yml file."
61
58
  end
62
59
 
63
60
  private
@@ -67,6 +64,7 @@ module RuboCop
67
64
  if @exclude_limit_option
68
65
  command += format(' --exclude-limit %d', @exclude_limit_option.to_i)
69
66
  end
67
+ command += ' --no-offense-counts' if @options[:no_offense_counts]
70
68
 
71
69
  command
72
70
  end
@@ -81,14 +79,21 @@ module RuboCop
81
79
  output.puts
82
80
  cfg = self.class.config_to_allow_offenses[cop_name] || {}
83
81
 
84
- output_cop_comments(output, cfg, cop_name, offense_count)
85
- output_cop_config(output, cfg, cop_name)
82
+ # To avoid malformed YAML when potentially reading the config in
83
+ # #excludes, we use an output buffer and append it to the actual output
84
+ # only when it results in valid YAML.
85
+ output_buffer = StringIO.new
86
+ output_cop_comments(output_buffer, cfg, cop_name, offense_count)
87
+ output_cop_config(output_buffer, cfg, cop_name)
88
+ output.puts(output_buffer.string)
86
89
  end
87
90
 
88
- def output_cop_comments(output, cfg, cop_name, offense_count)
89
- output.puts "# Offense count: #{offense_count}" if @show_offense_counts
91
+ def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
92
+ if @show_offense_counts
93
+ output_buffer.puts "# Offense count: #{offense_count}"
94
+ end
90
95
  if COPS[cop_name] && COPS[cop_name].first.new.support_autocorrect?
91
- output.puts '# Cop supports --auto-correct.'
96
+ output_buffer.puts '# Cop supports --auto-correct.'
92
97
  end
93
98
 
94
99
  default_cfg = default_config(cop_name)
@@ -97,23 +102,26 @@ module RuboCop
97
102
  params = cop_config_params(default_cfg, cfg)
98
103
  return if params.empty?
99
104
 
100
- output_cop_param_comments(params, default_cfg)
105
+ output_cop_param_comments(output_buffer, params, default_cfg)
101
106
  end
102
107
 
103
108
  def cop_config_params(default_cfg, cfg)
104
109
  default_cfg.keys -
105
- %w(Description StyleGuide Reference Enabled Exclude) -
110
+ %w[Description StyleGuide Reference Enabled Exclude] -
106
111
  cfg.keys
107
112
  end
108
113
 
109
- def output_cop_param_comments(params, default_cfg)
110
- output.puts "# Configuration parameters: #{params.join(', ')}."
114
+ def output_cop_param_comments(output_buffer, params, default_cfg)
115
+ config_params = params.reject { |p| p.start_with?('Supported') }
116
+ output_buffer.puts(
117
+ "# Configuration parameters: #{config_params.join(', ')}."
118
+ )
111
119
 
112
120
  params.each do |param|
113
121
  value = default_cfg[param]
114
122
  if value.is_a?(Array)
115
123
  next if value.empty?
116
- output.puts "# #{param}: #{value.join(', ')}"
124
+ output_buffer.puts "# #{param}: #{value.join(', ')}"
117
125
  end
118
126
  end
119
127
  end
@@ -122,35 +130,42 @@ module RuboCop
122
130
  RuboCop::ConfigLoader.default_configuration[cop_name]
123
131
  end
124
132
 
125
- def output_cop_config(output, cfg, cop_name)
133
+ def output_cop_config(output_buffer, cfg, cop_name)
126
134
  # 'Enabled' option will be put into file only if exclude
127
135
  # limit is exceeded.
128
136
  cfg_without_enabled = cfg.reject { |key| key == 'Enabled' }
129
137
 
130
- output.puts "#{cop_name}:"
138
+ output_buffer.puts "#{cop_name}:"
131
139
  cfg_without_enabled.each do |key, value|
132
140
  value = value[0] if value.is_a?(Array)
133
- output.puts " #{key}: #{value}"
141
+ output_buffer.puts " #{key}: #{value}"
134
142
  end
135
143
 
136
- output_offending_files(output, cfg_without_enabled, cop_name)
144
+ output_offending_files(output_buffer, cfg_without_enabled, cop_name)
137
145
  end
138
146
 
139
- def output_offending_files(output, cfg, cop_name)
147
+ def output_offending_files(output_buffer, cfg, cop_name)
140
148
  return unless cfg.empty?
141
149
 
142
150
  offending_files = @files_with_offenses[cop_name].uniq.sort
143
151
  if offending_files.count > @exclude_limit
144
- output.puts ' Enabled: false'
152
+ output_buffer.puts ' Enabled: false'
145
153
  else
146
- output_exclude_list(output, offending_files, cop_name)
154
+ output_exclude_list(output_buffer, offending_files, cop_name)
147
155
  end
148
156
  end
149
157
 
150
- def output_exclude_list(output, offending_files, cop_name)
158
+ def output_exclude_list(output_buffer, offending_files, cop_name)
151
159
  require 'pathname'
152
160
  parent = Pathname.new(Dir.pwd)
153
161
 
162
+ output_buffer.puts ' Exclude:'
163
+ excludes(offending_files, cop_name, parent).each do |file|
164
+ output_exclude_path(output_buffer, file, parent)
165
+ end
166
+ end
167
+
168
+ def excludes(offending_files, cop_name, parent)
154
169
  # Exclude properties in .rubocop_todo.yml override default ones, as well
155
170
  # as any custom excludes in .rubocop.yml, so in order to retain those
156
171
  # excludes we must copy them.
@@ -158,18 +173,16 @@ module RuboCop
158
173
  # just look at the current working directory
159
174
  config = ConfigStore.new.for(parent)
160
175
  cfg = config[cop_name] || {}
161
- excludes = ((cfg['Exclude'] || []) + offending_files).uniq
162
-
163
- output.puts ' Exclude:'
164
- excludes.each do |file|
165
- file_path = Pathname.new(file)
166
- begin
167
- relative = file_path.relative_path_from(parent)
168
- output.puts " - '#{relative}'"
169
- rescue ArgumentError
170
- output.puts " - '#{file}'"
171
- end
172
- end
176
+
177
+ ((cfg['Exclude'] || []) + offending_files).uniq
178
+ end
179
+
180
+ def output_exclude_path(output_buffer, file, parent)
181
+ file_path = Pathname.new(file)
182
+ relative = file_path.relative_path_from(parent)
183
+ output_buffer.puts " - '#{relative}'"
184
+ rescue ArgumentError
185
+ output_buffer.puts " - '#{file}'"
173
186
  end
174
187
  end
175
188
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'fileutils'
@@ -20,10 +19,12 @@ module RuboCop
20
19
  'files' => FileListFormatter,
21
20
  'offenses' => OffenseCountFormatter,
22
21
  'disabled' => DisabledLinesFormatter,
23
- 'worst' => WorstOffendersFormatter
22
+ 'worst' => WorstOffendersFormatter,
23
+ 'tap' => TapFormatter,
24
+ 'quiet' => QuietFormatter
24
25
  }.freeze
25
26
 
26
- FORMATTER_APIS = [:started, :finished].freeze
27
+ FORMATTER_APIS = %i[started finished].freeze
27
28
 
28
29
  FORMATTER_APIS.each do |method_name|
29
30
  define_method(method_name) do |*args|
@@ -47,15 +48,6 @@ module RuboCop
47
48
  end
48
49
 
49
50
  def add_formatter(formatter_type, output_path = nil)
50
- formatter_class = case formatter_type
51
- when Class
52
- formatter_type
53
- when /\A[A-Z]/
54
- custom_formatter_class(formatter_type)
55
- else
56
- builtin_formatter_class(formatter_type)
57
- end
58
-
59
51
  if output_path
60
52
  dir_path = File.dirname(output_path)
61
53
  FileUtils.mkdir_p(dir_path) unless File.exist?(dir_path)
@@ -64,7 +56,7 @@ module RuboCop
64
56
  output = $stdout
65
57
  end
66
58
 
67
- self << formatter_class.new(output, @options)
59
+ self << formatter_class(formatter_type).new(output, @options)
68
60
  end
69
61
 
70
62
  def close_output_files
@@ -75,6 +67,17 @@ module RuboCop
75
67
 
76
68
  private
77
69
 
70
+ def formatter_class(formatter_type)
71
+ case formatter_type
72
+ when Class
73
+ formatter_type
74
+ when /\A[A-Z]/
75
+ custom_formatter_class(formatter_type)
76
+ else
77
+ builtin_formatter_class(formatter_type)
78
+ end
79
+ end
80
+
78
81
  def builtin_formatter_class(specified_key)
79
82
  matching_keys = BUILTIN_FORMATTERS_FOR_KEYS.keys.select do |key|
80
83
  key.start_with?(specified_key)
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'ruby-progressbar'
@@ -12,6 +11,12 @@ module RuboCop
12
11
  class FuubarStyleFormatter < ClangStyleFormatter
13
12
  RESET_SEQUENCE = "\e[0m".freeze
14
13
 
14
+ def initialize(*)
15
+ @severest_offense = nil
16
+
17
+ super
18
+ end
19
+
15
20
  def started(target_files)
16
21
  super
17
22
 
@@ -1,19 +1,18 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'cgi'
5
4
  require 'erb'
6
5
  require 'ostruct'
7
6
  require 'base64'
8
- require 'rubocop/formatter/text_util'
7
+ require_relative 'text_util'
9
8
 
10
9
  module RuboCop
11
10
  module Formatter
12
11
  # This formatter saves the output as an html file.
13
12
  class HTMLFormatter < BaseFormatter
14
13
  ELLIPSES = '<span class="extra-code">...</span>'.freeze
15
- TEMPLATE_PATH = File.expand_path('../../../../assets/output.html.erb',
16
- __FILE__).encode('utf-8')
14
+ TEMPLATE_PATH =
15
+ File.expand_path('../../../../assets/output.html.erb', __FILE__)
17
16
 
18
17
  Color = Struct.new(:red, :green, :blue, :alpha) do
19
18
  def to_s
@@ -62,7 +61,8 @@ module RuboCop
62
61
 
63
62
  # This class provides helper methods used in the ERB template.
64
63
  class ERBContext
65
- include PathUtil, TextUtil
64
+ include PathUtil
65
+ include TextUtil
66
66
 
67
67
  SEVERITY_COLORS = {
68
68
  refactor: Color.new(0xED, 0x9C, 0x28, 1.0),
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'json'
@@ -65,9 +64,15 @@ module RuboCop
65
64
  # TODO: Consider better solution for Offense#real_column.
66
65
  def hash_for_location(offense)
67
66
  {
68
- line: offense.line,
69
- column: offense.real_column,
70
- length: offense.location.length
67
+ start_line: offense.line,
68
+ start_column: offense.real_column,
69
+ last_line: offense.last_line,
70
+ last_column: offense.last_column,
71
+ length: offense.location.length,
72
+ # `line` and `column` exist for compatibility.
73
+ # Use `start_line` and `start_column` instead.
74
+ line: offense.line,
75
+ column: offense.real_column
71
76
  }
72
77
  end
73
78
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -28,6 +27,7 @@ module RuboCop
28
27
  report_summary(@offense_counts)
29
28
  end
30
29
 
30
+ # rubocop:disable Metrics/AbcSize
31
31
  def report_summary(offense_counts)
32
32
  per_cop_counts = ordered_offense_counts(offense_counts)
33
33
  total_count = total_offense_count(offense_counts)
@@ -43,6 +43,7 @@ module RuboCop
43
43
 
44
44
  output.puts
45
45
  end
46
+ # rubocop:enable Metrics/AbcSize
46
47
 
47
48
  def ordered_offense_counts(offense_counts)
48
49
  Hash[offense_counts.sort_by { |k, v| [-v, k] }]
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module RuboCop
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Formatter
5
+ # If no offenses are found, no output is displayed.
6
+ # Otherwise, SimpleTextFormatter's output is displayed.
7
+ class QuietFormatter < SimpleTextFormatter
8
+ def report_summary(file_count, offense_count, correction_count)
9
+ super unless offense_count.zero?
10
+ end
11
+ end
12
+ end
13
+ end