dependabot-bundler 0.294.0 → 0.296.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea55f401ee91f93504d7b0c6ef45f14b1d6b3a729830c5090ce31fe309425add
4
- data.tar.gz: 89e1acee2cba3451d660f5cfe54ba52b43ebce4aa8e79399a7ff9ece241c4b93
3
+ metadata.gz: f81229f56a0ef5c8b7c2d61f120e69e5c4b6402549e8fd7479e7b87bd009a66c
4
+ data.tar.gz: 230ebc7b7952bd7e82036ee2637c667b9218f126a8a69218bcd686e365fa0136
5
5
  SHA512:
6
- metadata.gz: ed004691bff5b07c9f3b3e910cc4b2b9d36b067bc012bb1acb76ce2698b0642bdace106c0f91c30891d40faeb61910162b0cc3501c835caec69f06b434f82e23
7
- data.tar.gz: 8aa29af8206e1ec201e040ab59f8580fcd898f970a54bc60babd21179ba15f1d77415a20f3d147423508f5ed331d2daa6fe01f4512dc9deae7378b7642fd719b
6
+ metadata.gz: 7bbf770c8aa7b5c247db7cd6aaecf07a66548bc22b332d403735be3241344d0b6f3ef0b99d5213c61d1c2749bdba0900b4f1edc1a3ab2780048d15e3bb511988
7
+ data.tar.gz: b908e0c861e83a9c5f788a07f75740ce60ec99c335492792ce207fb1f450b50e7a5b3c30dea889156c18b0976ecd1fd68d1f0ec96f2219a6749cf562930cf965
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "sorbet-runtime"
@@ -10,7 +10,7 @@ module Dependabot
10
10
  class GemspecDependencyNameFinder
11
11
  extend T::Sig
12
12
 
13
- ChildNode = T.type_alias { T.nilable(T.any(Parser::AST::Node, Symbol, String)) }
13
+ ChildNode = T.type_alias { T.nilable(T.any(Parser::AST::Node, Symbol, String, Integer, Float)) }
14
14
 
15
15
  sig { returns(String) }
16
16
  attr_reader :gemspec_content
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "parser/current"
@@ -8,6 +8,8 @@ module Dependabot
8
8
  module Bundler
9
9
  class FileUpdater
10
10
  class GemspecSanitizer
11
+ extend T::Sig
12
+
11
13
  UNNECESSARY_ASSIGNMENTS = %i(
12
14
  bindir=
13
15
  cert_chain=
@@ -23,12 +25,15 @@ module Dependabot
23
25
  rdoc_options=
24
26
  ).freeze
25
27
 
28
+ sig { returns(String) }
26
29
  attr_reader :replacement_version
27
30
 
31
+ sig { params(replacement_version: T.any(String, Integer, Gem::Version)).void }
28
32
  def initialize(replacement_version:)
29
- @replacement_version = replacement_version
33
+ @replacement_version = T.let(replacement_version.to_s, String)
30
34
  end
31
35
 
36
+ sig { params(content: String).returns(String) }
32
37
  def rewrite(content)
33
38
  buffer = Parser::Source::Buffer.new("(gemspec_content)")
34
39
  buffer.source = content
@@ -47,10 +52,16 @@ module Dependabot
47
52
  end
48
53
 
49
54
  class Rewriter < Parser::TreeRewriter
55
+ extend T::Sig
56
+
57
+ ParserNode = T.type_alias { T.nilable(T.any(Parser::AST::Node, Symbol, Integer, String, Float)) }
58
+
59
+ sig { params(replacement_version: String).void }
50
60
  def initialize(replacement_version:)
51
61
  @replacement_version = replacement_version
52
62
  end
53
63
 
64
+ sig { params(node: Parser::AST::Node).void }
54
65
  def on_send(node)
55
66
  # Wrap any `require` or `require_relative` calls in a rescue
56
67
  # block, as we might not have the required files
