Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Support for interleaved errors

Đang mở
#23 1 bình luận 2 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
30/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
testing

Hướng nghiên cứu

Start by reviewing the linked implementation in tests/mypy_helpers.py and its usage in tests/test_plugin.py, then inspect assertion rewriting in tests/init.py. Compare the proposed interleaved-error format with the current test expectations and determine the required plugin behavior and test coverage before deciding whether the approach can be supported.

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

Mô tả

reporting

Here's what I came up with while trying to replicate mypy's own testcases, which interleave the expected errors in the source code like so:
https://github.com/ikonst/pynamodb-mypy/blob/9453404f576c4ead04749d61eb041e10bec13229/tests/test_plugin.py

The implementation is here:
https://github.com/ikonst/pynamodb-mypy/blob/9453404f576c4ead04749d61eb041e10bec13229/tests/mypy_helpers.py

In a failure case, the failed assertion output will look like:

>       assert actual == expected
E       assert 'from pynamod...ibute "lower"' == 'from pynamodb..._attr.lower()'
E           from pynamodb.attributes import UnicodeAttribute
E           from pynamodb.models import Model
E
E           class MyModel(Model):
E               my_attr = UnicodeAttribute(null=True)
E
E           reveal_type(MyModel.my_attr)  # E: Revealed type is 'pynamodb.attributes._NullableAttribute[pynamodb.attributes.UnicodeAttribute, builtins.str]'
E           reveal_type(MyModel().my_attr)  # E: Revealed type is 'Union[builtins.str*, None]'
E         - MyModel().my_attr.lower()  # E: Item "None" of "Optional[str]" has no attribute "lower"
E         + MyModel().my_attr.lower()

Of course, this requires assertion rewriting, which would've been done in the pytest plugin normally:
https://github.com/ikonst/pynamodb-mypy/blob/9453404f576c4ead04749d61eb041e10bec13229/tests/__init__.py#L3

There are two advantages of interleaving the errors in the test code:

  1. changing the test code does not necessitate updating of line numbers
  2. updating the test code is easier (by diffing the program against the "expected program", i.e. data-driven testing)

Have you considered allowing a similar approach?

Ngôn ngữ chính
Python
Star
257
Fork
33
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

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 realpython/pytest-mypy

Tất cả issue của realpython/pytest-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.