Class: Docscribe::Types::RBS::Provider

Inherits:
Object
  • Object
show all
Defined in:
lib/docscribe/types/rbs/provider.rb

Overview

Resolve method signatures from ‘.rbs` files using the official RBS environment and definition builder APIs.

The provider returns Docscribe’s normalized signature model so the rest of the pipeline can stay independent of the underlying signature source.

Instance Method Summary collapse

Constructor Details

#initialize(sig_dirs:, collection_dirs: [], collapse_generics: false, collapse_object_generics: false) ⇒ void

Initialize

Parameters:

  • sig_dirs (Array<String>)

    directories containing ‘.rbs` files

  • collection_dirs (Array<String>) (defaults to: [])

    RBS collection directories

  • collapse_generics (Boolean) (defaults to: false)

    whether generic container types

  • collapse_object_generics (Boolean) (defaults to: false)

    collapse Object generics flag



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/docscribe/types/rbs/provider.rb', line 24

def initialize(sig_dirs:, collection_dirs: [], collapse_generics: false, collapse_object_generics: false)
  require 'rbs'
  @sig_dirs = Array(sig_dirs).map(&:to_s)
  @collection_dirs = Array(collection_dirs).map(&:to_s)
  @collapse_generics = !!collapse_generics
  @collapse_object_generics = !!collapse_object_generics
  @env = nil
  @builder = nil
  @warned = false
  @collection_dropped = false
end

Instance Method Details

#signature_for(container:, scope:, name:) ⇒ Docscribe::Types::MethodSignature?

Look up a normalized method signature from loaded RBS definitions.

Returns nil when the method cannot be resolved or when RBS lookup fails.

Parameters:

  • container (String)

    e.g. “MyModule::MyClass”

  • scope (Symbol)

    :instance or :class

  • name (Symbol, String)

    method name

Returns:

Raises:

  • (::RBS::BaseError)
  • (StandardError)


48
49
50
51
52
53
54
55
56
57
# File 'lib/docscribe/types/rbs/provider.rb', line 48

def signature_for(container:, scope:, name:)
  load_env!
  lookup_signature(container, scope, name)
rescue ::RBS::BaseError => e
  handle_rbs_error(e, 'RBS error')
  nil
rescue StandardError => e
  handle_rbs_error(e, 'RBS integration failed (falling back to inference)')
  nil
end