rubocop 0.70.0 → 0.75.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 (274) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -10
  3. data/bin/console +1 -0
  4. data/config/default.yml +91 -494
  5. data/lib/rubocop.rb +16 -54
  6. data/lib/rubocop/ast/builder.rb +2 -0
  7. data/lib/rubocop/ast/node.rb +9 -15
  8. data/lib/rubocop/ast/node/float_node.rb +12 -0
  9. data/lib/rubocop/ast/node/int_node.rb +12 -0
  10. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +4 -4
  11. data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -0
  12. data/lib/rubocop/ast/node/resbody_node.rb +1 -6
  13. data/lib/rubocop/ast/traversal.rb +3 -3
  14. data/lib/rubocop/cached_data.rb +1 -1
  15. data/lib/rubocop/comment_config.rb +3 -2
  16. data/lib/rubocop/config.rb +21 -508
  17. data/lib/rubocop/config_loader.rb +22 -4
  18. data/lib/rubocop/config_loader_resolver.rb +2 -8
  19. data/lib/rubocop/config_obsoletion.rb +213 -0
  20. data/lib/rubocop/config_validator.rb +239 -0
  21. data/lib/rubocop/cop/autocorrect_logic.rb +71 -1
  22. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
  23. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
  24. data/lib/rubocop/cop/commissioner.rb +3 -9
  25. data/lib/rubocop/cop/cop.rb +39 -12
  26. data/lib/rubocop/cop/corrector.rb +2 -3
  27. data/lib/rubocop/cop/correctors/alignment_corrector.rb +43 -17
  28. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +2 -2
  29. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +2 -2
  30. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
  31. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
  32. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
  33. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
  34. data/lib/rubocop/cop/generator.rb +4 -4
  35. data/lib/rubocop/cop/generator/configuration_injector.rb +9 -4
  36. data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
  37. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +2 -2
  38. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
  39. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +2 -2
  40. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
  41. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +2 -2
  42. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
  43. data/lib/rubocop/cop/layout/block_alignment.rb +3 -3
  44. data/lib/rubocop/cop/layout/class_structure.rb +2 -2
  45. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
  46. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +3 -1
  47. data/lib/rubocop/cop/layout/extra_spacing.rb +14 -59
  48. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -0
  49. data/lib/rubocop/cop/layout/indent_assignment.rb +9 -1
  50. data/lib/rubocop/cop/layout/indent_first_argument.rb +7 -3
  51. data/lib/rubocop/cop/layout/indent_first_parameter.rb +7 -3
  52. data/lib/rubocop/cop/layout/indent_heredoc.rb +4 -4
  53. data/lib/rubocop/cop/layout/indentation_consistency.rb +13 -12
  54. data/lib/rubocop/cop/layout/indentation_width.rb +28 -10
  55. data/lib/rubocop/cop/layout/leading_comment_space.rb +28 -0
  56. data/lib/rubocop/cop/layout/multiline_block_layout.rb +24 -2
  57. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +2 -0
  58. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -4
  59. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +5 -1
  60. data/lib/rubocop/cop/layout/space_around_operators.rb +42 -23
  61. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -1
  62. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +21 -2
  63. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +24 -40
  64. data/lib/rubocop/cop/layout/tab.rb +10 -22
  65. data/lib/rubocop/cop/lint/assignment_in_condition.rb +17 -4
  66. data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -1
  67. data/lib/rubocop/cop/lint/debugger.rb +4 -6
  68. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -3
  69. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  70. data/lib/rubocop/cop/lint/empty_interpolation.rb +4 -4
  71. data/lib/rubocop/cop/lint/erb_new_arguments.rb +57 -1
  72. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -37
  73. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
  74. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  75. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -8
  76. data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
  77. data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -3
  78. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  79. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
  80. data/lib/rubocop/cop/lint/number_conversion.rb +4 -4
  81. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  82. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
  83. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
  84. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +5 -5
  85. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
  86. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
  87. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +6 -6
  88. data/lib/rubocop/cop/lint/unified_integer.rb +1 -1
  89. data/lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb +1 -1
  90. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +1 -1
  91. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +7 -2
  92. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  93. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  94. data/lib/rubocop/cop/lint/uri_regexp.rb +2 -2
  95. data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -6
  96. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  97. data/lib/rubocop/cop/message_annotator.rb +16 -7
  98. data/lib/rubocop/cop/metrics/class_length.rb +1 -1
  99. data/lib/rubocop/cop/metrics/line_length.rb +6 -0
  100. data/lib/rubocop/cop/metrics/module_length.rb +1 -1
  101. data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
  102. data/lib/rubocop/cop/migration/department_name.rb +44 -0
  103. data/lib/rubocop/cop/mixin/alignment.rb +1 -1
  104. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  105. data/lib/rubocop/cop/mixin/documentation_comment.rb +0 -2
  106. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -1
  107. data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -4
  108. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
  109. data/lib/rubocop/cop/mixin/hash_alignment.rb +4 -0
  110. data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
  111. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
  112. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -3
  113. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +87 -0
  114. data/lib/rubocop/cop/mixin/safe_mode.rb +2 -0
  115. data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -5
  116. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  117. data/lib/rubocop/cop/naming/constant_name.rb +2 -2
  118. data/lib/rubocop/cop/naming/method_name.rb +12 -1
  119. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  120. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +20 -22
  121. data/lib/rubocop/cop/naming/variable_name.rb +1 -0
  122. data/lib/rubocop/cop/offense.rb +18 -7
  123. data/lib/rubocop/cop/registry.rb +22 -1
  124. data/lib/rubocop/cop/security/eval.rb +1 -1
  125. data/lib/rubocop/cop/security/json_load.rb +1 -1
  126. data/lib/rubocop/cop/security/marshal_load.rb +1 -1
  127. data/lib/rubocop/cop/security/open.rb +1 -1
  128. data/lib/rubocop/cop/security/yaml_load.rb +1 -1
  129. data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -0
  130. data/lib/rubocop/cop/style/alias.rb +1 -1
  131. data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
  132. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +29 -10
  133. data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
  134. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  135. data/lib/rubocop/cop/style/commented_keyword.rb +16 -30
  136. data/lib/rubocop/cop/style/conditional_assignment.rb +8 -9
  137. data/lib/rubocop/cop/style/constant_visibility.rb +14 -3
  138. data/lib/rubocop/cop/style/date_time.rb +3 -3
  139. data/lib/rubocop/cop/style/dir.rb +1 -1
  140. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  141. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
  142. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  143. data/lib/rubocop/cop/style/each_with_object.rb +1 -1
  144. data/lib/rubocop/cop/style/eval_with_location.rb +2 -2
  145. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  146. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
  147. data/lib/rubocop/cop/style/float_division.rb +94 -0
  148. data/lib/rubocop/cop/style/format_string.rb +13 -9
  149. data/lib/rubocop/cop/style/format_string_token.rb +10 -40
  150. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +18 -33
  151. data/lib/rubocop/cop/style/guard_clause.rb +39 -10
  152. data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
  153. data/lib/rubocop/cop/style/if_inside_else.rb +42 -0
  154. data/lib/rubocop/cop/style/if_unless_modifier.rb +51 -15
  155. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  156. data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
  157. data/lib/rubocop/cop/style/lambda.rb +0 -2
  158. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +12 -6
  159. data/lib/rubocop/cop/style/min_max.rb +1 -1
  160. data/lib/rubocop/cop/style/mixin_usage.rb +12 -2
  161. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  162. data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
  163. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  164. data/lib/rubocop/cop/style/mutable_constant.rb +3 -3
  165. data/lib/rubocop/cop/style/nested_modifier.rb +18 -2
  166. data/lib/rubocop/cop/style/numeric_predicate.rb +3 -3
  167. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  168. data/lib/rubocop/cop/style/or_assignment.rb +8 -3
  169. data/lib/rubocop/cop/style/parentheses_around_condition.rb +15 -1
  170. data/lib/rubocop/cop/style/random_with_offset.rb +6 -6
  171. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -2
  172. data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
  173. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  174. data/lib/rubocop/cop/style/redundant_parentheses.rb +15 -6
  175. data/lib/rubocop/cop/style/redundant_self.rb +18 -1
  176. data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
  177. data/lib/rubocop/cop/style/rescue_modifier.rb +24 -0
  178. data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
  179. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  180. data/lib/rubocop/cop/style/safe_navigation.rb +11 -2
  181. data/lib/rubocop/cop/style/sample.rb +1 -1
  182. data/lib/rubocop/cop/style/single_line_methods.rb +8 -1
  183. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  184. data/lib/rubocop/cop/style/string_hash_keys.rb +2 -2
  185. data/lib/rubocop/cop/style/strip.rb +1 -1
  186. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
  187. data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
  188. data/lib/rubocop/cop/style/ternary_parentheses.rb +32 -3
  189. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -0
  190. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +4 -6
  191. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  192. data/lib/rubocop/cop/style/unneeded_sort.rb +1 -1
  193. data/lib/rubocop/cop/style/unpack_first.rb +1 -1
  194. data/lib/rubocop/cop/style/variable_interpolation.rb +6 -16
  195. data/lib/rubocop/cop/style/word_array.rb +2 -2
  196. data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -6
  197. data/lib/rubocop/cop/team.rb +15 -14
  198. data/lib/rubocop/cop/utils/format_string.rb +128 -0
  199. data/lib/rubocop/cop/variable_force/variable.rb +15 -2
  200. data/lib/rubocop/core_ext/string.rb +0 -24
  201. data/lib/rubocop/error.rb +23 -0
  202. data/lib/rubocop/formatter/emacs_style_formatter.rb +8 -5
  203. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  204. data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
  205. data/lib/rubocop/formatter/simple_text_formatter.rb +9 -1
  206. data/lib/rubocop/formatter/tap_formatter.rb +9 -1
  207. data/lib/rubocop/magic_comment.rb +4 -0
  208. data/lib/rubocop/node_pattern.rb +86 -7
  209. data/lib/rubocop/options.rb +18 -2
  210. data/lib/rubocop/path_util.rb +1 -1
  211. data/lib/rubocop/processed_source.rb +9 -1
  212. data/lib/rubocop/rspec/cop_helper.rb +0 -1
  213. data/lib/rubocop/rspec/expect_offense.rb +4 -1
  214. data/lib/rubocop/rspec/shared_contexts.rb +12 -17
  215. data/lib/rubocop/rspec/support.rb +0 -1
  216. data/lib/rubocop/runner.rb +20 -15
  217. data/lib/rubocop/target_finder.rb +6 -4
  218. data/lib/rubocop/version.rb +1 -1
  219. data/lib/rubocop/yaml_duplication_checker.rb +8 -2
  220. metadata +16 -70
  221. data/lib/rubocop/cop/mixin/ignored_method_patterns.rb +0 -19
  222. data/lib/rubocop/cop/mixin/target_rails_version.rb +0 -16
  223. data/lib/rubocop/cop/rails/action_filter.rb +0 -117
  224. data/lib/rubocop/cop/rails/active_record_aliases.rb +0 -48
  225. data/lib/rubocop/cop/rails/active_record_override.rb +0 -82
  226. data/lib/rubocop/cop/rails/active_support_aliases.rb +0 -69
  227. data/lib/rubocop/cop/rails/application_job.rb +0 -40
  228. data/lib/rubocop/cop/rails/application_record.rb +0 -40
  229. data/lib/rubocop/cop/rails/assert_not.rb +0 -44
  230. data/lib/rubocop/cop/rails/belongs_to.rb +0 -102
  231. data/lib/rubocop/cop/rails/blank.rb +0 -164
  232. data/lib/rubocop/cop/rails/bulk_change_table.rb +0 -289
  233. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +0 -91
  234. data/lib/rubocop/cop/rails/date.rb +0 -161
  235. data/lib/rubocop/cop/rails/delegate.rb +0 -132
  236. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +0 -37
  237. data/lib/rubocop/cop/rails/dynamic_find_by.rb +0 -91
  238. data/lib/rubocop/cop/rails/enum_uniqueness.rb +0 -45
  239. data/lib/rubocop/cop/rails/environment_comparison.rb +0 -68
  240. data/lib/rubocop/cop/rails/exit.rb +0 -67
  241. data/lib/rubocop/cop/rails/file_path.rb +0 -108
  242. data/lib/rubocop/cop/rails/find_by.rb +0 -55
  243. data/lib/rubocop/cop/rails/find_each.rb +0 -51
  244. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +0 -25
  245. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +0 -106
  246. data/lib/rubocop/cop/rails/http_positional_arguments.rb +0 -117
  247. data/lib/rubocop/cop/rails/http_status.rb +0 -179
  248. data/lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb +0 -94
  249. data/lib/rubocop/cop/rails/inverse_of.rb +0 -246
  250. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +0 -175
  251. data/lib/rubocop/cop/rails/link_to_blank.rb +0 -98
  252. data/lib/rubocop/cop/rails/not_null_column.rb +0 -67
  253. data/lib/rubocop/cop/rails/output.rb +0 -49
  254. data/lib/rubocop/cop/rails/output_safety.rb +0 -99
  255. data/lib/rubocop/cop/rails/pluralization_grammar.rb +0 -107
  256. data/lib/rubocop/cop/rails/presence.rb +0 -124
  257. data/lib/rubocop/cop/rails/present.rb +0 -153
  258. data/lib/rubocop/cop/rails/read_write_attribute.rb +0 -74
  259. data/lib/rubocop/cop/rails/redundant_allow_nil.rb +0 -111
  260. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +0 -136
  261. data/lib/rubocop/cop/rails/reflection_class_name.rb +0 -37
  262. data/lib/rubocop/cop/rails/refute_methods.rb +0 -76
  263. data/lib/rubocop/cop/rails/relative_date_constant.rb +0 -93
  264. data/lib/rubocop/cop/rails/request_referer.rb +0 -56
  265. data/lib/rubocop/cop/rails/reversible_migration.rb +0 -286
  266. data/lib/rubocop/cop/rails/safe_navigation.rb +0 -87
  267. data/lib/rubocop/cop/rails/save_bang.rb +0 -316
  268. data/lib/rubocop/cop/rails/scope_args.rb +0 -29
  269. data/lib/rubocop/cop/rails/skips_model_validations.rb +0 -87
  270. data/lib/rubocop/cop/rails/time_zone.rb +0 -238
  271. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +0 -105
  272. data/lib/rubocop/cop/rails/unknown_env.rb +0 -63
  273. data/lib/rubocop/cop/rails/validation.rb +0 -109
  274. data/lib/rubocop/rspec/shared_examples.rb +0 -59
