rubocop 1.18.3 → 1.19.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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/config/default.yml +22 -5
  4. data/lib/rubocop.rb +4 -0
  5. data/lib/rubocop/cli.rb +18 -0
  6. data/lib/rubocop/config_loader_resolver.rb +21 -6
  7. data/lib/rubocop/config_validator.rb +18 -5
  8. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
  9. data/lib/rubocop/cop/correctors/require_library_corrector.rb +23 -0
  10. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
  11. data/lib/rubocop/cop/internal_affairs.rb +2 -0
  12. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +34 -0
  13. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +71 -0
  14. data/lib/rubocop/cop/layout/class_structure.rb +5 -1
  15. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +9 -0
  16. data/lib/rubocop/cop/layout/end_alignment.rb +10 -2
  17. data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -1
  18. data/lib/rubocop/cop/layout/hash_alignment.rb +22 -18
  19. data/lib/rubocop/cop/layout/heredoc_indentation.rb +0 -7
  20. data/lib/rubocop/cop/layout/indentation_style.rb +2 -2
  21. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  22. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +33 -14
  23. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +21 -9
  24. data/lib/rubocop/cop/layout/space_around_operators.rb +8 -1
  25. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
  26. data/lib/rubocop/cop/layout/space_inside_parens.rb +5 -5
  27. data/lib/rubocop/cop/layout/trailing_whitespace.rb +24 -1
  28. data/lib/rubocop/cop/lint/ambiguous_range.rb +105 -0
  29. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +5 -2
  30. data/lib/rubocop/cop/lint/duplicate_branch.rb +2 -1
  31. data/lib/rubocop/cop/lint/duplicate_methods.rb +8 -5
  32. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
  33. data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
  34. data/lib/rubocop/cop/mixin/hash_transform_method.rb +6 -1
  35. data/lib/rubocop/cop/mixin/heredoc.rb +7 -0
  36. data/lib/rubocop/cop/mixin/percent_array.rb +10 -7
  37. data/lib/rubocop/cop/mixin/require_library.rb +59 -0
  38. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
  39. data/lib/rubocop/cop/naming/inclusive_language.rb +18 -1
  40. data/lib/rubocop/cop/style/block_delimiters.rb +16 -0
  41. data/lib/rubocop/cop/style/commented_keyword.rb +2 -1
  42. data/lib/rubocop/cop/style/conditional_assignment.rb +19 -5
  43. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -7
  44. data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
  45. data/lib/rubocop/cop/style/explicit_block_argument.rb +32 -7
  46. data/lib/rubocop/cop/style/hash_transform_keys.rb +0 -3
  47. data/lib/rubocop/cop/style/identical_conditional_branches.rb +30 -5
  48. data/lib/rubocop/cop/style/method_def_parentheses.rb +10 -1
  49. data/lib/rubocop/cop/style/missing_else.rb +7 -0
  50. data/lib/rubocop/cop/style/mutable_constant.rb +6 -8
  51. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +88 -0
  52. data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
  53. data/lib/rubocop/cop/style/semicolon.rb +32 -24
  54. data/lib/rubocop/cop/style/single_line_block_params.rb +3 -1
  55. data/lib/rubocop/cop/style/single_line_methods.rb +14 -9
  56. data/lib/rubocop/cop/style/special_global_vars.rb +21 -0
  57. data/lib/rubocop/cop/style/word_array.rb +20 -2
  58. data/lib/rubocop/cop/util.rb +7 -2
  59. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -1
  60. data/lib/rubocop/options.rb +1 -1
  61. data/lib/rubocop/version.rb +1 -1
  62. metadata +11 -5
@@ -5,9 +5,14 @@ module RuboCop
5
5
  module Style
6
6
  #
7
7
  # This cop looks for uses of Perl-style global variables.
8
+ # Correcting to global variables in the 'English' library
9
+ # will add a require statement to the top of the file if
10
+ # enabled by RequireEnglish config.
8
11
  #
9
12
  # @example EnforcedStyle: use_english_names (default)
10
13
  # # good
14
+ # require 'English' # or this could be in another file.
15
+ #
11
16
  # puts $LOAD_PATH
12
17
  # puts $LOADED_FEATURES
13
18
  # puts $PROGRAM_NAME
@@ -50,6 +55,8 @@ module RuboCop
50
55
  #
51
56
  class SpecialGlobalVars < Base
52
57
  include ConfigurableEnforcedStyle
58
+ include RangeHelp
59
+ include RequireLibrary
53
60
  extend AutoCorrector
54
61
 
55
62
  MSG_BOTH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
@@ -90,6 +97,8 @@ module RuboCop
90
97
  # Anything *not* in this set is provided by the English library.
