| 780 | |
| 781 | |
| 782 | class TypeMeetVisitor(TypeVisitor[ProperType]): |
| 783 | def __init__(self, s: ProperType) -> None: |
| 784 | self.s = s |
| 785 | |
| 786 | def visit_unbound_type(self, t: UnboundType) -> ProperType: |
| 787 | if isinstance(self.s, NoneType): |
| 788 | if state.strict_optional: |
| 789 | return UninhabitedType() |
| 790 | else: |
| 791 | return self.s |
| 792 | elif isinstance(self.s, UninhabitedType): |
| 793 | return self.s |
| 794 | else: |
| 795 | return AnyType(TypeOfAny.special_form) |
| 796 | |
| 797 | def visit_any(self, t: AnyType) -> ProperType: |
| 798 | return self.s |
| 799 | |
| 800 | def visit_union_type(self, t: UnionType) -> ProperType: |
| 801 | if isinstance(self.s, UnionType): |
| 802 | meets: list[Type] = [] |
| 803 | for x in t.items: |
| 804 | for y in self.s.items: |
| 805 | meets.append(meet_types(x, y)) |
| 806 | else: |
| 807 | meets = [meet_types(x, self.s) for x in t.items] |
| 808 | return make_simplified_union(meets) |
| 809 | |
| 810 | def visit_none_type(self, t: NoneType) -> ProperType: |
| 811 | if state.strict_optional: |
| 812 | if isinstance(self.s, NoneType) or ( |
| 813 | isinstance(self.s, Instance) and self.s.type.fullname == "builtins.object" |
| 814 | ): |
| 815 | return t |
| 816 | else: |
| 817 | return UninhabitedType() |
| 818 | else: |
| 819 | return t |
| 820 | |
| 821 | def visit_uninhabited_type(self, t: UninhabitedType) -> ProperType: |
| 822 | return t |
| 823 | |
| 824 | def visit_deleted_type(self, t: DeletedType) -> ProperType: |
| 825 | if isinstance(self.s, NoneType): |
| 826 | if state.strict_optional: |
| 827 | return t |
| 828 | else: |
| 829 | return self.s |
| 830 | elif isinstance(self.s, UninhabitedType): |
| 831 | return self.s |
| 832 | else: |
| 833 | return t |
| 834 | |
| 835 | def visit_erased_type(self, t: ErasedType) -> ProperType: |
| 836 | return self.s |
| 837 | |
| 838 | def visit_type_var(self, t: TypeVarType) -> ProperType: |
| 839 | if isinstance(self.s, TypeVarType) and self.s.id == t.id: |
no outgoing calls
no test coverage detected
searching dependent graphs…