rubocop 1.63.2 → 1.63.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3c5597599c7a09fcfeb128009d782a9bd47668a4eb373663498e1dd7ca0acb0
4
- data.tar.gz: 3a24d87aef2c8900f5d39634234f900c33526b55a7c54f0a0937e7a195a672d0
3
+ metadata.gz: 2ab31c2b6de065412f4c0afc266d9bd51faee5cd9484b4d1e946e11a73b541ce
4
+ data.tar.gz: 96790c810a69221d562ddf61c7de5745b7caad26ac626f68db05fadb11889c21
5
5
  SHA512:
6
- metadata.gz: c6ac27979bc5f662289a0e784985895f33610976405d23fc3d75424b2e3fe40f781b7228e07f9b2c4c8e9a8e9a93b3e4c60a88597de3616eab9f07df0f5de116
7
- data.tar.gz: a5b834be33ea4c0f43c599d21da832bc7ca8927b1271101511de2b6f65ed9418f95140e8ad1902c80b8629bf29c5e0cdeba700b5e9abae9f311ea9ff9acf00bb
6
+ metadata.gz: 4d9a25c6992dc1c13fe2ed1118f3bdb6bea50e5bbeaf929c5efffc2bba444a0a2c00a9bff0ea9cc606015be873d3ff7a8dc228f823d55b5c59d763111a2c998d
7
+ data.tar.gz: 25651a0fb7709f6842a5451310f64033cd5080f8af99dfb2c587b726970d56dcb1473fcbce810867a1a5fc06d787977977508dadd5f7cd9d678e4e925b8b7761
@@ -48,11 +48,19 @@ module RuboCop
48
48
  source_buffer = Parser::Source::Buffer.new(@filename)
49
49
  source_buffer.source = File.read(@filename, encoding: Encoding::UTF_8)
50
50
  offenses.map! do |o|
51
- location = Parser::Source::Range.new(source_buffer,
52
- o['location']['begin_pos'],
53
- o['location']['end_pos'])
51
+ location = location_from_source_buffer(o, source_buffer)
54
52
  Cop::Offense.new(o['severity'], location, o['message'], o['cop_name'], o['status'].to_sym)
55
53
  end
56
54
  end
55
+
56
+ def location_from_source_buffer(offense, source_buffer)
57
+ begin_pos = offense['location']['begin_pos']
58
+ end_pos = offense['location']['end_pos']
59
+ if begin_pos.zero? && end_pos.zero?
60
+ Cop::Offense::NO_LOCATION
61
+ else
62
+ Parser::Source::Range.new(source_buffer, begin_pos, end_pos)
63
+ end
64
+ end
57
65
  end
58
66
  end