@@ -51,7 +51,7 @@ module RuboCop
51
51
 
52
52
  # Returns true for an absolute Unix or Windows path.
53
53
  def absolute?(path)
54
- path =~ %r{\A([A-Z]:)?/}
54
+ path =~ %r{\A([A-Z]:)?/}i
55
55
  end
56
56
 
57
57
  def self.pwd
@@ -123,6 +123,10 @@ module RuboCop
123
123
  lines[token.line - 2]
124
124
  end
125
125
 
126
+ def current_line(token)
127
+ lines[token.line - 1]
128
+ end
129
+
126
130
  def following_line(token)
127
131
  lines[token.line]
128
132
  end
@@ -183,8 +187,12 @@ module RuboCop
183
187
  when 2.6
184
188
  require 'parser/ruby26'
185
189
  Parser::Ruby26
190
+ when 2.7
191
+ require 'parser/ruby27'
192
+ Parser::Ruby27
186
193
  else
187
- raise ArgumentError, "Unknown Ruby version: #{ruby_version.inspect}"
194
+ raise ArgumentError,
195
+ "RuboCop found unknown Ruby version: #{ruby_version.inspect}"
188
196
  end
189
197
  end
190
198
  # rubocop:enable Metrics/MethodLength
@@ -7,7 +7,6 @@ module CopHelper
7
7
  extend RSpec::SharedContext
