Skip to content

Commit a9d2a44

Browse files
committed
Add method definition AST
1 parent f0c02da commit a9d2a44

File tree

5 files changed

+84
-2
lines changed

5 files changed

+84
-2
lines changed

lib/rbs.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
require "rbs/ast/ruby/helpers/constant_helper"
2929
require "rbs/ast/ruby/helpers/location_helper"
3030
require "rbs/ast/ruby/declarations"
31+
require "rbs/ast/ruby/members"
3132
require "rbs/source"
3233
require "rbs/inline_parser"
3334
require "rbs/environment"

lib/rbs/ast/ruby/members.rb

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# frozen_string_literal: true
2+
3+
module RBS
4+
module AST
5+
module Ruby
6+
module Members
7+
class Base
8+
attr_reader :buffer
9+
10+
def initialize(buffer)
11+
@buffer = buffer
12+
end
13+
14+
include Helpers::LocationHelper
15+
end
16+
17+
class DefMember < Base
18+
Overload = AST::Members::MethodDefinition::Overload
19+
20+
attr_reader :name
21+
attr_reader :node
22+
23+
def initialize(buffer, name, node)
24+
super(buffer)
25+
@name = name
26+
@node = node
27+
end
28+
29+
def location
30+
rbs_location(node.location)
31+
end
32+
33+
def overloads
34+
method_type = MethodType.new(
35+
type_params: [],
36+
type: Types::UntypedFunction.new(return_type: Types::Bases::Any.new(location: nil)),
37+
block: nil,
38+
location: nil
39+
)
40+
41+
[
42+
Overload.new(method_type: method_type, annotations: [])
43+
]
44+
end
45+
end
46+
end
47+
end
48+
end
49+
end

lib/rbs/environment.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,8 @@ def resolve_ruby_decl(resolver, decl, context:, prefix:)
672672
case member
673673
when AST::Ruby::Declarations::Base
674674
resolved.members << resolve_ruby_decl(resolver, member, context: inner_context, prefix: inner_prefix)
675+
when AST::Ruby::Members::Base
676+
resolved.members << member
675677
else
676678
raise "Unknown member type: #{member.class}"
677679
end

sig/ast/ruby/declarations.rbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module RBS
1414
end
1515

1616
class ClassDecl < Base
17-
type member = t
17+
type member = t | Members::t
1818

1919
attr_reader class_name: TypeName
2020

@@ -35,7 +35,7 @@ module RBS
3535
end
3636

3737
class ModuleDecl < Base
38-
type member = t
38+
type member = t | Members::t
3939

4040
attr_reader module_name: TypeName
4141

sig/ast/ruby/members.rbs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
module RBS
2+
module AST
3+
module Ruby
4+
module Members
5+
class Base
6+
attr_reader buffer: Buffer
7+
8+
def initialize: (Buffer) -> void
9+
10+
include Helpers::LocationHelper
11+
end
12+
13+
type t = DefMember
14+
15+
class DefMember < Base
16+
class Overload = AST::Members::MethodDefinition::Overload
17+
18+
attr_reader name: Symbol
19+
attr_reader node: Prism::DefNode
20+
21+
def initialize: (Buffer, Symbol name, Prism::DefNode node) -> void
22+
23+
def location: () -> Location
24+
25+
def overloads: () -> Array[Overload]
26+
end
27+
end
28+
end
29+
end
30+
end

0 commit comments

Comments
 (0)