rubocop 1.0.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -16
  3. data/config/default.yml +141 -14
  4. data/exe/rubocop +1 -1
  5. data/lib/rubocop.rb +16 -0
  6. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
  7. data/lib/rubocop/comment_config.rb +1 -1
  8. data/lib/rubocop/config_loader.rb +7 -6
  9. data/lib/rubocop/cop/bundler/duplicated_gem.rb +26 -6
  10. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
  11. data/lib/rubocop/cop/commissioner.rb +10 -10
  12. data/lib/rubocop/cop/corrector.rb +3 -1
  13. data/lib/rubocop/cop/force.rb +1 -1
  14. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -3
  15. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +4 -5
  16. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  17. data/lib/rubocop/cop/generator.rb +1 -1
  18. data/lib/rubocop/cop/layout/block_alignment.rb +3 -4
  19. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  20. data/lib/rubocop/cop/layout/else_alignment.rb +15 -2
  21. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  22. data/lib/rubocop/cop/layout/end_alignment.rb +3 -3
  23. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -2
  24. data/lib/rubocop/cop/layout/hash_alignment.rb +4 -4
  25. data/lib/rubocop/cop/layout/line_length.rb +8 -1
  26. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +24 -18
  27. data/lib/rubocop/cop/layout/space_inside_parens.rb +35 -13
  28. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  29. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +23 -2
  30. data/lib/rubocop/cop/lint/debugger.rb +17 -28
  31. data/lib/rubocop/cop/lint/duplicate_branch.rb +93 -0
  32. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +2 -12
  33. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +77 -0
  34. data/lib/rubocop/cop/lint/else_layout.rb +29 -3
  35. data/lib/rubocop/cop/lint/empty_block.rb +82 -0
  36. data/lib/rubocop/cop/lint/empty_class.rb +93 -0
  37. data/lib/rubocop/cop/lint/flip_flop.rb +8 -2
  38. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +38 -6
  39. data/lib/rubocop/cop/lint/loop.rb +4 -4
  40. data/lib/rubocop/cop/lint/nested_percent_literal.rb +14 -0
  41. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +58 -0
  42. data/lib/rubocop/cop/lint/number_conversion.rb +46 -13
  43. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +27 -8
  44. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +19 -16
  45. data/lib/rubocop/cop/lint/shadowed_exception.rb +4 -5
  46. data/lib/rubocop/cop/lint/to_enum_arguments.rb +95 -0
  47. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +185 -0
  48. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
  49. data/lib/rubocop/cop/lint/useless_method_definition.rb +2 -4
  50. data/lib/rubocop/cop/lint/useless_setter_call.rb +6 -1
  51. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  52. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
  53. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
  54. data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -4
  55. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +11 -1
  56. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +11 -5
  57. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +67 -18
  58. data/lib/rubocop/cop/naming/predicate_name.rb +2 -1
  59. data/lib/rubocop/cop/naming/variable_number.rb +98 -8
  60. data/lib/rubocop/cop/offense.rb +3 -3
  61. data/lib/rubocop/cop/style/and_or.rb +1 -3
  62. data/lib/rubocop/cop/style/arguments_forwarding.rb +142 -0
  63. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -4
  64. data/lib/rubocop/cop/style/case_like_if.rb +0 -4
  65. data/lib/rubocop/cop/style/collection_compact.rb +91 -0
  66. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +162 -0
  67. data/lib/rubocop/cop/style/double_negation.rb +6 -1
  68. data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
  69. data/lib/rubocop/cop/style/identical_conditional_branches.rb +7 -2
  70. data/lib/rubocop/cop/style/if_inside_else.rb +37 -1
  71. data/lib/rubocop/cop/style/if_unless_modifier.rb +7 -3
  72. data/lib/rubocop/cop/style/infinite_loop.rb +4 -0
  73. data/lib/rubocop/cop/style/keyword_parameters_order.rb +12 -0
  74. data/lib/rubocop/cop/style/mixin_grouping.rb +0 -4
  75. data/lib/rubocop/cop/style/multiple_comparison.rb +55 -7
  76. data/lib/rubocop/cop/style/negated_if_else_condition.rb +104 -0
  77. data/lib/rubocop/cop/style/nil_lambda.rb +52 -0
  78. data/lib/rubocop/cop/style/raise_args.rb +21 -6
  79. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +7 -1
  80. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
  81. data/lib/rubocop/cop/style/semicolon.rb +3 -0
  82. data/lib/rubocop/cop/style/static_class.rb +97 -0
  83. data/lib/rubocop/cop/style/swap_values.rb +108 -0
  84. data/lib/rubocop/cop/style/while_until_modifier.rb +9 -0
  85. data/lib/rubocop/cop/team.rb +6 -1
  86. data/lib/rubocop/cop/util.rb +5 -1
  87. data/lib/rubocop/ext/regexp_node.rb +17 -9
  88. data/lib/rubocop/ext/regexp_parser.rb +84 -0
  89. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  90. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +47 -0
  91. data/lib/rubocop/magic_comment.rb +2 -2
  92. data/lib/rubocop/options.rb +2 -0
  93. data/lib/rubocop/rspec/shared_contexts.rb +4 -0
  94. data/lib/rubocop/target_ruby.rb +57 -1
  95. data/lib/rubocop/version.rb +1 -1
  96. metadata +21 -5
