brew/Library/Homebrew/ignorable.rb
Issy Long 0e81efcccb
sorbet: Comment more files that can't be strict because of undef
- Found with
  `grep -rL "# typed: strict" Library/Homebrew | xargs grep -l "undef "`.
- This stops people from trying to bump them and
  getting an error that they can't fix because
  [it's a Sorbet limitation](https://sorbet.org/docs/error-reference#3008),
  wasting contributor time.
2024-08-09 18:23:00 +01:00

54 lines
1.2 KiB
Ruby

# typed: true # This cannot be `# typed: strict` due to the use of `undef`.
# frozen_string_literal: true
require "warnings"
Warnings.ignore(/warning: callcc is obsolete; use Fiber instead/) do
require "continuation"
end
# Provides the ability to optionally ignore errors raised and continue execution.
module Ignorable
# Marks exceptions which can be ignored and provides
# the ability to jump back to where it was raised.
module ExceptionMixin
attr_accessor :continuation
def ignore
continuation.call
end
end
def self.hook_raise
Object.class_eval do
alias_method :original_raise, :raise
def raise(*)
callcc do |continuation|
super
rescue Exception => e # rubocop:disable Lint/RescueException
unless e.is_a?(ScriptError)
e.extend(ExceptionMixin)
T.cast(e, ExceptionMixin).continuation = continuation
end
super(e)
end
end
alias_method :fail, :raise
end
return unless block_given?
yield
unhook_raise
end
def self.unhook_raise
Object.class_eval do
alias_method :raise, :original_raise
alias_method :fail, :original_raise
undef :original_raise
end
end
end