Module: RaaP::RBS

Defined in:
lib/raap/rbs.rb

Class Method Summary collapse

Class Method Details

._shift_location(localable, shift) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/raap/rbs.rb', line 48

def self._shift_location(localable, shift)
  return if localable.location.nil?

  l = localable.instance_variable_get("@location")
  localable.instance_variable_set(
    "@location",
    ::RBS::Location.new(
      buffer: ::RBS::Buffer.new(
        name: l.buffer.name,
        content: l.buffer.content[-shift..l.end_pos],
      ),
      start_pos: l.start_pos + shift,
      end_pos: l.end_pos + shift,
    )
  )
  case localable
  when ::RBS::Types::Union
    localable.types.each { |t| _shift_location(t, shift) }
  when ::RBS::Types::Optional
    _shift_location(localable.type, shift)
  end
end

.builderObject



5
6
7
# File 'lib/raap/rbs.rb', line 5

def self.builder
  @builder ||= ::RBS::DefinitionBuilder.new(env: env.resolve_type_names)
end

.envObject



9
10
11
# File 'lib/raap/rbs.rb', line 9

def self.env
  @env ||= ::RBS::Environment.from_loader(loader)
end

.find_alias_decl(type_name, method_name) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/raap/rbs.rb', line 71

def self.find_alias_decl(type_name, method_name)
  env.class_decls[type_name].decls.each do |d|
    d.decl.members.each do |member|
      case member
      when ::RBS::AST::Members::Alias
        return member if member.new_name == method_name
      end
    end
  end

  nil
end

.loaderObject



13
14
15
# File 'lib/raap/rbs.rb', line 13

def self.loader
  @loader ||= ::RBS::CLI::LibraryOptions.new.loader
end

.parse_member(member_type) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/raap/rbs.rb', line 29

def self.parse_member(member_type)
  _, _, decls = ::RBS::Parser.parse_signature(<<~RBS)
    module MemberScope
      #{member_type}
    end
  RBS
  decl = decls.first or raise
  raise unless decl.is_a?(::RBS::AST::Declarations::Module)

  member = decl.members.first or raise
  raise unless member.is_a?(::RBS::AST::Members::Attribute)

  member.tap do |m|
    m = __skip__ = m
    _shift_location(m.type, -m.location.start_pos)
    _shift_location(m, -m.location.start_pos)
  end
end

.parse_method_type(method_type) ⇒ Object

Raises:

  • (ArgumentError)


23
24
25
26
27
# File 'lib/raap/rbs.rb', line 23

def self.parse_method_type(method_type)
  raise ArgumentError, "empty method type" if method_type == ""

  ::RBS::Parser.parse_method_type(method_type, require_eof: true) or raise
end

.parse_type(type) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
# File 'lib/raap/rbs.rb', line 17

def self.parse_type(type)
  raise ArgumentError, "empty type" if type == ""

  ::RBS::Parser.parse_type(type, require_eof: true) or raise
end