@@ -14,6 +14,7 @@ module RuboCop
14
14
  '[e]macs' => EmacsStyleFormatter,
15
15
  '[fi]les' => FileListFormatter,
16
16
  '[fu]ubar' => FuubarStyleFormatter,
17
+ '[g]ithub' => GitHubActionsFormatter,
17
18
  '[h]tml' => HTMLFormatter,
18
19
  '[j]son' => JSONFormatter,
19
20
  '[ju]nit' => JUnitFormatter,
@@ -30,7 +31,7 @@ module RuboCop
30
31
 
31
32
  FORMATTER_APIS.each do |method_name|
32
33
  define_method(method_name) do |*args|
33
- each { |f| f.send(method_name, *args) }
34
+ each { |f| f.public_send(method_name, *args) }
34
35
  end
35
36
  end
36
37
 
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Formatter
5
+ # This formatter formats report data as GitHub Workflow commands resulting
6
+ # in GitHub check annotations when run within GitHub Actions.
7
+ class GitHubActionsFormatter < BaseFormatter
8
+ ESCAPE_MAP = {
9
+ '%' => '%25',
10
+ "\n" => '%0A',
11
+ "\r" => '%0D'
12
+ }.freeze
13
+
14
+ def file_finished(file, offenses)
15
+ offenses.each { |offense| report_offense(file, offense) }
16
+ end
17
+
18
+ private
19
+
20
+ def github_escape(string)
21
+ string.gsub(Regexp.union(ESCAPE_MAP.keys), ESCAPE_MAP)
22
+ end
23
+
24
+ def minimum_severity_to_fail
25
+ @minimum_severity_to_fail ||= begin
26
+ name = options.fetch(:fail_level, :refactor)
27
+ RuboCop::Cop::Severity.new(name)
28
+ end
29
+ end
30
+
31
+ def github_severity(offense)
32
+ offense.severity < minimum_severity_to_fail ? 'warning' : 'error'
33
+ end
34
+
35
+ def report_offense(file, offense)
36
+ output.printf(
37
+ "\n::%<severity>s file=%<file>s,line=%<line>d,col=%<column>d::%<message>s\n",
38
+ severity: github_severity(offense),
39
+ file: file,
40
+ line: offense.line,
41
+ column: offense.real_column,
42
+ message: github_escape(offense.message)
43
+ )
44
+ end
45
+ end
46
+ end
47
+ end
@@ -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
@@ -145,6 +145,7 @@ module RuboCop
145
145
  end
