rubocop 1.0.0 → 1.1.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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -5
  3. data/config/default.yml +52 -3
  4. data/lib/rubocop.rb +8 -0
  5. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
  6. data/lib/rubocop/comment_config.rb +1 -1
  7. data/lib/rubocop/cop/bundler/duplicated_gem.rb +23 -3
  8. data/lib/rubocop/cop/commissioner.rb +9 -9
  9. data/lib/rubocop/cop/corrector.rb +3 -1
  10. data/lib/rubocop/cop/force.rb +1 -1
  11. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  12. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  13. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -2
  14. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  15. data/lib/rubocop/cop/lint/debugger.rb +2 -3
  16. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +77 -0
  17. data/lib/rubocop/cop/lint/empty_block.rb +46 -0
  18. data/lib/rubocop/cop/lint/flip_flop.rb +8 -2
  19. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +17 -3
  20. data/lib/rubocop/cop/lint/number_conversion.rb +46 -13
  21. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +27 -8
  22. data/lib/rubocop/cop/lint/to_enum_arguments.rb +95 -0
  23. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +185 -0
  24. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
  25. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
  26. data/lib/rubocop/cop/naming/predicate_name.rb +2 -1
  27. data/lib/rubocop/cop/offense.rb +3 -3
  28. data/lib/rubocop/cop/style/arguments_forwarding.rb +142 -0
  29. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +67 -0
  30. data/lib/rubocop/cop/style/multiple_comparison.rb +54 -7
  31. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +7 -1
  32. data/lib/rubocop/cop/style/semicolon.rb +3 -0
  33. data/lib/rubocop/cop/style/swap_values.rb +108 -0
  34. data/lib/rubocop/cop/team.rb +6 -1
  35. data/lib/rubocop/cop/util.rb +1 -1
  36. data/lib/rubocop/ext/regexp_node.rb +10 -7
  37. data/lib/rubocop/ext/regexp_parser.rb +77 -0
  38. data/lib/rubocop/formatter/formatter_set.rb +1 -1
  39. data/lib/rubocop/magic_comment.rb +2 -2
  40. data/lib/rubocop/rspec/shared_contexts.rb +4 -0
  41. data/lib/rubocop/version.rb +1 -1
  42. metadata +13 -5
@@ -99,7 +99,12 @@ module RuboCop
99
99
  def self.forces_for(cops)
100
100
  needed = Hash.new { |h, k| h[k] = [] }
101
101
  cops.each do |cop|
102
- Array(cop.class.joining_forces).each { |force| needed[force] << cop }
102
+ forces = cop.class.joining_forces
103
+ if forces.is_a?(Array)
104
+ forces.each { |force| needed[force] << cop }
105
+ elsif forces
106
+ needed[forces] << cop
107
+ end
103
108
  end
104
109
 
105
110
  needed.map do |force_class, joining_cops|
@@ -62,7 +62,7 @@ module RuboCop
62
62
  end
63
63
 
64
64
  def begins_its_line?(range)
65
- (range.source_line =~ /\S/) == range.column
65
+ range.source_line.index(/\S/) == range.column
66
66
  end
67
67
 
68
68
  # Returns, for example, a bare `if` node if the given node is an `if`
@@ -10,19 +10,22 @@ module RuboCop
10
10
  end
11
11
  private_constant :ANY
12
12
 
13
- class << self
14
- attr_reader :parsed_cache
15
- end
16
- @parsed_cache = {}
17
-
18
13
  # @return [Regexp::Expression::Root, nil]
19
- def parsed_tree
14
+ # Note: we extend Regexp nodes to provide `loc` and `expression`
15
+ # see `ext/regexp_parser`.
16
+ attr_reader :parsed_tree
17
+
18
+ def assign_properties(*)
19
+ super
20
+
20
21
  str = with_interpolations_blanked
21
- Ext::RegexpNode.parsed_cache[str] ||= begin
22
+ @parsed_tree = begin
22
23
  Regexp::Parser.parse(str, options: options)
23
24
  rescue StandardError
24
25
  nil
25
26
  end
27
+ origin = loc.begin.end
28
+ @parsed_tree&.each_expression(true) { |e| e.origin = origin }
26
29
  end
27
30
 