@@ -46,7 +46,7 @@ module RuboCop
46
46
  /\A(does not|doesn't) (register|find|flag|report)/ => 'registers',
47
47
  /\A(does not|doesn't) add (a|an|any )?offense/ => 'registers an offense',
48
48
  /\Aregisters no offense/ => 'registers an offense',
49
- /\Aaccepts\b/ => 'registers'
49
+ /\A(accepts|register)\b/ => 'registers'
50
50
  }.freeze
51
51
 
52
52
  EXPECT_NO_CORRECTIONS_DESCRIPTION_MAPPING = {
@@ -52,7 +52,7 @@ module RuboCop
52
52
  # @!method deprecated_class_method?(node)
53
53
  def_node_matcher :deprecated_class_method?, <<~PATTERN
54
54
  {
55
- (send (const {cbase nil?} {:ENV}) {:clone :dup :freeze})
55
+ (send (const {cbase nil?} :ENV) {:clone :dup :freeze})
56
56
  (send (const {cbase nil?} {:File :Dir}) :exists? _)
57
57
  (send (const {cbase nil?} :Socket) {:gethostbyaddr :gethostbyname} ...)
58
58
  (send nil? :attr _ boolean)
@@ -71,7 +71,7 @@ module RuboCop
71
71
  expressions.any? { |expr| flow_expression?(expr) }
72
72
  when :if
73
73
  check_if(node)
74
- when :case
74
+ when :case, :case_match
75
75
  check_case(node)
76
76
  else
77
77
  false
@@ -89,7 +89,9 @@ module RuboCop
89
89
  return false unless else_branch
90
90
  return false unless flow_expression?(else_branch)
91
91
 
92
- node.when_branches.all? { |branch| branch.body && flow_expression?(branch.body) }
92
+ branches = node.case_type? ? node.when_branches : node.in_pattern_branches
93
+
94
+ branches.all? { |branch| branch.body && flow_expression?(branch.body) }
93
95
  end
94
96
  end
95
97
  end
@@ -137,7 +137,9 @@ module RuboCop
137
137
  # do_something \
138
138
  # argument
139
139
  def method_with_argument?(current_token, next_token)
140
- current_token.type == :tIDENTIFIER && ARGUMENT_TYPES.include?(next_token.type)
140
+ return false if current_token.type != :tIDENTIFIER && current_token.type != :kRETURN
141
+
142
+ ARGUMENT_TYPES.include?(next_token.type)
141
143
  end
142
144
 
143
145
  # rubocop:disable Metrics/AbcSize
@@ -7,12 +7,12 @@ module RuboCop
7
7
  #
8
8
  # @example
9
9
  # # bad
10
- # Foo.send(:bar)
11
- # quuz.send(:fred)
10
+ # Foo.send(bar)
11
+ # quuz.send(fred)
12
12
  #
13
13
  # # good
14
- # Foo.__send__(:bar)
15
- # quuz.public_send(:fred)
14
+ # Foo.__send__(bar)
15
+ # quuz.public_send(fred)
16
16
  class Send < Base
17
17
  MSG = 'Prefer `Object#__send__` or `Object#public_send` to `send`.'
18
18
  RESTRICT_ON_SEND = %i[send].freeze
@@ -77,7 +77,7 @@ module RuboCop
77
77
 
78
78
  # @!method define_method_block?(node)
79
79
  def_node_matcher :define_method_block?, <<~PATTERN
80
- ({block numblock} (send _ {:define_method} _) ...)
80
+ ({block numblock} (send _ :define_method _) ...)
81
81
  PATTERN
82
82
  end
83
83
  end
@@ -1,5 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ begin
4
+ # We might not be running with `bundle exec`, so we need to pull in Bundler ourselves,
5
+ # in order to use `Bundler::LockfileParser`.
6
+ require 'bundler'
7
+ rescue LoadError
8
+ nil
9
+ end
10
+
3
11
  module RuboCop
4
12
  # Encapsulation of a lockfile for use when checking for gems.
5
13
  # Does not actually resolve gems, just parses the lockfile.
@@ -7,7 +15,11 @@ module RuboCop
7
15
  class Lockfile
8
16
  # @param [String, Pathname, nil] lockfile_path
9
17
  def initialize(lockfile_path = nil)
10
- lockfile_path ||= Bundler.default_lockfile if bundler_lock_parser_defined?
18
+ lockfile_path ||= begin
19
+ ::Bundler.default_lockfile if bundler_lock_parser_defined?
20
+ rescue ::Bundler::GemfileNotFound
21
+ nil # We might not be a folder with a Gemfile, but that's okay.
22
+ end
11
23
 
12
24
  @lockfile_path = lockfile_path
13
25
  end
@@ -60,7 +72,7 @@ module RuboCop
60
72
  def parser
61
73
  return @parser if defined?(@parser)
62
74
 
63
- @parser = if @lockfile_path
75
+ @parser = if @lockfile_path && bundler_lock_parser_defined?
64
76
  begin
65
77
  lockfile = ::Bundler.read_file(@lockfile_path)
66
78
  ::Bundler::LockfileParser.new(lockfile) if lockfile
@@ -73,9 +73,7 @@ module RuboCop
73
73
  end
74
74
 
75
75
  handle 'textDocument/diagnostic' do |request|
76
- doc = request[:params][:textDocument]
77
- result = diagnostic(doc[:uri], doc[:text])
78
- @server.write(result)
76
+ # no-op, diagnostics are handled in textDocument/didChange
79
77
  end
80
78
 
81
79
  handle 'textDocument/didChange' do |request|
@@ -21,6 +21,8 @@ module RuboCop
21
21
  # @api private
22
22
  class Server
23
23
  def initialize(config_store)
24
+ $PROGRAM_NAME = "rubocop --lsp #{ConfigFinder.project_root}"
25
+
24
26
  RuboCop::LSP.enable
25
27
 
26
28
  @reader = LanguageServer::Protocol::Transport::Io::Reader.new($stdin)
@@ -573,7 +573,7 @@ module RuboCop
573
573
  'cops. Only valid for --format junit.'],
574
574
  display_only_fail_level_offenses:
575
575
  ['Only output offense messages at',
576
- 'the specified --fail-level or above'],
576
+ 'the specified --fail-level or above.'],
577
577
  display_only_correctable: ['Only output correctable offense messages.'],
578
578
  display_only_safe_correctable: ['Only output safe-correctable offense messages',
579
579
  'when combined with --display-only-correctable.'],
@@ -636,8 +636,8 @@ module RuboCop
636
636
  raise_cop_error: ['Raise cop-related errors with cause and location.',
637
637
  'This is used to prevent cops from failing silently.',
638
638
  'Default is false.'],
639
- profile: 'Profile rubocop',
640
- memory: 'Profile rubocop memory usage'
639
+ profile: 'Profile rubocop.',
640
+ memory: 'Profile rubocop memory usage.'
641
641
  }.freeze