146
146
  end
147
147
 
148
+ option(opts, '--display-time')
148
149
  option(opts, '--display-only-failed')
149
150
  end
150
151
 
@@ -469,6 +470,7 @@ module RuboCop
469
470
  'if no format is specified.'],
470
471
  fail_level: ['Minimum severity (A/R/C/W/E/F) for exit',
471
472
  'with error code.'],
473
+ display_time: 'Display elapsed time in seconds.',
472
474
  display_only_failed: ['Only output offense messages. Omit passing',
473
475
  'cops. Only valid for --format junit.'],
474
476
  display_only_fail_level_offenses:
@@ -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
@@ -112,6 +112,62 @@ module RuboCop
112
112
  end
113
113
  end
114
114
 
115
+ # The target ruby version may be found in a .gemspec file.
116
+ # @api private
117
+ class GemspecFile < Source
118
+ extend NodePattern::Macros
119
+
120
+ GEMSPEC_EXTENSION = '.gemspec'
121
+
122
+ def_node_search :required_ruby_version, <<~PATTERN
123
+ (send _ :required_ruby_version= $_)
124
+ PATTERN
125
+
126
+ def name
127
+ "`required_ruby_version` parameter (in #{gemspec_filename})"
128
+ end
129
+
130
+ private
131
+
132
+ def find_version
133
+ file = gemspec_filepath
134
+ return unless file && File.file?(file)
135
+
136
+ version = version_from_gemspec_file(file)
137
+ return if version.nil?
138
+
139
+ if version.array_type?
140
+ versions = version.children.map { |v| version_from_str(v.str_content) }
141
+ return versions.compact.min
142
+ end
143
+
144
+ version_from_str(version.str_content)
145
+ end
146
+
147
+ def gemspec_filename
148
+ @gemspec_filename ||= begin
149
+ basename = Pathname.new(@config.base_dir_for_path_parameters).basename.to_s
150
+ "#{basename}#{GEMSPEC_EXTENSION}"
151
+ end
152
+ end
153
+
154
+ def gemspec_filepath
155
+ @gemspec_filepath ||=
156
+ @config.find_file_upwards(gemspec_filename, @config.base_dir_for_path_parameters)
157
+ end
158
+
159
+ def version_from_gemspec_file(file)
160
+ processed_source = ProcessedSource.from_file(file, DEFAULT_VERSION)
161
+ required_ruby_version(processed_source.ast).first
162
+ end
163
+
164
+ def version_from_str(str)
165
+ str.match(/^(?:>=|<=)?\s*(?<version>\d+(?:\.\d+)*)/) do |md|
166
+ md[:version].to_f
167
+ end
168
+ end
169
+ end
170
+
115
171
  # If all else fails, a default version will be picked.
116
172
  # @api private
117
173
  class Default < Source
@@ -130,7 +186,7 @@ module RuboCop
130
186
  KNOWN_RUBIES
131
187
  end
132
188
 
133
- SOURCES = [RuboCopConfig, RubyVersionFile, BundlerLockFile, Default].freeze
189
+ SOURCES = [RuboCopConfig, RubyVersionFile, BundlerLockFile, GemspecFile, Default].freeze
134
190
  private_constant :SOURCES
135
191
 
136
192
  def initialize(config)
@@ -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.3.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.3.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-11-12 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.1.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.1.1
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: ruby-progressbar
107
107
  requirement: !ruby/object:Gem::Requirement
@@ -347,14 +347,18 @@ files:
347
347
  - lib/rubocop/cop/lint/deprecated_class_methods.rb
348
348
  - lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb
349
349
  - lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb
350
+ - lib/rubocop/cop/lint/duplicate_branch.rb
350
351
  - lib/rubocop/cop/lint/duplicate_case_condition.rb
351
352
  - lib/rubocop/cop/lint/duplicate_elsif_condition.rb
