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)
|
version = if HOMEBREW_BOTTLES_EXTNAME_REGEX.match?(to_s)
|
||||||
begin
|
begin
|
||||||
Utils::Bottles.resolve_version(pathname)
|
Utils::Bottles.resolve_version(pathname).to_s
|
||||||
rescue
|
rescue
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
# typed: true
|
# typed: strict
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "pkg_version"
|
|
||||||
require "version/parser"
|
require "version/parser"
|
||||||
|
|
||||||
# A formula's version.
|
# A formula's version.
|
||||||
@ -141,7 +140,7 @@ class Version
|
|||||||
private_constant :NullToken
|
private_constant :NullToken
|
||||||
|
|
||||||
# Represents the absence of a token.
|
# Represents the absence of a token.
|
||||||
NULL_TOKEN = NullToken.new.freeze
|
NULL_TOKEN = T.let(NullToken.new.freeze, NullToken)
|
||||||
|
|
||||||
# A token string.
|
# A token string.
|
||||||
class StringToken < Token
|
class StringToken < Token
|
||||||
@ -328,7 +327,7 @@ class Version
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
SCAN_PATTERN = Regexp.union(
|
SCAN_PATTERN = T.let(Regexp.union(
|
||||||
AlphaToken::PATTERN,
|
AlphaToken::PATTERN,
|
||||||
BetaToken::PATTERN,
|
BetaToken::PATTERN,
|
||||||
PreToken::PATTERN,
|
PreToken::PATTERN,
|
||||||
@ -337,7 +336,7 @@ class Version
|
|||||||
PostToken::PATTERN,
|
PostToken::PATTERN,
|
||||||
NumericToken::PATTERN,
|
NumericToken::PATTERN,
|
||||||
StringToken::PATTERN,
|
StringToken::PATTERN,
|
||||||
).freeze
|
).freeze, Regexp)
|
||||||
private_constant :SCAN_PATTERN
|
private_constant :SCAN_PATTERN
|
||||||
|
|
||||||
sig { params(url: T.any(String, Pathname), specs: T.untyped).returns(Version) }
|
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)
|
parse(specs.fetch(:tag, url), detected_from_url: true)
|
||||||
end
|
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)
|
def self.parse(spec, detected_from_url: false)
|
||||||
spec = CGI.unescape(spec.to_s) if detected_from_url
|
spec = CGI.unescape(spec.to_s) if detected_from_url
|
||||||
|
|
||||||
@ -359,22 +358,22 @@ class Version
|
|||||||
NULL
|
NULL
|
||||||
end
|
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
|
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
|
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
|
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
|
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
|
private_constant :PRERELEASE_SUFFIX
|
||||||
|
|
||||||
VERSION_PARSERS = [
|
VERSION_PARSERS = T.let([
|
||||||
# date-based versioning
|
# date-based versioning
|
||||||
# e.g. `2023-09-28.tar.gz`
|
# e.g. `2023-09-28.tar.gz`
|
||||||
# e.g. `ltopers-v2017-04-14.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`
|
# e.g. `https://secure.php.net/get/php-7.1.10.tar.bz2/from/this/mirror`
|
||||||
UrlParser.new(/[-.vV]?(#{NUMERIC_WITH_DOTS}#{PRERELEASE_SUFFIX}?)/),
|
UrlParser.new(/[-.vV]?(#{NUMERIC_WITH_DOTS}#{PRERELEASE_SUFFIX}?)/),
|
||||||
].freeze
|
].freeze, T::Array[Version::Parser])
|
||||||
private_constant :VERSION_PARSERS
|
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)
|
def initialize(val, detected_from_url: false)
|
||||||
version = val.to_str
|
version = val.to_str
|
||||||
raise ArgumentError, "Version must not be empty" if version.blank?
|
raise ArgumentError, "Version must not be empty" if version.blank?
|
||||||
|
|
||||||
@version = version
|
@version = T.let(version, String)
|
||||||
@detected_from_url = detected_from_url
|
@detected_from_url = detected_from_url
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -760,7 +759,10 @@ class Version
|
|||||||
|
|
||||||
sig { returns(T::Array[Token]) }
|
sig { returns(T::Array[Token]) }
|
||||||
def tokens
|
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
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -773,5 +775,5 @@ class Version
|
|||||||
# Represents the absence of a version.
|
# Represents the absence of a version.
|
||||||
#
|
#
|
||||||
# NOTE: Constructor needs to called with an arbitrary non-empty version which is then set to `nil`.
|
# 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
|
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