91
98
  NON_ENGLISH_VARS = Set.new(%i[$LOAD_PATH $LOADED_FEATURES $PROGRAM_NAME ARGV]).freeze
92
99
 
100
+ LIBRARY_NAME = 'English'
101
+
93
102
  def on_gvar(node)
94
103
  global_var, = *node
95
104
 
@@ -117,6 +126,8 @@ module RuboCop
117
126
  def autocorrect(corrector, node, global_var)
118
127
  node = node.parent while node.parent&.begin_type? && node.parent.children.one?
119
128
 
129
+ ensure_required(corrector, node, LIBRARY_NAME) if should_require_english?(global_var)
130
+
120
131
  corrector.replace(node, replacement(node, global_var))
121
132
  end
122
133
 
@@ -172,6 +183,16 @@ module RuboCop
172
183
 
173
184
  "{#{preferred_name}}"
174
185
  end
186
+
187
+ def add_require_english?
188
+ cop_config['RequireEnglish']
189
+ end
190
+
191
+ def should_require_english?(global_var)
192
+ style == :use_english_names &&
193
+ add_require_english? &&
194
+ !NON_ENGLISH_VARS.include?(preferred_names(global_var).first)
195
+ end
175
196
  end
176
197
  end
177
198
  end
@@ -9,6 +9,9 @@ module RuboCop
9
9
  # Alternatively, it can check for uses of the %w() syntax, in projects
10
10
  # which do not want to include that syntax.
11
11
  #
12
+ # NOTE: When using the `percent` style, %w() arrays containing a space
13
+ # will be registered as offenses.
14
+ #
12
15
  # Configuration option: MinSize
13
16
  # If set, arrays with fewer elements than this value will not trigger the
14
17
  # cop. For example, a `MinSize` of `3` will not enforce a style on an
@@ -21,12 +24,18 @@ module RuboCop
21
24
  # # bad
22
25
  # ['foo', 'bar', 'baz']
23
26
  #
27
+ # # bad (contains spaces)
28
+ # %w[foo\ bar baz\ quux]
29
+ #
24
30
  # @example EnforcedStyle: brackets
25
31
  # # good
26
32
  # ['foo', 'bar', 'baz']
27
33
  #
28
34
  # # bad
29
35
  # %w[foo bar baz]
36
+ #
37
+ # # good (contains spaces)
38
+ # ['foo bar', 'baz quux']
30
39
  class WordArray < Base
31
40
  include ArrayMinSize
32
41
  include ArraySyntax
@@ -53,13 +62,22 @@ module RuboCop
53
62
 
54
63
  private
55
64
 
56
- def complex_content?(strings)
65
+ def complex_content?(strings, complex_regex: word_regex)
57
66
  strings.any? do |s|
67
+ next unless s.str_content
68
+
58
69
  string = s.str_content.dup.force_encoding(::Encoding::UTF_8)
59
- !string.valid_encoding? || !word_regex.match?(string) || / /.match?(string)
70
+ !string.valid_encoding? ||
71
+ (complex_regex && !complex_regex.match?(string)) ||
72
+ / /.match?(string)
60
73
  end
61
74
  end
62
75
 
76
+ def invalid_percent_array_contents?(node)
77
+ # Disallow %w() arrays that contain invalid encoding or spaces
78
+ complex_content?(node.values, complex_regex: false)
79
+ end
80
+
63
81
  def word_regex
64
82
  Regexp.new(cop_config['WordRegex'])
65
83
  end
@@ -46,8 +46,13 @@ module RuboCop
46
46
 
47
47
  def args_begin(node)
48
48
  loc = node.loc
49
- selector =
50
- node.super_type? || node.yield_type? ? loc.keyword : loc.selector
49
+ selector = if node.super_type? || node.yield_type?
50
+ loc.keyword
51
+ elsif node.def_type? || node.defs_type?
52
+ loc.name
53
+ else
54
+ loc.selector
55
+ end
51
56
  selector.end.resize(1)
52
57
  end
53
58
 
@@ -33,7 +33,7 @@ module RuboCop
33
33
  output.printf(
34
34
  "\n::%<severity>s file=%<file>s,line=%<line>d,col=%<column>d::%<message>s\n",
35
35
  severity: github_severity(offense),
36
- file: file,
36
+ file: PathUtil.smart_path(file),
37
37
  line: offense.line,
38
38
  column: offense.real_column,
39
39
  message: github_escape(offense.message)
@@ -492,7 +492,7 @@ module RuboCop
492
492
  version: 'Display version.',
493
493
  verbose_version: 'Display verbose version.',
494
494
  parallel: ['Use available CPUs to execute inspection in',
495
- 'parallel. Default is false.'],
495
+ 'parallel. Default is true.'],
496
496
  stdin: ['Pipe source from STDIN, using FILE in offense',
497
497
  'reports. This is useful for editor integration.'],
