Infering return type as a union of all returns in type-checked functions
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Feature
Note: This is different than #4409 and #6646 which aim to change what is considered "annotated" and which functions are type-checked in the first place.
Mypy currently only type-check a function if its considered "annotated", ie: all parameters are annotated, or the return type is present (required for methods w/o parameters). Whilst mypy obviously can't infer a return type if it doesn't type-check the content of a function, I feel like methods that are checked could have their return type inferred as a union of whatever mypy think the type of the returns are.
Here's a very simple example comparing mypy and pyright/pylance
(same result in CLI)
Pitch
The idea would be to reduce clutter, and reduce the risk of hiding a useful true return type behind a more vague type.
Maybe there's a performance concern for libraries? (mypy having to read more code instead of stopping at a return annotation) How much is it? How much does caching help?
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Không có tệp triển khai hoặc bài kiểm thử nào được nêu tên. Hãy bắt đầu bằng cách lần theo cách mypy quyết định một hàm có được kiểm tra kiểu hay không và cách nó xử lý các chú thích kiểu trả về tường minh, sau đó so sánh hành vi đó với ví dụ của issue và các issue được tham chiếu. Có thể coi là hoàn tất khi các hàm được kiểm tra suy luận một union từ các biểu thức trả về của chúng, đồng thời đã hiểu các ảnh hưởng đối với hiệu năng và caching.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- compilers
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 30/100