Class: RBS::Environment::MultiEntry

Inherits:
Object
  • Object
show all
Defined in:
lib/rbs/environment.rb

Direct Known Subclasses

ClassEntry, ModuleEntry

Constant Summary collapse

D =
_ = Struct.new(:decl, :outer, keyword_init: true) do
  include ContextUtil
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:) ⇒ MultiEntry

Returns a new instance of MultiEntry.



30
31
32
33
# File 'lib/rbs/environment.rb', line 30

def initialize(name:)
  @name = name
  @decls = []
end

Instance Attribute Details

#declsObject (readonly)

Returns the value of attribute decls.



28
29
30
# File 'lib/rbs/environment.rb', line 28

def decls
  @decls
end

#nameObject (readonly)

Returns the value of attribute name.



27
28
29
# File 'lib/rbs/environment.rb', line 27

def name
  @name
end

Instance Method Details

#compatible_params?(ps1, ps2) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
62
63
# File 'lib/rbs/environment.rb', line 59

def compatible_params?(ps1, ps2)
  if ps1.size == ps2.size
    ps1 == AST::TypeParam.rename(ps2, new_names: ps1.map(&:name))
  end
end

#insert(decl:, outer:) ⇒ Object



35
36
37
38
# File 'lib/rbs/environment.rb', line 35

def insert(decl:, outer:)
  decls << D.new(decl: decl, outer: outer)
  @primary = nil
end

#primaryObject



69
70
71
# File 'lib/rbs/environment.rb', line 69

def primary
  raise "Not implemented"
end

#type_paramsObject



65
66
67
# File 'lib/rbs/environment.rb', line 65

def type_params
  primary.decl.type_params
end

#validate_type_paramsObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rbs/environment.rb', line 40

def validate_type_params
  unless decls.empty?
    # @type var hd_decl: MultiEntry::D[module_decl]
    # @type var tl_decls: Array[MultiEntry::D[module_decl]]
    hd_decl, *tl_decls = decls
    raise unless hd_decl

    hd_params = hd_decl.decl.type_params

    tl_decls.each do |tl_decl|
      tl_params = tl_decl.decl.type_params

      unless compatible_params?(hd_params, tl_params)
        raise GenericParameterMismatchError.new(name: name, decl: tl_decl.decl)
      end
    end
  end
end