dependabot-julia 0.357.0 → 0.358.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: 76fe4785dc95ee847322f2673a67df374eb0d2eebf5a740b966f1c487e2e6375
4
- data.tar.gz: 174617969c5b36d6aa341f23c310c125794a095a61e3f7de457a874542a8dfb5
3
+ metadata.gz: c442b3d384670e44fdceb57d184f86c67f0568580c773a9edad960cd664e0e18
4
+ data.tar.gz: 94bb9140bec5fa998ccc894c452a8a2a13e77450830a101ae3bc3a0e100e8b28
5
5
  SHA512:
6
- metadata.gz: 6240ebc3636af1e5b52bf4c18090800555593aa8be82aa4a567f6b4802eec283d103618d135a08ee8b62b695e182f7d245dd8d367c93c7120a5060fb7ec03fa9
7
- data.tar.gz: df44056fe3096eabd8ba8ff3ce42445cf7c1a68d8f2c3b795c58c12fa0dc7386cc460613033f2598c63463ffa1668ce75c4ade3b7d5357bf3e39212c1d120bc6
6
+ metadata.gz: 05b7acbb49fb4ed7f759de5c554d5a5daf4d005aaba74296a21ef6e8ede74577828ff6fe5a83aa129d78b58d0765ce175e0fa23fd77a742d1587418978524fe9
7
+ data.tar.gz: 86d1919b0c98ec0b083f876ca7db6d737e967c2e459b9a8e2353d8f640bf67f9b2b33ed90c260ea4013bfadf4bbc1feea97680359325816363a6b1d40638d50b
@@ -30,8 +30,14 @@ module Dependabot
30
30
 
31
31
  sig { params(constraints: T::Array[String]).returns(T::Boolean) }
32
32
  def self.compound_constraint?(constraints)
33
- # Compound constraints (e.g., ">= 1.0, < 2.0") have operators and multiple parts
34
- constraints.length > 1 && constraints.any? { |c| c.match?(/^[<>=~^]/) }
33
+ # Compound constraints (e.g., ">= 1.0, < 2.0") are when explicit comparison operators
34
+ # (>=, <=, <, >, =) work together to define a single range.
35
+ # Separate constraints (e.g., "^1.10, 2" or "0.34, 0.35") use version specs
36
+ # (with or without ^/~) as OR conditions - any matching spec is acceptable.
37
+ # Only treat as compound if ALL constraints use explicit comparison operators.
38
+ return false if constraints.length <= 1
39
+
40
+ constraints.all? { |c| c.match?(/^[<>=]/) }
35
41
  end
36
42
 
37
43
  sig { params(constraints: T::Array[String]).returns(T::Array[Dependabot::Julia::Requirement]) }
@@ -74,51 +80,56 @@ module Dependabot
74
80
  [constraint]
75
81
  end
76
82
 
83
+ sig { params(version_string: String).returns([String, Integer, Integer, Integer, Integer]) }
84
+ private_class_method def self.parse_version_parts(version_string)
85
+ parts = version_string.split(".")
86
+ [
87
+ version_string,
88
+ parts.length,
89
+ T.must(parts[0]).to_i,
90
+ parts[1].to_i,
91
+ parts[2].to_i
92
+ ]
93
+ end
94
+
95
+ sig { params(major: Integer, minor: Integer, patch: Integer, num_parts: Integer).returns(String) }
96
+ private_class_method def self.caret_upper_bound(major, minor, patch, num_parts)
97
+ # Julia caret semantics: upper bound determined by left-most non-zero digit
98
+ return "#{major + 1}.0.0" if major.positive?
99
+ return "0.#{minor + 1}.0" if minor.positive?
100
+ return "0.0.#{patch + 1}" if num_parts == 3
101
+ return "0.1.0" if num_parts == 2
102
+
103
+ "1.0.0"
104
+ end
105
+
77
106
  sig { params(constraint: String).returns(T::Array[String]) }
78
107
  private_class_method def self.normalize_caret_constraint(constraint)
