 0e81efcccb
			
		
	
	
		0e81efcccb
		
			
		
	
	
	
	
		
			
			- 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.
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			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
 |