version: enable strict typing
This commit is contained in:
parent
3f08c75e7b
commit
1962a37e94
@ -107,7 +107,7 @@ module Homebrew
|
||||
|
||||
version = if HOMEBREW_BOTTLES_EXTNAME_REGEX.match?(to_s)
|
||||
begin
|
||||
Utils::Bottles.resolve_version(pathname)
|
||||
Utils::Bottles.resolve_version(pathname).to_s
|
||||
rescue
|
||||
nil
|
||||
end
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
# typed: true
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "pkg_version"
|
||||
require "version/parser"
|
||||
|
||||
# A formula's version.
|
||||
@ -141,7 +140,7 @@ class Version
|
||||
private_constant :NullToken
|
||||
|
||||
# Represents the absence of a token.
|
||||
NULL_TOKEN = NullToken.new.freeze
|
||||
NULL_TOKEN = T.let(NullToken.new.freeze, NullToken)
|
||||
|
||||
# A token string.
|
||||
class StringToken < Token
|
||||
@ -328,7 +327,7 @@ class Version
|
||||
end
|
||||
end
|
||||
|
||||
SCAN_PATTERN = Regexp.union(
|
||||
SCAN_PATTERN = T.let(Regexp.union(
|
||||
AlphaToken::PATTERN,
|
||||
BetaToken::PATTERN,
|
||||
PreToken::PATTERN,
|
||||
@ -337,7 +336,7 @@ class Version
|
||||
PostToken::PATTERN,
|
||||
NumericToken::PATTERN,
|
||||
StringToken::PATTERN,
|
||||
).freeze
|
||||
).freeze, Regexp)
|
||||
private_constant :SCAN_PATTERN
|
||||
|
||||
sig { params(url: T.any(String, Pathname), specs: T.untyped).returns(Version) }
|
||||
@ -345,7 +344,7 @@ class Version
|
||||
parse(specs.fetch(:tag, url), detected_from_url: true)
|
||||
end
|
||||
|
||||
sig { params(spec: T.any(String, Pathname), detected_from_url: T::Boolean).returns(T.attached_class) }
|
||||
sig { params(spec: T.any(String, Pathname), detected_from_url: T::Boolean).returns(Version) }
|
||||
def self.parse(spec, detected_from_url: false)
|
||||
spec = CGI.unescape(spec.to_s) if detected_from_url
|
||||
|
||||
@ -359,22 +358,22 @@ class Version
|
||||
NULL
|
||||
end
|
||||
|
||||
NUMERIC_WITH_OPTIONAL_DOTS = /(?:\d+(?:\.\d+)*)/.source.freeze
|
||||
NUMERIC_WITH_OPTIONAL_DOTS = T.let(/(?:\d+(?:\.\d+)*)/.source.freeze, String)
|
||||
private_constant :NUMERIC_WITH_OPTIONAL_DOTS
|
||||
|
||||
NUMERIC_WITH_DOTS = /(?:\d+(?:\.\d+)+)/.source.freeze
|
||||
NUMERIC_WITH_DOTS = T.let(/(?:\d+(?:\.\d+)+)/.source.freeze, String)
|
||||
private_constant :NUMERIC_WITH_DOTS
|
||||
|
||||
MINOR_OR_PATCH = /(?:\d+(?:\.\d+){1,2})/.source.freeze
|
||||
MINOR_OR_PATCH = T.let(/(?:\d+(?:\.\d+){1,2})/.source.freeze, String)
|
||||
private_constant :MINOR_OR_PATCH
|
||||
|
||||
CONTENT_SUFFIX = /(?:[._-](?i:bin|dist|stable|src|sources?|final|full))/.source.freeze
|
||||
CONTENT_SUFFIX = T.let(/(?:[._-](?i:bin|dist|stable|src|sources?|final|full))/.source.freeze, String)
|
||||
private_constant :CONTENT_SUFFIX
|
||||
|
||||
PRERELEASE_SUFFIX = /(?:[._-]?(?i:alpha|beta|pre|rc)\.?\d{,2})/.source.freeze
|
||||
PRERELEASE_SUFFIX = T.let(/(?:[._-]?(?i:alpha|beta|pre|rc)\.?\d{,2})/.source.freeze, String)
|
||||
private_constant :PRERELEASE_SUFFIX
|
||||
|
||||
VERSION_PARSERS = [
|
||||
VERSION_PARSERS = T.let([
|
||||
# date-based versioning
|
||||
# e.g. `2023-09-28.tar.gz`
|
||||
# e.g. `ltopers-v2017-04-14.tar.gz`
|
||||
@ -486,15 +485,15 @@ class Version
|
||||
|
||||
# e.g. `https://secure.php.net/get/php-7.1.10.tar.bz2/from/this/mirror`
|
||||
UrlParser.new(/[-.vV]?(#{NUMERIC_WITH_DOTS}#{PRERELEASE_SUFFIX}?)/),
|
||||
].freeze
|
||||
].freeze, T::Array[Version::Parser])
|
||||
private_constant :VERSION_PARSERS
|
||||
|
||||
sig { params(val: T.any(PkgVersion, String, Version), detected_from_url: T::Boolean).void }
|
||||
sig { params(val: T.any(String, Version), detected_from_url: T::Boolean).void }
|
||||
def initialize(val, detected_from_url: false)
|
||||
version = val.to_str
|
||||
raise ArgumentError, "Version must not be empty" if version.blank?
|
||||
|
||||
@version = version
|
||||
@version = T.let(version, String)
|
||||
@detected_from_url = detected_from_url
|
||||
end
|
||||
|
||||
@ -760,7 +759,10 @@ class Version
|
||||
|
||||
sig { returns(T::Array[Token]) }
|
||||
def tokens
|
||||
@tokens ||= version&.scan(SCAN_PATTERN)&.map { |token| Token.create(T.cast(token, String)) } || []
|
||||
@tokens ||= T.let(
|
||||
version&.scan(SCAN_PATTERN)&.map { |token| Token.create(T.cast(token, String)) } || [],
|
||||
T.nilable(T::Array[Token]),
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
@ -773,5 +775,5 @@ class Version
|
||||
# Represents the absence of a version.
|
||||
#
|
||||
# NOTE: Constructor needs to called with an arbitrary non-empty version which is then set to `nil`.
|
||||
NULL = Version.new("NULL").tap { |v| v.instance_variable_set(:@version, nil) }.freeze
|
||||
NULL = T.let(Version.new("NULL").tap { |v| v.instance_variable_set(:@version, nil) }.freeze, Version)
|
||||
end
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
# typed: strict
|
||||
|
||||
class Version
|
||||
# For `alias eql? ==`
|
||||
# See discussions:
|
||||
# - https://github.com/sorbet/sorbet/pull/1443
|
||||
# - https://github.com/sorbet/sorbet/issues/2378
|
||||
sig { params(other: T.untyped).returns(T::Boolean) }
|
||||
def ==(other); end
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user