8
8
 
9
9
  let(:ruby_version) { 2.3 }
10
- let(:enabled_rails) { false }
11
10
  let(:rails_version) { false }
12
11
 
13
12
  def inspect_source_file(source)
@@ -132,7 +132,10 @@ module RuboCop
132
132
  def expect_no_offenses(source, file = nil)
133
133
  inspect_source(source, file)
134
134
 
135
- expect(cop.offenses).to be_empty
135
+ expected_annotations = AnnotatedSource.parse(source)
136
+ actual_annotations =
137
+ expected_annotations.with_offense_annotations(cop.offenses)
138
+ expect(actual_annotations.to_s).to eq(source)
136
139
  end
137
140
 
138
141
  # Parsed representation of code annotated with the `^^^ Message` style
@@ -47,7 +47,6 @@ RSpec.shared_context 'config', :config do
47
47
  end
48
48
 
49
49
  hash = { 'AllCops' => { 'TargetRubyVersion' => ruby_version } }
50
- hash['Rails'] = { 'Enabled' => true } if enabled_rails
51
50
  hash['AllCops']['TargetRailsVersion'] = rails_version if rails_version
52
51
  if respond_to?(:cop_config)
53
52
  cop_name = described_class.cop_name
@@ -62,6 +61,18 @@ RSpec.shared_context 'config', :config do
62
61
  end