@@ -82,12 +93,15 @@ module Dependabot
82
93
 
83
94
  private
84
95
 
96
+ sig { returns(String) }
85
97
  attr_reader :replacement_version
86
98
 
99
+ sig { params(node: Parser::AST::Node).returns(T::Boolean) }
87
100
  def requires_file?(node)
88
101
  %i(require require_relative).include?(node.children[1])
89
102
  end
90
103
 
104
+ sig { params(node: Parser::AST::Node).void }
91
105
  def wrap_require(node)
92
106
  replace(
93
107
  node.loc.expression,
@@ -98,6 +112,7 @@ module Dependabot
98
112
  )
99
113
  end
100
114
 
115
+ sig { params(node: ParserNode).void }
101
116
  def replace_version_assignments(node)
102
117
  return unless node.is_a?(Parser::AST::Node)
103
118
 
@@ -106,6 +121,7 @@ module Dependabot
106
121
  node.children.each { |child| replace_version_assignments(child) }
107
122
  end
108
123
 
124
+ sig { params(node: ParserNode).void }
109
125
  def replace_version_constant_references(node)
110
126
  return unless node.is_a?(Parser::AST::Node)
111
127
 
@@ -116,6 +132,7 @@ module Dependabot
116
132
  end
117
133
  end
118
134
 
135
+ sig { params(node: ParserNode).void }
119
136
  def replace_file_assignments(node)
120
137
  return unless node.is_a?(Parser::AST::Node)
121
138
 
@@ -124,6 +141,7 @@ module Dependabot
124
141
  node.children.each { |child| replace_file_assignments(child) }
125
142
  end
126
143
 
144
+ sig { params(node: ParserNode).void }
127
145
  def replace_require_paths_assignments(node)
128
146
  return unless node.is_a?(Parser::AST::Node)
129
147
 
@@ -134,6 +152,7 @@ module Dependabot
134
152
  end
135
153
  end
136
154
 
155
+ sig { params(node: ParserNode).returns(T::Boolean) }
137
156
  def node_assigns_to_version_constant?(node)
138
157
  return false unless node.is_a?(Parser::AST::Node)
139
158
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -146,6 +165,7 @@ module Dependabot
146
165
  node_interpolates_version_constant?(node.children.last)
147
166
  end
148
167
 
168
+ sig { params(node: ParserNode).returns(T::Boolean) }
149
169
  def node_assigns_files_to_var?(node)
150
170
  return false unless node.is_a?(Parser::AST::Node)
151
171
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -155,6 +175,7 @@ module Dependabot
155
175
  node_dynamically_lists_files?(node.children[2])
156
176
  end
157
177
 
178
+ sig { params(node: ParserNode).returns(T::Boolean) }
158
179
  def node_dynamically_lists_files?(node)
159
180
  return false unless node.is_a?(Parser::AST::Node)
160
181
 
@@ -163,6 +184,7 @@ module Dependabot
163
184
  node.type == :block && node.children.first&.type == :send
164
185
  end
165
186
 
187
+ sig { params(node: ParserNode).returns(T::Boolean) }
166
188
  def node_assigns_require_paths?(node)
167
189
  return false unless node.is_a?(Parser::AST::Node)
168
190
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -171,6 +193,7 @@ module Dependabot
171
193
  node.children[1] == :require_paths=
172
194
  end
173
195
 
196
+ sig { params(node: ParserNode).void }
174
197
  def replace_file_reads(node)
175
198
  return unless node.is_a?(Parser::AST::Node)
176
199
  return if node.children[1] == :version=
@@ -180,6 +203,7 @@ module Dependabot
180
203
  node.children.each { |child| replace_file_reads(child) }
181
204
  end
182
205
 
206
+ sig { params(node: ParserNode).returns(T::Boolean) }
183
207
  def node_reads_a_file?(node)
184
208
  return false unless node.is_a?(Parser::AST::Node)
185
209
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -189,6 +213,7 @@ module Dependabot
189
213
  node.children[1] == :read