28
31
  def each_capture(named: ANY)
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Ext
5
+ # Extensions for `regexp_parser` gem
6
+ module RegexpParser
7
+ # Source map for RegexpParser nodes
8
+ class Map < ::Parser::Source::Map
9
+ attr_reader :body, :quantifier, :begin, :end
10
+
11
+ def initialize(expression, body:, quantifier: nil, begin_l: nil, end_l: nil)
12
+ @begin = begin_l
13
+ @end = end_l
14
+ @body = body
15
+ @quantifier = quantifier
16
+ super(expression)
17
+ end
18
+ end
19
+
20
+ module Expression
21
+ # Add `expression` and `loc` to all `regexp_parser` nodes
22
+ module Base
23
+ attr_accessor :origin
24
+
25
+ # Shortcut to `loc.expression`
26
+ def expression
27
+ @expression ||= origin.adjust(begin_pos: ts, end_pos: ts + full_length)
28
+ end
29
+
30
+ # @returns a location map like `parser` does, with:
31
+ # - expression: complete expression
32
+ # - quantifier: for `+`, `{1,2}`, etc.
33
+ # - begin/end: for `[` and `]` (only CharacterSet for now)
34
+ #
35
+ # E.g.
36
+ # [a-z]{2,}
37
+ # ^^^^^^^^^ expression
38
+ # ^^^^ quantifier
39
+ # ^^^^^ body
40
+ # ^ begin
41
+ # ^ end
42
+ #
43
+ # Please open issue if you need other locations
44
+ def loc
45
+ @loc ||= begin
46
+ Map.new(expression, **build_location)
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def build_location
53
+ return { body: expression } unless (q = quantifier)
54
+
55
+ body = expression.adjust(end_pos: -q.text.length)
56
+ q_loc = expression.with(begin_pos: body.end_pos)
57
+ { body: body, quantifier: q_loc }
58
+ end
59
+ end
60
+
61
+ # Provide `CharacterSet` with `begin` and `end` locations.
62
+ module CharacterSet
63
+ def build_location
64
+ h = super
65
+ body = h[:body]
66
+ h.merge!(
67
+ begin_l: body.with(end_pos: body.begin_pos + 1),
68
+ end_l: body.with(begin_pos: body.end_pos - 1)
69
+ )
70
+ end
71
+ end
72
+ end
73
+ ::Regexp::Expression::Base.include Expression::Base
74
+ ::Regexp::Expression::CharacterSet.include Expression::CharacterSet
75
+ end
76
+ end
77
+ end
@@ -30,7 +30,7 @@ module RuboCop
30
30
 
31
31
  FORMATTER_APIS.each do |method_name|
32
32
  define_method(method_name) do |*args|
33
- each { |f| f.send(method_name, *args) }
33
+ each { |f| f.public_send(method_name, *args) }
34
34
  end
35
35
  end
36
36
 
@@ -194,7 +194,7 @@ module RuboCop
194
194
  class SimpleComment < MagicComment
195
195
  # Match `encoding` or `coding`
196
196
  def encoding