63
62
  end
64
63
 
64
+ RSpec.shared_context 'mock console output' do
65
+ before do
66
+ $stdout = StringIO.new
67
+ $stderr = StringIO.new
68
+ end
69
+
70
+ after do
71
+ $stdout = STDOUT
72
+ $stderr = STDERR
73
+ end
74
+ end
75
+
65
76
  RSpec.shared_context 'ruby 2.3', :ruby23 do
66
77
  let(:ruby_version) { 2.3 }
67
78
  end
@@ -77,19 +88,3 @@ end
77
88
  RSpec.shared_context 'ruby 2.6', :ruby26 do
78
89
  let(:ruby_version) { 2.6 }
79
90
  end
80
-
81
- RSpec.shared_context 'with Rails', :enabled_rails do
82
- let(:enabled_rails) { true }
83
- end
84
-
85
- RSpec.shared_context 'with Rails 3', :rails3 do
86
- let(:rails_version) { 3.0 }
87
- end
88
-
89
- RSpec.shared_context 'with Rails 4', :rails4 do
90
- let(:rails_version) { 4.0 }
91
- end
92
-
93
- RSpec.shared_context 'with Rails 5', :rails5 do
94
- let(:rails_version) { 5.0 }
95
- end
@@ -5,7 +5,6 @@
5
5
  require_relative 'cop_helper'
