現象
サンプルコード
class SampleTest extends TestCase
{
public SampleRepositoryInterface $repository;
public function setUp()
{
parent::setUp();
$this->repository = \Mockery::mock(SampleRepositoryInterface::class);
}
public function test_sample()
{
$this->repository->shouldReceive('getAll')->andReturn([]);
}
}
SampleRepositoryInterface
にshouldReceive
を定義していないので赤線が出る。
解消方法
アノテーションで\Mockery\MockInterface
を指定することでphp-intelephenseがshouldReceive
を認識できるようになる。
/**
* @var SampleRepositoryInterface|\Mockery\MockInterface $repository
* /
public SampleRepositoryInterface $repository;
参考
https://github.com/bmewburn/vscode-intelephense/issues/1784#issuecomment-1208644051
https://github.com/bmewburn/intelephense-docs/blob/master/gettingStarted.md#type-declarations-and-annotations