lib/spoom/sorbet.rb in spoom-1.1.16 vs lib/spoom/sorbet.rb in spoom-1.2.0
- old
+ new
@@ -37,126 +37,7 @@
GEM_PATH = T.let(Gem::Specification.find_by_name("sorbet-static").full_gem_path, String)
BIN_PATH = T.let((Pathname.new(GEM_PATH) / "libexec" / "sorbet").to_s, String)
KILLED_CODE = 137
SEGFAULT_CODE = 139
-
- class << self
- extend T::Sig
-
- sig do
- params(
- arg: String,
- path: String,
- capture_err: T::Boolean,
- sorbet_bin: T.nilable(String),
- ).returns(ExecResult)
- end
- def srb(*arg, path: ".", capture_err: false, sorbet_bin: nil)
- if sorbet_bin
- arg.prepend(sorbet_bin)
- else
- arg.prepend("bundle", "exec", "srb")
- end
- result = Spoom.exec(*T.unsafe(arg), path: path, capture_err: capture_err)
-
- case result.exit_code
- when KILLED_CODE
- raise Error::Killed.new("Sorbet was killed.", result)
- when SEGFAULT_CODE
- raise Error::Segfault.new("Sorbet segfaulted.", result)
- end
-
- result
- end
-
- sig do
- params(
- arg: String,
- path: String,
- capture_err: T::Boolean,
- sorbet_bin: T.nilable(String),
- ).returns(ExecResult)
- end
- def srb_tc(*arg, path: ".", capture_err: false, sorbet_bin: nil)
- arg.prepend("tc") unless sorbet_bin
- srb(*T.unsafe(arg), path: path, capture_err: capture_err, sorbet_bin: sorbet_bin)
- end
-
- # List all files typechecked by Sorbet from its `config`
- sig { params(config: Config, path: String).returns(T::Array[String]) }
- def srb_files(config, path: ".")
- regs = config.ignore.map { |string| Regexp.new(Regexp.escape(string)) }
- exts = config.allowed_extensions.empty? ? [".rb", ".rbi"] : config.allowed_extensions
- Dir.glob((Pathname.new(path) / "**/*{#{exts.join(",")}}").to_s).reject do |f|
- regs.any? { |re| re.match?(f) }
- end.sort
- end
-
- sig do
- params(
- arg: String,
- path: String,
- capture_err: T::Boolean,
- sorbet_bin: T.nilable(String),
- ).returns(T.nilable(String))
- end
- def srb_version(*arg, path: ".", capture_err: false, sorbet_bin: nil)
- result = T.let(
- T.unsafe(self).srb_tc(
- "--no-config",
- "--version",
- *arg,
- path: path,
- capture_err: capture_err,
- sorbet_bin: sorbet_bin,
- ),
- ExecResult,
- )
- return nil unless result.status
-
- result.out.split(" ")[2]
- end
-
- sig do
- params(
- arg: String,
- path: String,
- capture_err: T::Boolean,
- sorbet_bin: T.nilable(String),
- ).returns(T.nilable(T::Hash[String, Integer]))
- end
- def srb_metrics(*arg, path: ".", capture_err: false, sorbet_bin: nil)
- metrics_file = "metrics.tmp"
- metrics_path = "#{path}/#{metrics_file}"
- T.unsafe(self).srb_tc(
- "--metrics-file",
- metrics_file,
- *arg,
- path: path,
- capture_err: capture_err,
- sorbet_bin: sorbet_bin,
- )
- if File.exist?(metrics_path)
- metrics = Spoom::Sorbet::MetricsParser.parse_file(metrics_path)
- File.delete(metrics_path)
- return metrics
- end
- nil
- end
-
- # Get `gem` version from the `Gemfile.lock` content
- #
- # Returns `nil` if `gem` cannot be found in the Gemfile.
- sig { params(gem: String, path: String).returns(T.nilable(String)) }
- def version_from_gemfile_lock(gem: "sorbet", path: ".")
- gemfile_path = "#{path}/Gemfile.lock"
- return nil unless File.exist?(gemfile_path)
-
- content = File.read(gemfile_path).match(/^ #{gem} \(.*(\d+\.\d+\.\d+).*\)/)
- return nil unless content
-
- content[1]
- end
- end
end
end