6
6
  require_relative 'host_environment_simulation_helper'
7
7
  require_relative 'shared_contexts'
8
- require_relative 'shared_examples'
9
8
  require_relative 'expect_offense'
10
9
 
11
10
  RSpec.configure do |config|
@@ -72,7 +72,12 @@ module RuboCop
72
72
 
73
73
  each_inspected_file(files) { |file| inspected_files << file }
74
74
  ensure
75
- ResultCache.cleanup(@config_store, @options[:debug]) if cached_run?
75
+ # OPTIMIZE: Calling `ResultCache.cleanup` takes time. This optimization
76
+ # mainly targets editors that integrates RuboCop. When RuboCop is run
77
+ # by an editor, it should be inspecting only one file.
78
+ if files.size > 1 && cached_run?
79
+ ResultCache.cleanup(@config_store, @options[:debug])
80
+ end
76
81
  formatter_set.finished(inspected_files.freeze)
77
82
  formatter_set.close_output_files
78
83
  end
@@ -150,10 +155,10 @@ module RuboCop
150
155
  if cop.relevant_file?(file)
151
156
  cop.check(offenses, source.disabled_line_ranges, source.comments)
152
157
  offenses += cop.offenses
153
- autocorrect_unneeded_disables(source, cop)
158
+ offenses += autocorrect_unneeded_disables(file, source, cop,
159
+ offenses)
154
160
  end
155
161
  end
156
- offenses
157
162
  end
158
163
 
159
164
  offenses.sort.reject(&:disabled?).freeze
@@ -167,14 +172,20 @@ module RuboCop
167
172
  @options[:except] || @options[:only]
168
173
  end
169
174
 
170
- def autocorrect_unneeded_disables(source, cop)
175
+ def autocorrect_unneeded_disables(file, source, cop, offenses)
171
176
  cop.processed_source = source
172
177
 
173
- Cop::Team.new(
174
- RuboCop::Cop::Registry.new,
175
- nil,
176
- @options
177
- ).autocorrect(source.buffer, [cop])
178
+ team = Cop::Team.new(RuboCop::Cop::Registry.new, nil, @options)
179
+ team.autocorrect(source.buffer, [cop])
180
+
181
+ return [] unless team.updated_source_file?
182
+
183
+ # Do one extra inspection loop if any unneeded disables were
184
+ # removed. This is done in order to find rubocop:enable directives that
185
+ # have now become useless.
186
+ _source, new_offenses = do_inspection_loop(file,
187
+ get_processed_source(file))
188
+ new_offenses - offenses
178
189
  end
179
190
 
180
191
  def file_started(file)
@@ -268,7 +279,6 @@ module RuboCop
268
279
 
269
280
  def inspect_file(processed_source)
270
281
  config = @config_store.for(processed_source.path)
271
- enable_rails_cops(config) if @options[:rails]
272
282
  team = Cop::Team.new(mobilized_cop_classes(config), config, @options)
273
283
  offenses = team.inspect_file(processed_source)
274
284
  @errors.concat(team.errors)
@@ -276,11 +286,6 @@ module RuboCop
276
286
  [offenses, team.updated_source_file?]
277
287
  end
278
288
 
279
- def enable_rails_cops(config)
280
- config['Rails'] ||= {}
281
- config['Rails']['Enabled'] = true
282
- end
283
-
284
289
  def mobilized_cop_classes(config)
285
290
  @mobilized_cop_classes ||= {}
286
291
  @mobilized_cop_classes[config.object_id] ||= begin
@@ -65,10 +65,12 @@ module RuboCop
65
65
  to_inspect?(file, hidden_files, base_dir_config)
66
66
  end
67
67
 
68
- # Most recently modified file first.
69
- target_files.sort_by! { |path| -Integer(File.mtime(path)) } if fail_fast?
70
-
71
- target_files
68
+ if fail_fast?
69
+ # Most recently modified file first.
70
+ target_files.sort_by! { |path| -Integer(File.mtime(path)) }
71
+ else
72
+ target_files.sort!
73
+ end
72
74
  end
73
75
 
74
76
  def to_inspect?(file, hidden_files, base_dir_config)
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '0.70.0'
6
+ STRING = '0.75.0'
7
7
 
8
8
  MSG = '%<version>s (using Parser %<parser_version>s, running on ' \
9
9
  '%<ruby_engine>s %<ruby_version>s %<ruby_platform>s)'
