Module: T::Configuration

Defined in:
lib/types/configuration.rb

Overview

typed: true

Class Method Summary collapse

Class Method Details

.call_validation_error_handler(signature, opts = {}) ⇒ Object



264
265
266
267
268
269
270
271
# File 'lib/types/configuration.rb', line 264

def self.call_validation_error_handler(signature, opts={})
  if @call_validation_error_handler
    @call_validation_error_handler.call(signature, opts)
  else
    call_validation_error_handler_default(signature, opts)
  end
  nil
end

.call_validation_error_handler=(value) ⇒ Object

Set a handler for type errors that result from calling a method.

By default, errors from calling a method cause an exception to be raised. Setting call_validation_error_handler to an object that implements :call (e.g. proc or lambda) allows users to customize the behavior when a method is called with invalid parameters, or returns an invalid value.

Parameters passed to value.call:

@param [T::Private::Methods::Signature] signature Signature that failed @param [Hash] opts A hash containing contextual information on the error: @option opts [String] :message Error message @option opts [String] :kind One of:

['Parameter', 'Block parameter', 'Return value']

@option opts [Symbol] :name Param or block param name (nil for return value) @option opts [Object] :type Expected param/return value type @option opts [Object] :value Actual param/return value @option opts [Thread::Backtrace::Location] :location Location of the caller

Examples:

T::Configuration.call_validation_error_handler = lambda do |signature, opts|
  puts opts[:message]
end

Parameters:

  • value (Lambda, Proc, Object, nil)

    Proc that handles the error report (pass nil to reset to default behavior)



255
256
257
258
# File 'lib/types/configuration.rb', line 255

def self.call_validation_error_handler=(value)
  validate_lambda_given!(value)
  @call_validation_error_handler = value
end

.class_owner_finderObject



474
475
476
# File 'lib/types/configuration.rb', line 474

def self.class_owner_finder
  @class_owner_finder
end

.class_owner_finder=(handler) ⇒ Object

Set to a function which can get the 'owner' of a class. This is used in reporting deserialization errors

produces its owner, or nil if it does not have one.

Parameters:

  • handler (Lambda, Proc, nil)

    Proc that takes a class and



470
471
472
# File 'lib/types/configuration.rb', line 470

def self.class_owner_finder=(handler)
  @class_owner_finder = handler
end

.default_checked_level=(default_checked_level) ⇒ Object

Configure the default checked level for a sig with no explicit .checked builder. When unset, the default checked level is :always.

Note: setting this option is potentially dangerous! Sorbet can't check all code statically. The runtime checks complement the checks that Sorbet does statically, so that methods don't have to guard themselves from being called incorrectly by untyped code.

Parameters:

  • default_checked_level (:never, :tests, :always)


82
83
84
# File 'lib/types/configuration.rb', line 82

def self.default_checked_level=(default_checked_level)
  T::Private::RuntimeLevels.default_checked_level = default_checked_level
end

.disable_legacy_t_enum_migration_modeObject



503
504
505
# File 'lib/types/configuration.rb', line 503

def self.disable_legacy_t_enum_migration_mode
  @legacy_t_enum_migration_mode = false
end

.enable_checking_for_sigs_marked_checked_testsObject

Announces to Sorbet that we are currently in a test environment, so it should treat any sigs which are marked .checked(:tests) as if they were just a normal sig.

If this method is not called, sigs marked .checked(:tests) will not be checked. In fact, such methods won't even be wrapped--the runtime will put back the original method.

Note: Due to the way sigs are evaluated and methods are wrapped, this method MUST be called before any code calls sig. This method raises if it has been called too late.



16
17
18
# File 'lib/types/configuration.rb', line 16

def self.enable_checking_for_sigs_marked_checked_tests
  T::Private::RuntimeLevels.enable_checking_in_tests
end

.enable_final_checks_on_hooksObject

Announce to Sorbet that we would like the final checks to be enabled when including and extending modules. Iff this is not called, then the following example will not raise an error.

module M
  extend T::Sig
  sig(:final) {void}
  def foo; end
end
class C
  include M
  def foo; end
end


35
36
37
# File 'lib/types/configuration.rb', line 35

def self.enable_final_checks_on_hooks
  T::Private::Methods.set_final_checks_on_hooks(true)
end

.enable_legacy_t_enum_migration_modeObject



499
500
501
502
# File 'lib/types/configuration.rb', line 499

def self.enable_legacy_t_enum_migration_mode
  T::Enum.include(T::Enum::LegacyMigrationMode)
  @legacy_t_enum_migration_mode = true
end

.exclude_value_in_type_errorsObject

Configure if type errors excludes the value of the problematic type.

