perl: refactor to align Shebang modules
This primarily reworks `Language::Perl::Shebang` to use constants for the shebang regex and max length (like the previous Node commit) and to extract the `RewriteInfo` call into a separate method (like Python and Node). Besides that, this also adds type signatures to the methods.
This commit is contained in:
parent
d1297c0974
commit
370e61e504
@ -10,24 +10,35 @@ module Language
|
|||||||
module Shebang
|
module Shebang
|
||||||
module_function
|
module_function
|
||||||
|
|
||||||
def detected_perl_shebang(formula = self)
|
# A regex to match potential shebang permutations.
|
||||||
perl_deps = formula.declared_deps.select { |dep| dep.name == "perl" }
|
PERL_SHEBANG_REGEX = %r{^#! ?/usr/bin/(?:env )?perl( |$)}.freeze
|
||||||
perl_path = if perl_deps.present?
|
|
||||||
if perl_deps.any? { |dep| !dep.uses_from_macos? || !dep.use_macos_install? }
|
|
||||||
Formula["perl"].opt_bin/"perl"
|
|
||||||
else
|
|
||||||
"/usr/bin/perl#{MacOS.preferred_perl_version}"
|
|
||||||
end
|
|
||||||
else
|
|
||||||
raise ShebangDetectionError.new("Perl", "formula does not depend on Perl")
|
|
||||||
end
|
|
||||||
|
|
||||||
|
# The length of the longest shebang matching `SHEBANG_REGEX`.
|
||||||
|
PERL_SHEBANG_MAX_LENGTH = "#! /usr/bin/env perl ".length
|
||||||
|
|
||||||
|
# @private
|
||||||
|
sig { params(perl_path: T.any(String, Pathname)).returns(Utils::Shebang::RewriteInfo) }
|
||||||
|
def perl_shebang_rewrite_info(perl_path)
|
||||||
Utils::Shebang::RewriteInfo.new(
|
Utils::Shebang::RewriteInfo.new(
|
||||||
%r{^#! ?/usr/bin/(?:env )?perl( |$)},
|
PERL_SHEBANG_REGEX,
|
||||||
21, # the length of "#! /usr/bin/env perl "
|
PERL_SHEBANG_MAX_LENGTH,
|
||||||
"#{perl_path}\\1",
|
"#{perl_path}\\1",
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
sig { params(formula: T.untyped).returns(Utils::Shebang::RewriteInfo) }
|
||||||
|
def detected_perl_shebang(formula = self)
|
||||||
|
perl_deps = formula.declared_deps.select { |dep| dep.name == "perl" }
|
||||||
|
raise ShebangDetectionError.new("Perl", "formula does not depend on Perl") if perl_deps.empty?
|
||||||
|
|
||||||
|
perl_path = if perl_deps.any? { |dep| !dep.uses_from_macos? || !dep.use_macos_install? }
|
||||||
|
Formula["perl"].opt_bin/"perl"
|
||||||
|
else
|
||||||
|
"/usr/bin/perl#{MacOS.preferred_perl_version}"
|
||||||
|
end
|
||||||
|
|
||||||
|
perl_shebang_rewrite_info(perl_path)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user