@@ -4,8 +4,14 @@ module RuboCop
4
4
  # Find duplicated keys from YAML.
5
5
  module YAMLDuplicationChecker
6
6
  def self.check(yaml_string, filename, &on_duplicated)
7
- # Specify filename to display helpful message when it raises an error.
8
- tree = YAML.parse(yaml_string, filename)
7
+ # Ruby 2.6+
8
+ tree = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0')
9
+ # Specify filename to display helpful message when it raises
10
+ # an error.
11
+ YAML.parse(yaml_string, filename: filename)
12
+ else
13
+ YAML.parse(yaml_string, filename)
14
+ end
9
15
  return unless tree
10
16
 
11
17
  traverse(tree, &on_duplicated)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.70.0
4
+ version: 0.75.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-05-21 00:00:00.000000000 Z
13
+ date: 2019-09-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: jaro_winkler
@@ -128,20 +128,6 @@ dependencies:
128
128
  - - "<"
129
129
  - !ruby/object:Gem::Version
130
130
  version: '3.0'
131
- - !ruby/object:Gem::Dependency
132
- name: rack
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- version: '2.0'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - ">="
143
- - !ruby/object:Gem::Version
144
- version: '2.0'
145
131
  description: |2
146
132
  Automatic Ruby code style checking tool.
147
133
  Aims to enforce the community-driven Ruby Style Guide.
@@ -175,9 +161,11 @@ files:
175
161
  - lib/rubocop/ast/node/def_node.rb
176
162
  - lib/rubocop/ast/node/defined_node.rb
177
163
  - lib/rubocop/ast/node/ensure_node.rb
164
+ - lib/rubocop/ast/node/float_node.rb
178
165
  - lib/rubocop/ast/node/for_node.rb
179
166
  - lib/rubocop/ast/node/hash_node.rb
180
167
  - lib/rubocop/ast/node/if_node.rb
168
+ - lib/rubocop/ast/node/int_node.rb
181
169
  - lib/rubocop/ast/node/keyword_splat_node.rb
182
170
  - lib/rubocop/ast/node/mixin/basic_literal_node.rb
183
171
  - lib/rubocop/ast/node/mixin/binary_operator_node.rb
@@ -187,6 +175,7 @@ files:
187
175
  - lib/rubocop/ast/node/mixin/method_dispatch_node.rb
188
176
  - lib/rubocop/ast/node/mixin/method_identifier_predicates.rb
189
177
  - lib/rubocop/ast/node/mixin/modifier_node.rb
178
+ - lib/rubocop/ast/node/mixin/numeric_node.rb
190
179
  - lib/rubocop/ast/node/mixin/parameterized_node.rb
191
180
  - lib/rubocop/ast/node/mixin/predicate_operator_node.rb
192
181
  - lib/rubocop/ast/node/module_node.rb
@@ -213,7 +202,9 @@ files:
213
202
  - lib/rubocop/config.rb
214
203
  - lib/rubocop/config_loader.rb
215
204
  - lib/rubocop/config_loader_resolver.rb
205
+ - lib/rubocop/config_obsoletion.rb
216
206
  - lib/rubocop/config_store.rb
207
+ - lib/rubocop/config_validator.rb
217
208
  - lib/rubocop/cop/autocorrect_logic.rb
218
209
  - lib/rubocop/cop/badge.rb
219
210
  - lib/rubocop/cop/bundler/duplicated_gem.rb
@@ -242,6 +233,7 @@ files:
242
233
  - lib/rubocop/cop/gemspec/duplicated_assignment.rb
243
234
  - lib/rubocop/cop/gemspec/ordered_dependencies.rb
244
235
  - lib/rubocop/cop/gemspec/required_ruby_version.rb
236
+ - lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb
245
237
  - lib/rubocop/cop/generator.rb
246
238
  - lib/rubocop/cop/generator/configuration_injector.rb
247
239
  - lib/rubocop/cop/generator/require_file_injector.rb
@@ -397,6 +389,7 @@ files:
397
389
  - lib/rubocop/cop/lint/safe_navigation_consistency.rb
398
390
  - lib/rubocop/cop/lint/safe_navigation_with_empty.rb
399
391
  - lib/rubocop/cop/lint/script_permission.rb
392
+ - lib/rubocop/cop/lint/send_with_mixin_argument.rb
400
393
  - lib/rubocop/cop/lint/shadowed_argument.rb
401
394
  - lib/rubocop/cop/lint/shadowed_exception.rb
402
395
  - lib/rubocop/cop/lint/shadowing_outer_local_variable.rb
@@ -432,6 +425,7 @@ files:
432
425
  - lib/rubocop/cop/metrics/parameter_lists.rb