The default is to include values in type errors:

TypeError: Expected type Integer, got String with value "foo"

When values are excluded from type errors:

TypeError: Expected type Integer, got String


63
64
65
# File 'lib/types/configuration.rb', line 63

def self.exclude_value_in_type_errors
  @include_value_in_type_errors = false
end

.hard_assert_handler(str, extra = {}) ⇒ Object



367
368
369
370
371
372
373
# File 'lib/types/configuration.rb', line 367

def self.hard_assert_handler(str, extra={})
  if @hard_assert_handler
    @hard_assert_handler.call(str, extra)
  else
    hard_assert_handler_default(str, extra)
  end
end

.hard_assert_handler=(value) ⇒ Object

Set a handler for hard assertions

These generally should stop execution of the program, and optionally inform some party of the assertion.

Parameters passed to value.call:

@param [String] str Assertion message @param [Hash] extra A hash containing additional parameters to be passed along to the handler.

Examples:

T::Configuration.hard_assert_handler = lambda do |str, extra|
  raise "#{str}, context: #{extra}"
end

Parameters:

  • value (Lambda, Proc, Object, nil)

    Proc that handles the error report (pass nil to reset to default behavior)



358
359
360
361
# File 'lib/types/configuration.rb', line 358

def self.hard_assert_handler=(value)
  validate_lambda_given!(value)
  @hard_assert_handler = value
end

.include_value_in_type_errorsObject

Opposite of exclude_value_in_type_errors. (Including values in type errors is the default)



69
70
71
# File 'lib/types/configuration.rb', line 69

def self.include_value_in_type_errors
  @include_value_in_type_errors = true
end

.include_value_in_type_errors?T::Boolean

Whether to include values in TypeError messages.

Including values is useful for debugging, but can potentially leak sensitive information to logs.

Returns:



52
53
54
# File 'lib/types/configuration.rb', line 52

def self.include_value_in_type_errors?
  @include_value_in_type_errors
end

.inline_type_error_handler(error, opts = {}) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/types/configuration.rb', line 120

def self.inline_type_error_handler(error, opts={})
  if @inline_type_error_handler
    # Backwards compatibility before `inline_type_error_handler` took a second arg
    if @inline_type_error_handler.arity == 1
      @inline_type_error_handler.call(error)
    else
      @inline_type_error_handler.call(error, opts)
    end
  else
    inline_type_error_handler_default(error, opts)
  end
  nil
end

.inline_type_error_handler=(value) ⇒ Object

Set a handler to handle TypeErrors raised by any in-line type assertions, including T.must, T.let, T.cast, and T.assert_type!.

By default, any TypeErrors detected by this gem will be raised. Setting inline_type_error_handler to an object that implements :call (e.g. proc or lambda) allows users to customize the behavior when a TypeError is raised on any inline type assertion.

Parameters passed to value.call:

@param [TypeError] error TypeError that was raised @param [Hash] opts A hash containing contextual information on the error: @option opts [String] :kind One of:

['T.cast', 'T.let', 'T.bind', 'T.assert_type!', 'T.must', 'T.absurd']

@option opts [Object, nil] :type Expected param/return value type @option opts [Object] :value Actual param/return value

Examples:

T::Configuration.inline_type_error_handler = lambda do |error, opts|
  puts error.message
end

Parameters:

  • value (Lambda, Proc, Object, nil)

    Proc that handles the error (pass nil to reset to default behavior)



111
112
113
114
# File 'lib/types/configuration.rb', line 111

def self.inline_type_error_handler=(value)
  validate_lambda_given!(value)
  @inline_type_error_handler = value
end

.legacy_t_enum_migration_mode?Boolean

Returns:



506
507
508
# File 'lib/types/configuration.rb', line 506

def self.legacy_t_enum_migration_mode?
  @legacy_t_enum_migration_mode || false
end

.log_info_handler(str, extra) ⇒ Object



297
298
299
300
301
302
303
# File 'lib/types/configuration.rb', line 297

def self.log_info_handler(str, extra)
  if @log_info_handler
    @log_info_handler.call(str, extra)
  else
    log_info_handler_default(str, extra)
  end
end

.log_info_handler=(value) ⇒ Object

Set a handler for logging

Parameters passed to value.call:

@param [String] str Message to be logged @param [Hash] extra A hash containing additional parameters to be passed along to the logger.

Examples:

T::Configuration.log_info_handler = lambda do |str, extra|
  puts "#{str}, context: #{extra}"
end

Parameters:

  • value (Lambda, Proc, Object, nil)

    Proc that handles the error report (pass nil to reset to default behavior)



288
289
290
291
# File 'lib/types/configuration.rb', line 288

