Behavior of HasType and HasInterface is counter-intuitive
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Bắt đầu trong markers/markers.go, đặc biệt là If và cách nó sử dụng UnwrapOnce, sau đó so sánh hành vi duyệt của HasType và HasInterface với Is và As đối với multi-errors. Xem lại bối cảnh kiểm thử dựa trên thuộc tính trong Sourcegraph PR 62992. Được xem là hoàn tất khi sự khác biệt trong hành vi duyệt được giải quyết hoặc ghi lại tài liệu, đồng thời bổ sung coverage cho hành vi đã chọn.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Both of these functions call If which does a traversal of the causal chain, it does not traverse the full tree. Specifically, If internally calls UnwrapOnce and doesn't handle the multi-error case, whereas functions like Is and As separately handle the multi-error case.
This leads to counter-intuitive behavior; you can have a value x of type T, and errors.Is(err, x) may be true, but errors.HasType(err, T{}) may fail.
I noticed this behavior while trying to add property-based tests to better understand the behavior of HasType here. https://github.com/sourcegraph/sourcegraph/pull/62992
It would be valuable to either:
- Change the implementation of
Ifto traverse the full tree - OR Add a separate function which does a tree traversal (not just the "causal chain") and use that from
HasTypeandHasInterface - OR Add a cautionary warning to
HasTypeandHasInterface's docs which describe the behavior in the presence of multi-errors.
- Ngôn ngữ chính
- Go
- Star
- 2.5k
- Fork
- 75
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
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.
Issue khác của cockroachdb/errors
-
Errors returned from Join are incompatible with errors returned the standard lib's errors.Join Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 52/100
cockroachdb/errors#162 · 1 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 48/100
cockroachdb/errors#156 · 20 reaction ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
cockroachdb/errors#155 · 1 bình luận · 1 reaction ·
-
move subpackages to internal Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
cockroachdb/errors#146 ·
-
Gogoprotobuf replacement Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
cockroachdb/errors#138 · 4 bình luận · 2 reaction ·
Tất cả issue của cockroachdb/errors
Issue tương tự
-
textual definition
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
geneontology/go-ontology#32653 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
-
needs design
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Priority/High ready-for-agent Severity/Major Type/Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100