433
426
  - lib/rubocop/cop/metrics/perceived_complexity.rb
434
427
  - lib/rubocop/cop/metrics/utils/abc_size_calculator.rb
428
+ - lib/rubocop/cop/migration/department_name.rb
435
429
  - lib/rubocop/cop/mixin/alignment.rb
436
430
  - lib/rubocop/cop/mixin/annotation_comment.rb
437
431
  - lib/rubocop/cop/mixin/array_min_size.rb
@@ -456,10 +450,10 @@ files:
456
450
  - lib/rubocop/cop/mixin/frozen_string_literal.rb
457
451
  - lib/rubocop/cop/mixin/hash_alignment.rb
458
452
  - lib/rubocop/cop/mixin/heredoc.rb
459
- - lib/rubocop/cop/mixin/ignored_method_patterns.rb
460
453
  - lib/rubocop/cop/mixin/ignored_methods.rb
461
454
  - lib/rubocop/cop/mixin/ignored_pattern.rb
462
455
  - lib/rubocop/cop/mixin/integer_node.rb
456
+ - lib/rubocop/cop/mixin/interpolation.rb
463
457
  - lib/rubocop/cop/mixin/match_range.rb
464
458
  - lib/rubocop/cop/mixin/method_complexity.rb
465
459
  - lib/rubocop/cop/mixin/method_preference.rb
@@ -488,7 +482,6 @@ files:
488
482
  - lib/rubocop/cop/mixin/string_help.rb
489
483
  - lib/rubocop/cop/mixin/string_literals_help.rb
490
484
  - lib/rubocop/cop/mixin/surrounding_space.rb
491
- - lib/rubocop/cop/mixin/target_rails_version.rb
492
485
  - lib/rubocop/cop/mixin/target_ruby_version.rb
493
486
  - lib/rubocop/cop/mixin/too_many_lines.rb
494
487
  - lib/rubocop/cop/mixin/trailing_body.rb
@@ -512,57 +505,6 @@ files:
512
505
  - lib/rubocop/cop/naming/variable_name.rb
513
506
  - lib/rubocop/cop/naming/variable_number.rb
514
507
  - lib/rubocop/cop/offense.rb
515
- - lib/rubocop/cop/rails/action_filter.rb
516
- - lib/rubocop/cop/rails/active_record_aliases.rb
517
- - lib/rubocop/cop/rails/active_record_override.rb
518
- - lib/rubocop/cop/rails/active_support_aliases.rb
519
- - lib/rubocop/cop/rails/application_job.rb
520
- - lib/rubocop/cop/rails/application_record.rb
521
- - lib/rubocop/cop/rails/assert_not.rb
522
- - lib/rubocop/cop/rails/belongs_to.rb
523
- - lib/rubocop/cop/rails/blank.rb
524
- - lib/rubocop/cop/rails/bulk_change_table.rb
525
- - lib/rubocop/cop/rails/create_table_with_timestamps.rb
526
- - lib/rubocop/cop/rails/date.rb
527
- - lib/rubocop/cop/rails/delegate.rb
528
- - lib/rubocop/cop/rails/delegate_allow_blank.rb
529
- - lib/rubocop/cop/rails/dynamic_find_by.rb
530
- - lib/rubocop/cop/rails/enum_uniqueness.rb
531
- - lib/rubocop/cop/rails/environment_comparison.rb
532
- - lib/rubocop/cop/rails/exit.rb
533
- - lib/rubocop/cop/rails/file_path.rb
534
- - lib/rubocop/cop/rails/find_by.rb
535
- - lib/rubocop/cop/rails/find_each.rb
536
- - lib/rubocop/cop/rails/has_and_belongs_to_many.rb
537
- - lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb
538
- - lib/rubocop/cop/rails/http_positional_arguments.rb
539
- - lib/rubocop/cop/rails/http_status.rb
540
- - lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb
541
- - lib/rubocop/cop/rails/inverse_of.rb
542
- - lib/rubocop/cop/rails/lexically_scoped_action_filter.rb
543
- - lib/rubocop/cop/rails/link_to_blank.rb
544
- - lib/rubocop/cop/rails/not_null_column.rb
545
- - lib/rubocop/cop/rails/output.rb
546
- - lib/rubocop/cop/rails/output_safety.rb
547
- - lib/rubocop/cop/rails/pluralization_grammar.rb
548
- - lib/rubocop/cop/rails/presence.rb
549
- - lib/rubocop/cop/rails/present.rb
550
- - lib/rubocop/cop/rails/read_write_attribute.rb
551
- - lib/rubocop/cop/rails/redundant_allow_nil.rb
552
- - lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb
553
- - lib/rubocop/cop/rails/reflection_class_name.rb
554
- - lib/rubocop/cop/rails/refute_methods.rb
555
- - lib/rubocop/cop/rails/relative_date_constant.rb
556
- - lib/rubocop/cop/rails/request_referer.rb
557
- - lib/rubocop/cop/rails/reversible_migration.rb
558
- - lib/rubocop/cop/rails/safe_navigation.rb
559
- - lib/rubocop/cop/rails/save_bang.rb
560
- - lib/rubocop/cop/rails/scope_args.rb
561
- - lib/rubocop/cop/rails/skips_model_validations.rb
562
- - lib/rubocop/cop/rails/time_zone.rb
563
- - lib/rubocop/cop/rails/uniq_before_pluck.rb
564
- - lib/rubocop/cop/rails/unknown_env.rb
565
- - lib/rubocop/cop/rails/validation.rb
566
508
  - lib/rubocop/cop/registry.rb
