class Dependabot::Version

def self.correct?(version)

def self.correct?(version)
  return false if version.nil?
  version.to_s.match?(ANCHORED_VERSION_PATTERN)
end

def self.new(version)

def self.new(version)
  T.cast(super, Dependabot::Version)
end

def ignored_major_versions

def ignored_major_versions
  version_parts = to_semver.split(".")
  lower_parts = [version_parts[0].to_i + 1] + [lowest_prerelease_suffix]
  lower_bound = ">= #{lower_parts.join('.')}"
  [lower_bound]
end

def ignored_minor_versions

def ignored_minor_versions
  parts = to_semver.split(".")
  version_parts = parts.fill("0", parts.length...2)
  lower_parts = version_parts.first(1) + [version_parts[1].to_i + 1] + [lowest_prerelease_suffix]
  upper_parts = version_parts.first(0) + [version_parts[0].to_i + 1]
  lower_bound = ">= #{lower_parts.join('.')}"
  upper_bound = "< #{upper_parts.join('.')}"
  ["#{lower_bound}, #{upper_bound}"]
end

def ignored_patch_versions

def ignored_patch_versions
  parts = to_semver.split(".")
  version_parts = parts.fill("0", parts.length...2)
  upper_parts = version_parts.first(1) + [version_parts[1].to_i + 1]
  lower_bound = "> #{to_semver}"
  upper_bound = "< #{upper_parts.join('.')}"
  ["#{lower_bound}, #{upper_bound}"]
end

def initialize(version)

def initialize(version)
  @original_version = T.let(version.to_s, String)
  super
end

def lowest_prerelease_suffix

def lowest_prerelease_suffix
  "a"
end

def semver_parts

def semver_parts
  # Extracts only the numeric major.minor.patch part of the version, ensuring it starts with a number
  match = to_semver.match(/^\d+(?:\.\d+)?(?:\.\d+)?(?=[^\d]|$)/)
  return nil unless match
  first_match = match[0]
  return nil unless first_match
  major, minor, patch = first_match.split(".").map(&:to_i)
  [major || 0, minor || 0, patch || 0]
end

def to_semver

def to_semver
  @original_version
end