642
642
  end
643
643
  # rubocop:enable Metrics/ModuleLength
@@ -20,10 +20,11 @@ module RuboCop
20
20
  message = 'Infinite loop detected'
21
21
  message += " in #{path}" if path
22
22
  message += " and caused by #{root_cause}" if root_cause
23
- message += ' Hint: Please update to the latest RuboCop version if not already in use,'
24
- message += ' and report a bug if the issue still occurs on this version.'
25
- message += ' Please check the latest version at https://rubygems.org/gems/rubocop'
26
- super(message)
23
+ message += "\n"
24
+ hint = 'Hint: Please update to the latest RuboCop version if not already in use, ' \
25
+ "and report a bug if the issue still occurs on this version.\n" \
26
+ 'Please check the latest version at https://rubygems.org/gems/rubocop.'
27
+ super(Rainbow(message).red + Rainbow(hint).yellow)
27
28
  end
28
29
  end
29
30
 
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '1.63.2'
6
+ STRING = '1.63.4'
7
7
 
8
8
  MSG = '%<version>s (using %<parser_version>s, ' \
9
9
  'rubocop-ast %<rubocop_ast_version>s, ' \
@@ -42,9 +42,9 @@ module RuboCop
42
42
  # @api private
43
43
  def self.parser_version
44
44
  config_path = ConfigFinder.find_config_path(Dir.pwd)
45
- yaml = YAML.safe_load(
46
- File.read(config_path), permitted_classes: [Regexp, Symbol], aliases: true
47
- )
45
+ yaml = Util.silence_warnings do
46
+ ConfigLoader.load_yaml_configuration(config_path)
47
+ end
48
48
 
49
49
  if yaml.dig('AllCops', 'ParserEngine') == 'parser_prism'
50
50
  require 'prism'
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.63.2
4
+ version: 1.63.4
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: 2024-04-16 00:00:00.000000000 Z
13
+ date: 2024-04-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -1032,7 +1032,7 @@ licenses:
1032
1032
  - MIT
1033
1033
  metadata:
1034
1034
  homepage_uri: https://rubocop.org/
1035
- changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.63.2
1035
+ changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.63.4
1036
1036
  source_code_uri: https://github.com/rubocop/rubocop/
1037
1037
  documentation_uri: https://docs.rubocop.org/rubocop/1.63/
1038
1038
  bug_tracker_uri: https://github.com/rubocop/rubocop/issues