197
- extract(/\A\s*\#.*\b(?:en)?coding: (#{TOKEN})/i)
197
+ extract(/\A\s*\#.*\b(?:en)?coding: (#{TOKEN})/io)
198
198
  end
199
199
 
200
200
  private
@@ -207,7 +207,7 @@ module RuboCop
207
207
  # Case-insensitive and dashes/underscores are acceptable.
208
208
  # @see https://git.io/vM7Mg
209
209
  def extract_frozen_string_literal
210
- extract(/\A\s*#\s*frozen[_-]string[_-]literal:\s*(#{TOKEN})\s*\z/i)
210
+ extract(/\A\s*#\s*frozen[_-]string[_-]literal:\s*(#{TOKEN})\s*\z/io)
211
211
  end
212
212
  end
213
213
  end
@@ -138,3 +138,7 @@ end
138
138
  RSpec.shared_context 'ruby 2.7', :ruby27 do
139
139
  let(:ruby_version) { 2.7 }
140
140
  end
141
+
142
+ RSpec.shared_context 'ruby 3.0', :ruby30 do
143
+ let(:ruby_version) { 3.0 }
144
+ end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '1.0.0'
6
+ STRING = '1.1.0'
7
7
 
8
8
  MSG = '%<version>s (using Parser %<parser_version>s, '\
9
9
  'rubocop-ast %<rubocop_ast_version>s, ' \
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: 1.0.0
4
+ version: 1.1.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: 2020-10-21 00:00:00.000000000 Z
13
+ date: 2020-10-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: parallel
@@ -94,14 +94,14 @@ dependencies:
94
94
  requirements:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 0.6.0
97
+ version: 1.0.1
98
98
  type: :runtime
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
- version: 0.6.0
104
+ version: 1.0.1
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: ruby-progressbar
107
107
  requirement: !ruby/object:Gem::Requirement
@@ -351,10 +351,12 @@ files:
351
351
  - lib/rubocop/cop/lint/duplicate_elsif_condition.rb
352
352
  - lib/rubocop/cop/lint/duplicate_hash_key.rb
353
353
  - lib/rubocop/cop/lint/duplicate_methods.rb
354
+ - lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb
354
355
  - lib/rubocop/cop/lint/duplicate_require.rb
355
356
  - lib/rubocop/cop/lint/duplicate_rescue_exception.rb
356
357
  - lib/rubocop/cop/lint/each_with_object_argument.rb
357
358
  - lib/rubocop/cop/lint/else_layout.rb
359
+ - lib/rubocop/cop/lint/empty_block.rb
358
360
  - lib/rubocop/cop/lint/empty_conditional_body.rb
359
361
  - lib/rubocop/cop/lint/empty_ensure.rb
360
362
  - lib/rubocop/cop/lint/empty_expression.rb
@@ -419,11 +421,13 @@ files:
419
421
  - lib/rubocop/cop/lint/struct_new_override.rb
420
422
  - lib/rubocop/cop/lint/suppressed_exception.rb
421
423
  - lib/rubocop/cop/lint/syntax.rb
424
+ - lib/rubocop/cop/lint/to_enum_arguments.rb
422
425
  - lib/rubocop/cop/lint/to_json.rb
423
426
  - lib/rubocop/cop/lint/top_level_return_with_argument.rb
424
427
  - lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb
425
428
  - lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb
426
429
  - lib/rubocop/cop/lint/unified_integer.rb
430
+ - lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb
427
431
  - lib/rubocop/cop/lint/unreachable_code.rb
428
432
  - lib/rubocop/cop/lint/unreachable_loop.rb
429
433
  - lib/rubocop/cop/lint/unused_block_argument.rb
@@ -545,6 +549,7 @@ files:
545
549
  - lib/rubocop/cop/style/accessor_grouping.rb
546
550
  - lib/rubocop/cop/style/alias.rb
547
551
  - lib/rubocop/cop/style/and_or.rb
552
+ - lib/rubocop/cop/style/arguments_forwarding.rb
548
553
  - lib/rubocop/cop/style/array_coercion.rb
549
554
  - lib/rubocop/cop/style/array_join.rb
550
555
  - lib/rubocop/cop/style/ascii_comments.rb
@@ -578,6 +583,7 @@ files:
578
583
  - lib/rubocop/cop/style/def_with_parentheses.rb
579
584
  - lib/rubocop/cop/style/dir.rb
580
585
  - lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb
586
+ - lib/rubocop/cop/style/document_dynamic_eval_definition.rb
581
587
  - lib/rubocop/cop/style/documentation.rb
582
588
  - lib/rubocop/cop/style/documentation_method.rb
583
589
  - lib/rubocop/cop/style/double_cop_disable_directive.rb
@@ -717,6 +723,7 @@ files:
717
723
  - lib/rubocop/cop/style/string_methods.rb
718
724
  - lib/rubocop/cop/style/strip.rb
719
725
  - lib/rubocop/cop/style/struct_inheritance.rb
726
+ - lib/rubocop/cop/style/swap_values.rb
720
727
  - lib/rubocop/cop/style/symbol_array.rb
721
728
  - lib/rubocop/cop/style/symbol_literal.rb
722
729
  - lib/rubocop/cop/style/symbol_proc.rb
@@ -757,6 +764,7 @@ files:
757
764
  - lib/rubocop/error.rb
758
765
  - lib/rubocop/ext/processed_source.rb
759
766
  - lib/rubocop/ext/regexp_node.rb
767
+ - lib/rubocop/ext/regexp_parser.rb
760
768
  - lib/rubocop/file_finder.rb
761
769
  - lib/rubocop/formatter/auto_gen_config_formatter.rb
762
770
  - lib/rubocop/formatter/base_formatter.rb
@@ -805,7 +813,7 @@ metadata:
805
813
  homepage_uri: https://rubocop.org/
806
814
  changelog_uri: https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md
807
815
  source_code_uri: https://github.com/rubocop-hq/rubocop/
808
- documentation_uri: https://docs.rubocop.org/rubocop/1.0/
816
+ documentation_uri: https://docs.rubocop.org/rubocop/1.1/
809
817
  bug_tracker_uri: https://github.com/rubocop-hq/rubocop/issues
810
818
  post_install_message:
811
819
  rdoc_options: []