498
498
  init: 'Generate a .rubocop.yml file in the current directory.'
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '1.18.3'
6
+ STRING = '1.19.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.18.3
4
+ version: 1.19.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: 2021-07-06 00:00:00.000000000 Z
13
+ date: 2021-08-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: parallel
@@ -100,7 +100,7 @@ dependencies:
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 1.7.0
103
+ version: 1.9.1
104
104
  - - "<"
105
105
  - !ruby/object:Gem::Version
106
106
  version: '2.0'
@@ -110,7 +110,7 @@ dependencies:
110
110
  requirements:
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 1.7.0
113
+ version: 1.9.1
114
114
  - - "<"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '2.0'
@@ -239,6 +239,7 @@ files:
239
239
  - lib/rubocop/cop/correctors/parentheses_corrector.rb
240
240
  - lib/rubocop/cop/correctors/percent_literal_corrector.rb
241
241
  - lib/rubocop/cop/correctors/punctuation_corrector.rb
242
+ - lib/rubocop/cop/correctors/require_library_corrector.rb
242
243
  - lib/rubocop/cop/correctors/space_corrector.rb
243
244
  - lib/rubocop/cop/correctors/string_literal_corrector.rb
244
245
  - lib/rubocop/cop/correctors/unused_arg_corrector.rb
@@ -257,6 +258,7 @@ files:
257
258
  - lib/rubocop/cop/internal_affairs.rb
258
259
  - lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb
259
260
  - lib/rubocop/cop/internal_affairs/example_description.rb
261
+ - lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb
260
262
  - lib/rubocop/cop/internal_affairs/method_name_equal.rb
261
263
  - lib/rubocop/cop/internal_affairs/node_destructuring.rb
262
264
  - lib/rubocop/cop/internal_affairs/node_matcher_directive.rb
@@ -267,6 +269,7 @@ files:
267
269
  - lib/rubocop/cop/internal_affairs/redundant_location_argument.rb
268
270
  - lib/rubocop/cop/internal_affairs/redundant_message_argument.rb
269
271
  - lib/rubocop/cop/internal_affairs/style_detected_api_use.rb
272
+ - lib/rubocop/cop/internal_affairs/undefined_config.rb
270
273
  - lib/rubocop/cop/internal_affairs/useless_message_assertion.rb
271
274
  - lib/rubocop/cop/layout/access_modifier_indentation.rb
272
275
  - lib/rubocop/cop/layout/argument_alignment.rb
@@ -369,6 +372,7 @@ files:
369
372
  - lib/rubocop/cop/lint/ambiguous_assignment.rb
370
373
  - lib/rubocop/cop/lint/ambiguous_block_association.rb
371
374
  - lib/rubocop/cop/lint/ambiguous_operator.rb
375
+ - lib/rubocop/cop/lint/ambiguous_range.rb
372
376
  - lib/rubocop/cop/lint/ambiguous_regexp_literal.rb
373
377
  - lib/rubocop/cop/lint/assignment_in_condition.rb
374
378
  - lib/rubocop/cop/lint/big_decimal_new.rb
@@ -556,6 +560,7 @@ files:
556
560
  - lib/rubocop/cop/mixin/preferred_delimiters.rb
557
561
  - lib/rubocop/cop/mixin/range_help.rb
558
562
  - lib/rubocop/cop/mixin/rational_literal.rb
563
+ - lib/rubocop/cop/mixin/require_library.rb
559
564
  - lib/rubocop/cop/mixin/rescue_node.rb
560
565
  - lib/rubocop/cop/mixin/safe_assignment.rb
561
566
  - lib/rubocop/cop/mixin/space_after_punctuation.rb
@@ -759,6 +764,7 @@ files:
759
764
  - lib/rubocop/cop/style/redundant_return.rb
760
765
  - lib/rubocop/cop/style/redundant_self.rb
761
766
  - lib/rubocop/cop/style/redundant_self_assignment.rb
767
+ - lib/rubocop/cop/style/redundant_self_assignment_branch.rb
762
768
  - lib/rubocop/cop/style/redundant_sort.rb
763
769
  - lib/rubocop/cop/style/redundant_sort_by.rb
764
770
  - lib/rubocop/cop/style/regexp_literal.rb
@@ -883,7 +889,7 @@ metadata:
883
889
  homepage_uri: https://rubocop.org/
884
890
  changelog_uri: https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md
885
891
  source_code_uri: https://github.com/rubocop/rubocop/
886
- documentation_uri: https://docs.rubocop.org/rubocop/1.18/
892
+ documentation_uri: https://docs.rubocop.org/rubocop/1.19/
887
893
  bug_tracker_uri: https://github.com/rubocop/rubocop/issues
888
894
  post_install_message:
889
895
  rdoc_options: []