190
214
  end
191
215
 
216
+ sig { params(node: ParserNode).returns(T::Boolean) }
192
217
  def node_uses_readlines?(node)
193
218
  return false unless node.is_a?(Parser::AST::Node)
194
219
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -198,6 +223,7 @@ module Dependabot
198
223
  node.children[1] == :readlines
199
224
  end
200
225
 
226
+ sig { params(node: ParserNode).void }
201
227
  def replace_json_parses(node)
202
228
  return unless node.is_a?(Parser::AST::Node)
203
229
  return if node.children[1] == :version=
@@ -206,6 +232,7 @@ module Dependabot
206
232
  node.children.each { |child| replace_json_parses(child) }
207
233
  end
208
234
 
235
+ sig { params(node: ParserNode).returns(T::Boolean) }
209
236
  def node_parses_json?(node)
210
237
  return false unless node.is_a?(Parser::AST::Node)
211
238
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -215,6 +242,7 @@ module Dependabot
215
242
  node.children[1] == :parse
216
243
  end
217
244
 
245
+ sig { params(node: ParserNode).void }
218
246
  def remove_find_dot_find_args(node)
219
247
  return unless node.is_a?(Parser::AST::Node)
220
248
  return if node.children[1] == :version=
@@ -223,6 +251,7 @@ module Dependabot
223
251
  node.children.each { |child| remove_find_dot_find_args(child) }
224
252
  end
225
253
 
254
+ sig { params(node: ParserNode).returns(T::Boolean) }
226
255
  def node_calls_find_dot_find?(node)
227
256
  return false unless node.is_a?(Parser::AST::Node)
228
257
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -232,6 +261,7 @@ module Dependabot
232
261
  node.children[1] == :find
233
262
  end
234
263
 
264
+ sig { params(node: ParserNode).void }
235
265
  def remove_unnecessary_assignments(node)
236
266
  return unless node.is_a?(Parser::AST::Node)
237
267
 
@@ -247,8 +277,9 @@ module Dependabot
247
277
  end
248
278
  end
249
279
 
280
+ sig { params(node: ParserNode).returns(T::Boolean) }
250
281
  def node_includes_heredoc?(node)
251
- find_heredoc_end_range(node)
282
+ !!find_heredoc_end_range(node)
252
283
  end
253
284
 
254
285
  # Performs a depth-first search for the first heredoc in the given
@@ -256,6 +287,7 @@ module Dependabot
256
287
  #
257
288
  # Returns a Parser::Source::Range identifying the location of the end
258
289
  # of the heredoc, or nil if no heredoc was found.
290
+ sig { params(node: ParserNode).returns(T.nilable(Parser::Source::Range)) }
259
291
  def find_heredoc_end_range(node)
260
292
  return unless node.is_a?(Parser::AST::Node)
261
293
 
@@ -271,6 +303,7 @@ module Dependabot
271
303
  nil
272
304
  end
273
305
 
306
+ sig { params(node: ParserNode).returns(T::Boolean) }
274
307
  def unnecessary_assignment?(node)
275
308
  return false unless node.is_a?(Parser::AST::Node)
276
309
  return false unless node.children.first.is_a?(Parser::AST::Node)
@@ -278,9 +311,10 @@ module Dependabot
278
311
  return true if node.children.first.type == :lvar &&
279
312
  UNNECESSARY_ASSIGNMENTS.include?(node.children[1])
280
313
 
281
- node.children[1] == :[]= && node.children.first.children.last
314
+ !!(node.children[1] == :[]= && node.children.first.children.last)
282
315
  end
283
316
 
317
+ sig { params(node: ParserNode).returns(T::Boolean) }
284
318
  def node_is_version_constant?(node)
285
319
  return false unless node.is_a?(Parser::AST::Node)
286
320
  return false unless node.type == :const
@@ -288,6 +322,7 @@ module Dependabot
288
322
  node.children.last.to_s.match?(/version/i)