def self.log_info_handler=(value)
  validate_lambda_given!(value)
  @log_info_handler = value
end

.module_name_manglerObject



420
421
422
# File 'lib/types/configuration.rb', line 420

def self.module_name_mangler
  @module_name_mangler || @default_module_name_mangler
end

.module_name_mangler=(handler) ⇒ Object

Set to override the default behavior for converting types to names in generated code. Used by the runtime implementation associated with --sorbet-packages mode.

Parameters:

  • handler (Lambda, Proc, nil)

    Proc that converts a type (Class/Module) to a String (pass nil to reset to default behavior)



430
431
432
# File 'lib/types/configuration.rb', line 430

def self.module_name_mangler=(handler)
  @module_name_mangler = handler
end

.normalize_sensitivity_and_pii_handlerObject



444
445
446
# File 'lib/types/configuration.rb', line 444

def self.normalize_sensitivity_and_pii_handler
  @sensitivity_and_pii_handler
end

.normalize_sensitivity_and_pii_handler=(handler) ⇒ Object

Set to a PII handler function. This will be called with the sensitivity: annotations on things that use T::Props and can modify them ahead-of-time.

prop values. Pass nil to avoid changing sensitivity: annotations.

Parameters:

  • handler (Lambda, Proc, nil)

    Proc that takes a hash mapping symbols to the



440
441
442
# File 'lib/types/configuration.rb', line 440

def self.normalize_sensitivity_and_pii_handler=(handler)
  @sensitivity_and_pii_handler = handler
end

.redaction_handlerObject



460
461
462
# File 'lib/types/configuration.rb', line 460

def self.redaction_handler
  @redaction_handler
end

.redaction_handler=(handler) ⇒ Object

Set to a redaction handling function. This will be called when the _redacted version of a prop reader is used. By default this is set to nil and will raise an exception when the redacted version of a prop is accessed.

redacted version according to the spec passed as the second argument.

Parameters:

  • handler (Lambda, Proc, nil)

    Proc that converts a value into its



456
457
458
# File 'lib/types/configuration.rb', line 456

def self.redaction_handler=(handler)
  @redaction_handler = handler
end

.reset_final_checks_on_hooksObject

Undo the effects of a previous call to enable_final_checks_on_hooks.



41
42
43
# File 'lib/types/configuration.rb', line 41

def self.reset_final_checks_on_hooks
  T::Private::Methods.set_final_checks_on_hooks(false)
end

.scalar_typesObject



408
409
410
# File 'lib/types/configuration.rb', line 408

def self.scalar_types
  @scalar_types || @default_scalar_types
end

.scalar_types=(values) ⇒ Object

Set a list of class strings that are to be considered scalar. (pass nil to reset to default behavior)

Examples:

T::Configuration.scalar_types = ["NilClass", "TrueClass", "FalseClass", ...]

Parameters:

  • values (String)

    Class name.



383
384
385
386
387
388
389
390
391
392
393
394
# File 'lib/types/configuration.rb', line 383

def self.scalar_types=(values)
  if values.nil?
    @scalar_types = values
  else
    bad_values = values.reject { |v| v.class == String }
    unless bad_values.empty?
      raise ArgumentError.new("Provided values must all be class name strings.")
    end

    @scalar_types = values.each_with_object({}) { |x, acc| acc[x] = true }.freeze
  end
end

.sealed_violation_whitelistObject



534
535
536
# File 'lib/types/configuration.rb', line 534

def self.sealed_violation_whitelist
  @sealed_violation_whitelist
end

.sealed_violation_whitelist=(sealed_violation_whitelist) ⇒ Object

Parameters:

  • sealed_violation_whitelist (Array)

    An array of Regexp to validate whether inheriting /including a sealed module outside the defining module should be allowed. Useful to whitelist benign violations, like shim files generated for an autoloader.



515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
# File 'lib/types/configuration.rb', line 515

def self.sealed_violation_whitelist=(sealed_violation_whitelist)
  if !@sealed_violation_whitelist.nil?
    raise ArgumentError.new("Cannot overwrite sealed_violation_whitelist after setting it")
  end

  case sealed_violation_whitelist
  when Array
    sealed_violation_whitelist.each do |x|
      case x
      when Regexp then nil
      else raise TypeError.new("sealed_violation_whitelist accepts an Array of Regexp")
      end
    end
  else
    raise TypeError.new("sealed_violation_whitelist= accepts an Array of Regexp")
  end

  @sealed_violation_whitelist = sealed_violation_whitelist
end

.sig_builder_error_handler(error, location) ⇒ Object



166
167
168
169
170
171
172
173
# File 'lib/types/configuration.rb', line 166