352
353
  - lib/rubocop/cop/lint/duplicate_hash_key.rb
353
354
  - lib/rubocop/cop/lint/duplicate_methods.rb
355
+ - lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb
354
356
  - lib/rubocop/cop/lint/duplicate_require.rb
355
357
  - lib/rubocop/cop/lint/duplicate_rescue_exception.rb
356
358
  - lib/rubocop/cop/lint/each_with_object_argument.rb
357
359
  - lib/rubocop/cop/lint/else_layout.rb
360
+ - lib/rubocop/cop/lint/empty_block.rb
361
+ - lib/rubocop/cop/lint/empty_class.rb
358
362
  - lib/rubocop/cop/lint/empty_conditional_body.rb
359
363
  - lib/rubocop/cop/lint/empty_ensure.rb
360
364
  - lib/rubocop/cop/lint/empty_expression.rb
@@ -384,6 +388,7 @@ files:
384
388
  - lib/rubocop/cop/lint/nested_method_definition.rb
385
389
  - lib/rubocop/cop/lint/nested_percent_literal.rb
386
390
  - lib/rubocop/cop/lint/next_without_accumulator.rb
391
+ - lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb
387
392
  - lib/rubocop/cop/lint/non_deterministic_require_order.rb
388
393
  - lib/rubocop/cop/lint/non_local_exit_from_iterator.rb
389
394
  - lib/rubocop/cop/lint/number_conversion.rb
@@ -419,11 +424,13 @@ files:
419
424
  - lib/rubocop/cop/lint/struct_new_override.rb
420
425
  - lib/rubocop/cop/lint/suppressed_exception.rb
421
426
  - lib/rubocop/cop/lint/syntax.rb
427
+ - lib/rubocop/cop/lint/to_enum_arguments.rb
422
428
  - lib/rubocop/cop/lint/to_json.rb
423
429
  - lib/rubocop/cop/lint/top_level_return_with_argument.rb
424
430
  - lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb
425
431
  - lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb
426
432
  - lib/rubocop/cop/lint/unified_integer.rb
433
+ - lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb
427
434
  - lib/rubocop/cop/lint/unreachable_code.rb
428
435
  - lib/rubocop/cop/lint/unreachable_loop.rb
429
436
  - lib/rubocop/cop/lint/unused_block_argument.rb
@@ -545,6 +552,7 @@ files:
545
552
  - lib/rubocop/cop/style/accessor_grouping.rb
546
553
  - lib/rubocop/cop/style/alias.rb
547
554
  - lib/rubocop/cop/style/and_or.rb
555
+ - lib/rubocop/cop/style/arguments_forwarding.rb
548
556
  - lib/rubocop/cop/style/array_coercion.rb
549
557
  - lib/rubocop/cop/style/array_join.rb
550
558
  - lib/rubocop/cop/style/ascii_comments.rb
@@ -564,6 +572,7 @@ files:
564
572
  - lib/rubocop/cop/style/class_methods.rb
565
573
  - lib/rubocop/cop/style/class_methods_definitions.rb
566
574
  - lib/rubocop/cop/style/class_vars.rb
575
+ - lib/rubocop/cop/style/collection_compact.rb
567
576
  - lib/rubocop/cop/style/collection_methods.rb
568
577
  - lib/rubocop/cop/style/colon_method_call.rb
569
578
  - lib/rubocop/cop/style/colon_method_definition.rb
@@ -578,6 +587,7 @@ files:
578
587
  - lib/rubocop/cop/style/def_with_parentheses.rb
579
588
  - lib/rubocop/cop/style/dir.rb
580
589
  - lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb
590
+ - lib/rubocop/cop/style/document_dynamic_eval_definition.rb
581
591
  - lib/rubocop/cop/style/documentation.rb
582
592
  - lib/rubocop/cop/style/documentation_method.rb
