assertNotContains appears to be messing something up.
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Start with the shortened OmegaTag and testBasic examples in the issue, focusing on the interaction between assertNotContains() and the later assertCount() call. Compare the analysis with and without assertNotContains(); done when the collection is no longer inferred as NEVER and the impossibleType warning is resolved.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
I've got a weird issue that I can't seem to figure out. I think it is a bug in PHPStan, but I'm not certain.
I appreciate if you can point me in a way on how to debug this or help you figure out what is wrong.
Some context first:
- popped up after upgrading PHPStan yesterday, it was not there before. I update very often, so it was a recent change.
- Happens on both PHP8.4 and PHP8.5alpha
- It involves the PHPUnit method "assetNotContains", so I don't think I can create a playground example.
- I tried creating a small repo with an example, but I can't reproduce the error there. I'm not sure why. I used the same phpstan.neon file (just paths changed) and the contents of the classes appear identical to me (except namespaces).
Given this (a bit shortened) test class:
class OmegaTag
{
/**
* @var Collection<array-key, OmegaProduct>
*/
private Collection $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
/**
* @return Collection<array-key, OmegaProduct>
*/
public function getProducts(): Collection
{
return $this->products;
}
}
This (shortened) test:
public function testBasic(): void
{
$product = new OmegaProduct();
$tag = new OmegaTag();
self::assertNotContains($product, $tag->getProducts());
self::assertCount(0, $tag->getProducts());
}
This gives me this error:
Call to static method PHPUnit\Framework\Assert::assertCount() with 0 and *NEVER* will always evaluate to false.
🪪 staticMethod.impossibleType
I'm not sure how PHPStan got to the type *NEVER*.
Observations:
- When I remove the line with the method
assertNotContains, the error goes away. - When I refactor the 2
$tag->getProducts()calls to a single variable and use that in the test, the error is still there.
It seems that assertNotContains narrows the type to never, while I think it should not do that.
Is there any direction you can point me in to find out what is wrong here?
Or is there any more info I can give if you think this is a bug?
- Ngôn ngữ chính
- PHP
- Star
- 544
- Fork
- 58
- Merge trung bình
- 2 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 5
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 phpstan/phpstan-phpunit
-
bug
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 68/100
phpstan/phpstan-phpunit#332 · 2 bình luận ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
phpstan/phpstan-phpunit#321 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
phpstan/phpstan-phpunit#309 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
phpstan/phpstan-phpunit#299 · 2 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 52/100
phpstan/phpstan-phpunit#292 · 3 bình luận ·
Tất cả issue của phpstan/phpstan-phpunit
Issue tương tự
-
jira-created
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 70/100
nunomaduro/phpinsights#745 ·
-
status/awaiting_triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
WordPress/plugin-check#1486 ·
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
az-digital/az_quickstart#6019 ·