From 4dadb7cc316044f8b85c050ecb5561ea29d5be35 Mon Sep 17 00:00:00 2001 From: Yuki Kurihara Date: Thu, 19 Jun 2025 06:48:22 +0000 Subject: [PATCH] Merge pull request #2369 from ksss/subtractor-civar Fix subtraction of civar --- lib/rbs/subtractor.rb | 4 +++- test/rbs/subtractor_test.rb | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/rbs/subtractor.rb b/lib/rbs/subtractor.rb index ed8fa14f1..3d98fba82 100644 --- a/lib/rbs/subtractor.rb +++ b/lib/rbs/subtractor.rb @@ -107,7 +107,9 @@ def call(minuend = @minuend, context: nil) each_member(owner).any? do |m| case m when AST::Members::InstanceVariable - m.name == name + m.name == name && kind == :instance + when AST::Members::ClassInstanceVariable + m.name == name && kind == :singleton when AST::Members::Attribute ivar_name = m.ivar_name == false ? nil : m.ivar_name || :"@#{m.name}" ivar_name == name && m.kind == kind diff --git a/test/rbs/subtractor_test.rb b/test/rbs/subtractor_test.rb index 8d4e9f6e8..0315efdb4 100644 --- a/test/rbs/subtractor_test.rb +++ b/test/rbs/subtractor_test.rb @@ -472,6 +472,34 @@ class C RBS end + def test_civar + decls = to_decls(<<~RBS) + class C + @v1: untyped + self.@v1: untyped + @v2: untyped + self.@v2: untyped + end + RBS + + env = to_env(<<~RBS) + class C + self.@v1: untyped + end + RBS + + subtracted = RBS::Subtractor.new(decls, env).call + + assert_subtracted <<~RBS, subtracted + class C + @v1: untyped + + @v2: untyped + self.@v2: untyped + end + RBS + end + def test_cvar decls = to_decls(<<~RBS) class C