583
593
  - lib/rubocop/cop/style/double_cop_disable_directive.rb
@@ -647,6 +657,7 @@ files:
647
657
  - lib/rubocop/cop/style/multiple_comparison.rb
648
658
  - lib/rubocop/cop/style/mutable_constant.rb
649
659
  - lib/rubocop/cop/style/negated_if.rb
660
+ - lib/rubocop/cop/style/negated_if_else_condition.rb
650
661
  - lib/rubocop/cop/style/negated_unless.rb
651
662
  - lib/rubocop/cop/style/negated_while.rb
652
663
  - lib/rubocop/cop/style/nested_modifier.rb
@@ -654,6 +665,7 @@ files:
654
665
  - lib/rubocop/cop/style/nested_ternary_operator.rb
655
666
  - lib/rubocop/cop/style/next.rb
656
667
  - lib/rubocop/cop/style/nil_comparison.rb
668
+ - lib/rubocop/cop/style/nil_lambda.rb
657
669
  - lib/rubocop/cop/style/non_nil_check.rb
658
670
  - lib/rubocop/cop/style/not.rb
659
671
  - lib/rubocop/cop/style/numeric_literal_prefix.rb
@@ -709,6 +721,7 @@ files:
709
721
  - lib/rubocop/cop/style/sole_nested_conditional.rb
710
722
  - lib/rubocop/cop/style/special_global_vars.rb
711
723
  - lib/rubocop/cop/style/stabby_lambda_parentheses.rb
724
+ - lib/rubocop/cop/style/static_class.rb
712
725
  - lib/rubocop/cop/style/stderr_puts.rb
713
726
  - lib/rubocop/cop/style/string_concatenation.rb
714
727
  - lib/rubocop/cop/style/string_hash_keys.rb
@@ -717,6 +730,7 @@ files:
717
730
  - lib/rubocop/cop/style/string_methods.rb
718
731
  - lib/rubocop/cop/style/strip.rb
719
732
  - lib/rubocop/cop/style/struct_inheritance.rb
733
+ - lib/rubocop/cop/style/swap_values.rb
720
734
  - lib/rubocop/cop/style/symbol_array.rb
721
735
  - lib/rubocop/cop/style/symbol_literal.rb
722
736
  - lib/rubocop/cop/style/symbol_proc.rb
@@ -757,6 +771,7 @@ files:
757
771
  - lib/rubocop/error.rb
758
772
  - lib/rubocop/ext/processed_source.rb
759
773
  - lib/rubocop/ext/regexp_node.rb
774
+ - lib/rubocop/ext/regexp_parser.rb
760
775
  - lib/rubocop/file_finder.rb
761
776
  - lib/rubocop/formatter/auto_gen_config_formatter.rb
762
777
  - lib/rubocop/formatter/base_formatter.rb
@@ -767,6 +782,7 @@ files:
767
782
  - lib/rubocop/formatter/file_list_formatter.rb
768
783
  - lib/rubocop/formatter/formatter_set.rb
769
784
  - lib/rubocop/formatter/fuubar_style_formatter.rb
785
+ - lib/rubocop/formatter/git_hub_actions_formatter.rb
770
786
  - lib/rubocop/formatter/html_formatter.rb
771
787
  - lib/rubocop/formatter/json_formatter.rb
772
788
  - lib/rubocop/formatter/junit_formatter.rb
@@ -805,7 +821,7 @@ metadata:
805
821
  homepage_uri: https://rubocop.org/
806
822
  changelog_uri: https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md
807
823
  source_code_uri: https://github.com/rubocop-hq/rubocop/
808
- documentation_uri: https://docs.rubocop.org/rubocop/1.0/
824
+ documentation_uri: https://docs.rubocop.org/rubocop/1.3/
809
825
  bug_tracker_uri: https://github.com/rubocop-hq/rubocop/issues
810
826
  post_install_message:
811
827
  rdoc_options: []