Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/typeprof/core/ast.rb
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,9 @@ def self.create_rbs_member(raw_decl, lenv)
when RBS::AST::Declarations::Base
self.create_rbs_decl(raw_decl, lenv)
when RBS::AST::Members::InstanceVariable
SigInstanceVariableNode.new(raw_decl, lenv)
SigInstanceVariableNode.new(raw_decl, lenv, false)
when RBS::AST::Members::ClassInstanceVariable
SigInstanceVariableNode.new(raw_decl, lenv, true)
else
raise "unsupported: #{ raw_decl.class }"
end
Expand Down
13 changes: 7 additions & 6 deletions lib/typeprof/core/ast/sig_decl.rb
Original file line number Diff line number Diff line change
Expand Up @@ -435,33 +435,34 @@ def install0(genv)
end

class SigInstanceVariableNode < Node
def initialize(raw_decl, lenv)
def initialize(raw_decl, lenv, class_scope)
super(raw_decl, lenv)
@var = raw_decl.name
@cpath = lenv.cref.cpath
@class_scope = class_scope
@type = AST.create_rbs_type(raw_decl.type, lenv)
end

attr_reader :cpath, :type
attr_reader :cpath, :class_scope, :type
def subnodes = { type: }
def attrs = { cpath: }
def attrs = { cpath:, class_scope: }

def define0(genv)
@type.define(genv)
mod = genv.resolve_ivar(cpath, false, @var)
mod = genv.resolve_ivar(cpath, @class_scope, @var)
mod.add_decl(self)
mod
end

def define_copy(genv)
mod = genv.resolve_ivar(cpath, false, @var)
mod = genv.resolve_ivar(cpath, @class_scope, @var)
mod.add_decl(self)
mod.remove_decl(@prev_node)
super(genv)
end

def undefine0(genv)
genv.resolve_ivar(cpath, false, @var).remove_decl(self)
genv.resolve_ivar(cpath, @class_scope, @var).remove_decl(self)
@type.undefine(genv)
end

Expand Down
5 changes: 5 additions & 0 deletions scenario/rbs/ivar.rb
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
## update: test.rbs
class Foo
@foo: String
self.@foo: Integer
end

## update: test.rb
class Foo
def check
@foo
end
def self.check
@foo
end
end

## assert
class Foo
def check: -> String
def self.check: -> Integer
end