From 8af2e2719924ca298a287ae7015a7b67d374bfad Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Mon, 9 Sep 2024 14:05:57 +0900 Subject: [PATCH] Logic type is a boolean --- lib/steep/subtyping/check.rb | 5 +---- test/subtyping_test.rb | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/steep/subtyping/check.rb b/lib/steep/subtyping/check.rb index e62d2ca1..e77d3209 100644 --- a/lib/steep/subtyping/check.rb +++ b/lib/steep/subtyping/check.rb @@ -265,9 +265,6 @@ def check_type0(relation) when relation.sub_type.is_a?(AST::Types::Bot) success(relation) - when relation.sub_type.is_a?(AST::Types::Logic::Base) && (true_type?(relation.super_type) || false_type?(relation.super_type)) - success(relation) - when relation.super_type.is_a?(AST::Types::Boolean) Expand(relation) do check_type( @@ -278,7 +275,7 @@ def check_type0(relation) ) end - when relation.sub_type.is_a?(AST::Types::Boolean) + when relation.sub_type.is_a?(AST::Types::Boolean) || relation.sub_type.is_a?(AST::Types::Logic::Base) Expand(relation) do check_type( Relation.new( diff --git a/test/subtyping_test.rb b/test/subtyping_test.rb index 0e554114..93f44e86 100644 --- a/test/subtyping_test.rb +++ b/test/subtyping_test.rb @@ -934,10 +934,20 @@ def test_literal_alias_union def test_logic_type with_checker do |checker| type = AST::Types::Logic::ReceiverIsNil.new() - assert_success_check checker, type, "true" - assert_success_check checker, type, "false" - assert_success_check checker, type, "::TrueClass" - assert_success_check checker, type, "::FalseClass" + + assert_success_check checker, type, "bool" + assert_success_check checker, type, "Object" + assert_success_check checker, type, "Object?" + + assert_fail_check checker, type, "true" + assert_fail_check checker, type, "false" + assert_fail_check checker, type, "::TrueClass" + assert_fail_check checker, type, "::FalseClass" + + assert_fail_check checker, "true", type + assert_fail_check checker, "false", type + assert_fail_check checker, "::TrueClass", type + assert_fail_check checker, "::FalseClass", type end end