def self.sig_builder_error_handler(error, location)
  if @sig_builder_error_handler
    @sig_builder_error_handler.call(error, location)
  else
    sig_builder_error_handler_default(error, location)
  end
  nil
end

.sig_builder_error_handler=(value) ⇒ Object

Set a handler to handle errors that occur when the builder methods in the body of a sig are executed. The sig builder methods are inside a proc so that they can be lazily evaluated the first time the method being sig'd is called.

By default, improper use of the builder methods within the body of a sig cause an ArgumentError to be raised. Setting sig_builder_error_handler to an object that implements :call (e.g. proc or lambda) allows users to customize the behavior when a sig can't be built for some reason.

Parameters passed to value.call:

@param [StandardError] error The error that was raised @param [Thread::Backtrace::Location] location Location of the error

Examples:

T::Configuration.sig_builder_error_handler = lambda do |error, location|
  puts error.message
end

Parameters:

  • value (Lambda, Proc, Object, nil)

    Proc that handles the error (pass nil to reset to default behavior)



157
158
159
160
# File 'lib/types/configuration.rb', line 157

def self.sig_builder_error_handler=(value)
  validate_lambda_given!(value)
  @sig_builder_error_handler = value
end

.sig_validation_error_handler(error, opts = {}) ⇒ Object



217
218
219
220
221
222
223
224
# File 'lib/types/configuration.rb', line 217

def self.sig_validation_error_handler(error, opts={})
  if @sig_validation_error_handler
    @sig_validation_error_handler.call(error, opts)
  else
    sig_validation_error_handler_default(error, opts)
  end
  nil
end

.sig_validation_error_handler=(value) ⇒ Object

Set a handler to handle sig validation errors.

Sig validation errors include things like abstract checks, override checks, and type compatibility of arguments. They happen after a sig has been successfully built, but the built sig is incompatible with other sigs in some way.

By default, sig validation errors cause an exception to be raised. Setting sig_validation_error_handler to an object that implements :call (e.g. proc or lambda) allows users to customize the behavior when a method signature's build fails.

Parameters passed to value.call:

@param [StandardError] error The error that was raised @param [Hash] opts A hash containing contextual information on the error: @option opts [Method, UnboundMethod] :method Method on which the signature build failed @option opts [T::Private::Methods::Declaration] :declaration Method signature declaration struct @option opts [T::Private::Methods::Signature, nil] :signature Signature that failed (nil if sig build failed before Signature initialization) @option opts [T::Private::Methods::Signature, nil] :super_signature Super method's signature (nil if method is not an override or super method does not have a method signature)

Examples:

T::Configuration.sig_validation_error_handler = lambda do |error, opts|
  puts error.message
end

Parameters:

  • value (Lambda, Proc, Object, nil)

    Proc that handles the error (pass nil to reset to default behavior)



208
209
210
211
# File 'lib/types/configuration.rb', line 208

def self.sig_validation_error_handler=(value)
  validate_lambda_given!(value)
  @sig_validation_error_handler = value
end

.soft_assert_handler(str, extra) ⇒ Object



332
333
334
335
336
337
338
# File 'lib/types/configuration.rb', line 332

def self.soft_assert_handler(str, extra)
  if @soft_assert_handler
    @soft_assert_handler.call(str, extra)
  else
    soft_assert_handler_default(str, extra)
  end
end

.soft_assert_handler=(value) ⇒ Object

Set a handler for soft assertions

These generally shouldn't stop execution of the program, but rather inform some party of the assertion to action on later.

Parameters passed to value.call:

@param [String] str Assertion message @param [Hash] extra A hash containing additional parameters to be passed along to the handler.

Examples:

T::Configuration.soft_assert_handler = lambda do |str, extra|
  puts "#{str}, context: #{extra}"
end

Parameters:

  • value (Lambda, Proc, Object, nil)

    Proc that handles the error report (pass nil to reset to default behavior)



323
324
325
326
# File 'lib/types/configuration.rb', line 323

def self.soft_assert_handler=(value)
  validate_lambda_given!(value)
  @soft_assert_handler = value
end

.without_ruby_warnings { ... } ⇒ Object

Temporarily disable ruby warnings while executing the given block. This is useful when doing something that would normally cause a warning to be emitted in Ruby verbose mode ($VERBOSE = true).

Yields:



484
485
486
487
488
489
490
491
492
493
494
495
496
# File 'lib/types/configuration.rb', line 484

def self.without_ruby_warnings
  if $VERBOSE
    begin
      original_verbose = $VERBOSE
      $VERBOSE = false
      yield
    ensure
      $VERBOSE = original_verbose
    end
  else
    yield
  end
end