79
- version = T.must(constraint[1..-1])
80
- parts = version.split(".")
81
- major = T.must(parts[0]).to_i
82
- minor = parts[1].to_i
83
- patch = parts[2].to_i
84
-
85
- # Julia caret semantics:
86
- # - For 0.0.x: compatible within patch (e.g., 0.0.5 -> 0.0.x, < 0.0.6 or < 0.1.0?)
87
- # - For 0.x.y: compatible within minor (e.g., 0.34.6 -> 0.34.x, < 0.35.0)
88
- # - For x.y.z (x > 0): compatible within major (e.g., 1.2.3 -> 1.x.x, < 2.0.0)
89
- if major.zero? && minor.zero?
90
- # 0.0.x versions: bump patch
91
- [">= #{version}", "< 0.0.#{patch + 1}"]
92
- elsif major.zero?
93
- # 0.x.y versions: bump minor (0.34.6 -> < 0.35.0)
94
- [">= #{version}", "< 0.#{minor + 1}.0"]
95
- else
96
- # x.y.z versions where x > 0: bump major
97
- [">= #{version}", "< #{major + 1}.0.0"]
98
- end
108
+ version, num_parts, major, minor, patch = parse_version_parts(T.must(constraint[1..-1]))
109
+
110
+ # Julia caret semantics (from https://pkgdocs.julialang.org/v1/compatibility/):
111
+ # ^1.2.3 -> [1.2.3, 2.0.0), ^0.2.3 -> [0.2.3, 0.3.0), ^0.0.3 -> [0.0.3, 0.0.4)
112
+ # ^0.0 -> [0.0.0, 0.1.0), ^0 -> [0.0.0, 1.0.0)
113
+ [">= #{version}", "< #{caret_upper_bound(major, minor, patch, num_parts)}"]
114
+ end
115
+
116
+ sig { params(major: Integer, minor: Integer, patch: Integer, num_parts: Integer).returns(String) }
117
+ private_class_method def self.tilde_upper_bound(major, minor, patch, num_parts)
118
+ # Julia tilde semantics: ~1 equivalent to ^1, otherwise bump minor (except 0.0.x bumps patch)
119
+ return "#{major + 1}.0.0" if num_parts == 1
120
+ return "0.0.#{patch + 1}" if major.zero? && minor.zero? && num_parts == 3
121
+ return "0.1.0" if major.zero? && minor.zero?
122
+
123
+ "#{major}.#{minor + 1}.0"
99
124
  end
100
125
 
101
126
  sig { params(constraint: String).returns(T::Array[String]) }
102
127
  private_class_method def self.normalize_tilde_constraint(constraint)
103
- version = T.must(constraint[1..-1])
104
- parts = version.split(".")
105
- major = T.must(parts[0]).to_i
106
- minor = parts[1].to_i
107
-
108
- # Julia tilde semantics (similar to npm):
109
- # - For 0.0.x: compatible within patch (same as caret)
110
- # - For 0.x.y or x.y.z: compatible within minor (bump minor)
111
- if major.zero? && minor.zero?
112
- # 0.0.x versions: bump patch
113
- patch = parts[2].to_i
114
- [">= #{version}", "< 0.0.#{patch + 1}"]
115
- elsif major.zero?
116
- # 0.x.y versions: bump minor (same as caret for 0.x)
117
- [">= #{version}", "< 0.#{minor + 1}.0"]
118
- else
119
- # x.y.z versions where x > 0: bump minor only
120
- [">= #{version}", "< #{major}.#{minor + 1}.0"]
121
- end
128
+ version, num_parts, major, minor, patch = parse_version_parts(T.must(constraint[1..-1]))
129
+
130
+ # Julia tilde semantics (from https://pkgdocs.julialang.org/v1/compatibility/):
131
+ # ~1.2.3 -> [1.2.3, 1.3.0), ~1 -> [1.0.0, 2.0.0), ~0.0.3 -> [0.0.3, 0.0.4)
132
+ [">= #{version}", "< #{tilde_upper_bound(major, minor, patch, num_parts)}"]
122
133
  end
123
134
 
124
135
  sig { params(constraint: String).returns(T::Array[String]) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-julia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.357.0
4
+ version: 0.358.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.357.0
18
+ version: 0.358.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.357.0
25
+ version: 0.358.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: debug
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -261,7 +261,7 @@ licenses:
261
261
  - MIT
262
262
  metadata:
263
263
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
264
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.357.0
264
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.358.0
265
265
  rdoc_options: []
266
266
  require_paths:
267
267
  - lib