Consider contracts when evaluating Optional

Đang mở
#9,947 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Tính năng
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
devtools

Hướng nghiên cứu

Không có tệp, bài kiểm thử hay điểm vào nào được nêu tên. Hãy bắt đầu bằng cách lập bản đồ cơ chế thu hẹp Optional hiện có của mypy từ các câu lệnh assert và việc tích hợp icontract/deal được đề xuất; hoàn thành có nghĩa là xác định và kiểm thử một tập hợp giới hạn các thuộc tính được suy ra từ contract, chẳng hạn như tính độc quyền.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

feature

While mypy considers assert to infer properties (e.g., is not None for Optional's), it would be great if it could also take contracts into account. Some properties can be easily inferred from contracts, in particular exclusivity.

Here is an example:

@icontract.ensure(lambda result: (result[0] is None) ^ (result[1] is None))
def some_func() -> Tuple[Optional[str], Optional[str]]:
    ...
    return something, errors

...

result, errors = some_func()
if errors is not None:
   ...

# We know here according to the contract that ``result`` can not be None.

The exclusivity is only but one example, and there are many more possible. I don't expect mypy to infer all the possible conclusions, but it would be already very nice to have at least some of the basic properties inferred.

There are a few contracts libraries around (e.g., icontract, for which I am the main author and maintainer, or deal) and they are gaining slowly some popularity.

I would be glad to help out on integration with icontract.

Ngôn ngữ chính
Python
Star
20.6k
Fork
3.3k
Merge trung bình
1 ngày 18 giờ
Pull request đã merge (30 ngày)
54

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của python/mypy

Tất cả issue của python/mypy

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.