289
323
  end
290
324
 
325
+ sig { params(node: ParserNode).returns(T::Boolean) }
291
326
  def node_calls_version_constant?(node)
292
327
  return false unless node.is_a?(Parser::AST::Node)
293
328
  return false unless node.type == :send
@@ -295,6 +330,7 @@ module Dependabot
295
330
  node.children.any? { |n| node_is_version_constant?(n) }
296
331
  end
297
332
 
333
+ sig { params(node: ParserNode).returns(T::Boolean) }
298
334
  def node_interpolates_version_constant?(node)
299
335
  return false unless node.is_a?(Parser::AST::Node)
300
336
  return false unless node.type == :dstr
@@ -305,6 +341,7 @@ module Dependabot
305
341
  .any? { |n| node_is_version_constant?(n) }
306
342
  end
307
343
 
344
+ sig { params(node: Parser::AST::Node).void }
308
345
  def replace_constant(node)
309
346
  case node.children.last&.type
310
347
  when :str, :int then nil # no-op
@@ -318,18 +355,22 @@ module Dependabot
318
355
  end
319
356
  end
320
357
 
358
+ sig { params(node: Parser::AST::Node).void }
321
359
  def replace_file_assignment(node)
322
360
  replace(node.children.last.loc.expression, "[]")
323
361
  end
324
362
 
363
+ sig { params(node: Parser::AST::Node).void }
325
364
  def replace_require_paths_assignment(node)
326
365
  replace(node.children.last.loc.expression, "['lib']")
327
366
  end
328
367
 
368
+ sig { params(node: Parser::AST::Node).void }
329
369
  def replace_file_read(node)
330
370
  replace(node.loc.expression, %("#{replacement_version}"))
331
371
  end
332
372
 
373
+ sig { params(node: Parser::AST::Node).void }
333
374
  def replace_json_parse(node)
334
375
  replace(
335
376
  node.loc.expression,
@@ -337,10 +378,12 @@ module Dependabot
337
378
  )
338
379
  end
339
380
 
381
+ sig { params(node: Parser::AST::Node).void }
340
382
  def replace_file_readlines(node)
341
383
  replace(node.loc.expression, %(["#{replacement_version}"]))
342
384
  end
343
385
 
386
+ sig { params(node: Parser::AST::Node).void }
344
387
  def remove_find_args(node)
345
388
  last_arg = node.children.last
346
389
 
@@ -52,6 +52,9 @@ module Dependabot
52
52
 
53
53
  def force_update
54
54
  requirement = dependency.requirements.find { |req| req[:file] == gemfile.name }
55
+
56
+ valid_gem_version?(target_version)
57
+
55
58
  manifest_requirement_not_satisfied = requirement && !Requirement.satisfied_by?(requirement, target_version)
56
59
 
57
60
  if manifest_requirement_not_satisfied && requirements_update_strategy.lockfile_only?
@@ -80,6 +83,15 @@ module Dependabot
80
83
  end
81
84
  end
82
85
 
86
+ def valid_gem_version?(target_version)
87
+ # to rule out empty, non gem info ending up in as target_version
88
+ return true if target_version.is_a?(Gem::Version)
89
+
90
+ Dependabot.logger.warn("Bundler force update called with a non-Gem::Version #{target_version}")
91
+
92
+ raise Dependabot::DependencyFileNotResolvable
93
+ end
94
+
83
95
  def original_dependencies
84
96
  @original_dependencies ||=
85
97
  FileParser.new(
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.294.0
4
+ version: 0.296.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-23 00:00:00.000000000 Z
11
+ date: 2025-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.294.0
19
+ version: 0.296.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.294.0
26
+ version: 0.296.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: parallel
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -322,7 +322,7 @@ licenses:
322
322
  - MIT
323
323
  metadata:
324
324
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
325
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.294.0
325
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.296.0
326
326
  post_install_message:
327
327
  rdoc_options: []
328
328
  require_paths: