Merge pull request #16971 from cho-m/language-types
language/*: enable `typed: strict`
This commit is contained in:
commit
1f41dff48f
@ -1,4 +1,4 @@
|
||||
# typed: true
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "resource"
|
||||
@ -12,7 +12,9 @@ module Language
|
||||
# building Go software.
|
||||
# The resource names should be the import name of the package,
|
||||
# e.g. `resource "github.com/foo/bar"`.
|
||||
sig { params(resources: T::Array[Resource], target: T.any(String, Pathname)).void }
|
||||
def self.stage_deps(resources, target)
|
||||
# odeprecated "Language::Go::stage_deps", "or request upstream to migrate to Go modules"
|
||||
if resources.empty?
|
||||
if Homebrew::EnvConfig.developer?
|
||||
odie "Tried to stage empty Language::Go resources array"
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: true
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Language
|
||||
@ -11,6 +11,7 @@ module Language
|
||||
"cache=#{HOMEBREW_CACHE}/npm_cache"
|
||||
end
|
||||
|
||||
sig { returns(String) }
|
||||
def self.pack_for_installation
|
||||
# Homebrew assumes the buildpath/testpath will always be disposable
|
||||
# and from npm 5.0.0 the logic changed so that when a directory is
|
||||
@ -36,11 +37,12 @@ module Language
|
||||
output.lines.last.chomp
|
||||
end
|
||||
|
||||
sig { void }
|
||||
def self.setup_npm_environment
|
||||
# guard that this is only run once
|
||||
return if @env_set
|
||||
|
||||
@env_set = true
|
||||
@env_set = T.let(true, T.nilable(T::Boolean))
|
||||
# explicitly use our npm and node-gyp executables instead of the user
|
||||
# managed ones in HOMEBREW_PREFIX/lib/node_modules which might be broken
|
||||
begin
|
||||
@ -50,6 +52,7 @@ module Language
|
||||
end
|
||||
end
|
||||
|
||||
sig { params(libexec: Pathname).returns(T::Array[String]) }
|
||||
def self.std_npm_install_args(libexec)
|
||||
setup_npm_environment
|
||||
# tell npm to not install .brew_home by adding it to the .npmignore file
|
||||
@ -95,7 +98,7 @@ module Language
|
||||
NODE_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?node( |$)}
|
||||
|
||||
# The length of the longest shebang matching `SHEBANG_REGEX`.
|
||||
NODE_SHEBANG_MAX_LENGTH = "#! /usr/bin/env node ".length
|
||||
NODE_SHEBANG_MAX_LENGTH = T.let("#! /usr/bin/env node ".length, Integer)
|
||||
|
||||
# @private
|
||||
sig { params(node_path: T.any(String, Pathname)).returns(Utils::Shebang::RewriteInfo) }
|
||||
@ -107,8 +110,8 @@ module Language
|
||||
)
|
||||
end
|
||||
|
||||
sig { params(formula: T.untyped).returns(Utils::Shebang::RewriteInfo) }
|
||||
def detected_node_shebang(formula = self)
|
||||
sig { params(formula: Formula).returns(Utils::Shebang::RewriteInfo) }
|
||||
def detected_node_shebang(formula = T.cast(self, Formula))
|
||||
node_deps = formula.deps.map(&:name).grep(/^node(@.+)?$/)
|
||||
raise ShebangDetectionError.new("Node", "formula does not depend on Node") if node_deps.empty?
|
||||
raise ShebangDetectionError.new("Node", "formula has multiple Node dependencies") if node_deps.length > 1
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: true
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Language
|
||||
@ -14,7 +14,7 @@ module Language
|
||||
PERL_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?perl( |$)}
|
||||
|
||||
# The length of the longest shebang matching `SHEBANG_REGEX`.
|
||||
PERL_SHEBANG_MAX_LENGTH = "#! /usr/bin/env perl ".length
|
||||
PERL_SHEBANG_MAX_LENGTH = T.let("#! /usr/bin/env perl ".length, Integer)
|
||||
|
||||
# @private
|
||||
sig { params(perl_path: T.any(String, Pathname)).returns(Utils::Shebang::RewriteInfo) }
|
||||
@ -26,8 +26,8 @@ module Language
|
||||
)
|
||||
end
|
||||
|
||||
sig { params(formula: T.untyped).returns(Utils::Shebang::RewriteInfo) }
|
||||
def detected_perl_shebang(formula = self)
|
||||
sig { params(formula: Formula).returns(Utils::Shebang::RewriteInfo) }
|
||||
def detected_perl_shebang(formula = T.cast(self, Formula))
|
||||
perl_deps = formula.declared_deps.select { |dep| dep.name == "perl" }
|
||||
raise ShebangDetectionError.new("Perl", "formula does not depend on Perl") if perl_deps.empty?
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# typed: true
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Language
|
||||
@ -28,6 +28,12 @@ module Language
|
||||
end
|
||||
end
|
||||
|
||||
sig {
|
||||
params(
|
||||
build: T.any(BuildOptions, Tab),
|
||||
block: T.nilable(T.proc.params(python: String, version: T.nilable(Version)).void),
|
||||
).void
|
||||
}
|
||||
def self.each_python(build, &block)
|
||||
original_pythonpath = ENV.fetch("PYTHONPATH", nil)
|
||||
pythons = { "python@3" => "python3",
|
||||
@ -48,6 +54,7 @@ module Language
|
||||
ENV["PYTHONPATH"] = original_pythonpath
|
||||
end
|
||||
|
||||
sig { params(python: T.any(String, Pathname)).returns(T::Boolean) }
|
||||
def self.reads_brewed_pth_files?(python)
|
||||
return false unless homebrew_site_packages(python).directory?
|
||||
return false unless homebrew_site_packages(python).writable?
|
||||
@ -61,10 +68,12 @@ module Language
|
||||
end
|
||||
end
|
||||
|
||||
sig { params(python: T.any(String, Pathname)).returns(Pathname) }
|
||||
def self.user_site_packages(python)
|
||||
Pathname.new(`#{python} -c "import site; print(site.getusersitepackages())"`.chomp)
|
||||
end
|
||||
|
||||
sig { params(python: T.any(String, Pathname), path: T.any(String, Pathname)).returns(T::Boolean) }
|
||||
def self.in_sys_path?(python, path)
|
||||
script = <<~PYTHON
|
||||
import os, sys
|
||||
@ -102,7 +111,7 @@ module Language
|
||||
PYTHON_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?python(?:[23](?:\.\d{1,2})?)?( |$)}
|
||||
|
||||
# The length of the longest shebang matching `SHEBANG_REGEX`.
|
||||
PYTHON_SHEBANG_MAX_LENGTH = "#! /usr/bin/env pythonx.yyy ".length
|
||||
PYTHON_SHEBANG_MAX_LENGTH = T.let("#! /usr/bin/env pythonx.yyy ".length, Integer)
|
||||
|
||||
# @private
|
||||
sig { params(python_path: T.any(String, Pathname)).returns(Utils::Shebang::RewriteInfo) }
|
||||
@ -254,7 +263,7 @@ module Language
|
||||
sig { params(formula: Formula, venv_root: T.any(String, Pathname), python: T.any(String, Pathname)).void }
|
||||
def initialize(formula, venv_root, python)
|
||||
@formula = formula
|
||||
@venv_root = Pathname.new(venv_root)
|
||||
@venv_root = T.let(Pathname(venv_root), Pathname)
|
||||
@python = python
|
||||
end
|
||||
|
||||
|
||||
@ -15,17 +15,20 @@ RSpec.describe Language::Node do
|
||||
expect(ENV).to receive(:prepend_path)
|
||||
end
|
||||
described_class.instance_variable_set(:@env_set, false)
|
||||
expect(described_class.setup_npm_environment).to be_nil
|
||||
described_class.setup_npm_environment
|
||||
|
||||
expect(described_class.instance_variable_get(:@env_set)).to be(true)
|
||||
without_partial_double_verification do
|
||||
expect(ENV).not_to receive(:prepend_path)
|
||||
end
|
||||
expect(described_class.setup_npm_environment).to be_nil
|
||||
described_class.setup_npm_environment
|
||||
end
|
||||
|
||||
it "does not call prepend_path when node formula does not exist" do
|
||||
expect(described_class.setup_npm_environment).to be_nil
|
||||
without_partial_double_verification do
|
||||
expect(ENV).not_to receive(:prepend_path)
|
||||
end
|
||||
described_class.setup_npm_environment
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user