567
509
  - lib/rubocop/cop/security/eval.rb
568
510
  - lib/rubocop/cop/security/json_load.rb
@@ -602,6 +544,7 @@ files:
602
544
  - lib/rubocop/cop/style/dir.rb
603
545
  - lib/rubocop/cop/style/documentation.rb
604
546
  - lib/rubocop/cop/style/documentation_method.rb
547
+ - lib/rubocop/cop/style/double_cop_disable_directive.rb
605
548
  - lib/rubocop/cop/style/double_negation.rb
606
549
  - lib/rubocop/cop/style/each_for_simple_loop.rb
607
550
  - lib/rubocop/cop/style/each_with_object.rb
@@ -616,6 +559,7 @@ files:
616
559
  - lib/rubocop/cop/style/eval_with_location.rb
617
560
  - lib/rubocop/cop/style/even_odd.rb
618
561
  - lib/rubocop/cop/style/expand_path_arguments.rb
562
+ - lib/rubocop/cop/style/float_division.rb
619
563
  - lib/rubocop/cop/style/for.rb
620
564
  - lib/rubocop/cop/style/format_string.rb
621
565
  - lib/rubocop/cop/style/format_string_token.rb
@@ -653,6 +597,7 @@ files:
653
597
  - lib/rubocop/cop/style/multiline_memoization.rb
654
598
  - lib/rubocop/cop/style/multiline_method_signature.rb
655
599
  - lib/rubocop/cop/style/multiline_ternary_operator.rb
600
+ - lib/rubocop/cop/style/multiline_when_then.rb
656
601
  - lib/rubocop/cop/style/multiple_comparison.rb
657
602
  - lib/rubocop/cop/style/mutable_constant.rb
658
603
  - lib/rubocop/cop/style/negated_if.rb
@@ -739,6 +684,7 @@ files:
739
684
  - lib/rubocop/cop/style/zero_length_predicate.rb
740
685
  - lib/rubocop/cop/team.rb
741
686
  - lib/rubocop/cop/util.rb
687
+ - lib/rubocop/cop/utils/format_string.rb
742
688
  - lib/rubocop/cop/variable_force.rb
743
689
  - lib/rubocop/cop/variable_force/assignment.rb
744
690
  - lib/rubocop/cop/variable_force/branch.rb
@@ -763,6 +709,7 @@ files:
763
709
  - lib/rubocop/formatter/html_formatter.rb
764
710
  - lib/rubocop/formatter/json_formatter.rb
765
711
  - lib/rubocop/formatter/offense_count_formatter.rb
712
+ - lib/rubocop/formatter/pacman_formatter.rb
766
713
  - lib/rubocop/formatter/progress_formatter.rb
767
714
  - lib/rubocop/formatter/quiet_formatter.rb
768
715
  - lib/rubocop/formatter/simple_text_formatter.rb
@@ -783,7 +730,6 @@ files:
783
730
  - lib/rubocop/rspec/expect_offense.rb
784
731
  - lib/rubocop/rspec/host_environment_simulation_helper.rb
785
732
  - lib/rubocop/rspec/shared_contexts.rb
786
- - lib/rubocop/rspec/shared_examples.rb
787
733
  - lib/rubocop/rspec/support.rb
788
734
  - lib/rubocop/runner.rb
789
735
  - lib/rubocop/string_interpreter.rb
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- # This module encapsulates the ability to ignore certain methods when
6
- # parsing using regex patterns.
7
- module IgnoredMethodPatterns
8
- private
9
-
10
- def ignored_method_pattern?(name)
11
- ignored_method_patterns.any? { |pattern| Regexp.new(pattern) =~ name }
12
- end
13
-
14
- def ignored_method_patterns
15
- cop_config.fetch('IgnoredMethodPatterns', [])
16
- end
17
- end
18
- end
19
- end