0

我的具体案例围绕fakerphp/faker 展开,但我想这个案例可以用于其他库。

如果为 Faker 创建一个带有“提供者”的库,则基本上是创建一个具有某些方法的类,这些方法返回生成的假数据:

namespace Faker\Provider;

class Book extends \Faker\Provider\Base
{
  public function title($nbWords = 5): string
  {
    $sentence = $this->generator->sentence($nbWords);
    return substr($sentence, 0, strlen($sentence) - 1);
  }

  public function ISBN(): string
  {
    return $this->generator->ean13();
  }
}

要将此提供程序添加到 Faker,请调用$faker->addProvider(new \Faker\Provider\Book($faker));.

现在问题来了。

在实际使用这个新的提供者方法时,需要通过 Faker 对象,该对象通过使用__call().

因此,当调用 时$faker->ISBN(),PhpStorm 将不知道该方法ISBN()存在并且它返回一个字符串。

在创建这样的库时,有没有办法通过注释或存根或其他方式提供这种自动完成(甚至可能是静态分析提示)?

4

2 回答 2

0

尝试在 laravel 中为我的语言环境添加提供程序后,我遇到了同样的问题。

我解决这个问题的方法是创建一个类似于 package 生成的文件laravel-ide-helper,用于增强自动完成功能。

在项目的根目录中,我创建了一个名为_ide_helper_faker.php

并添加了以下内容。

<?php

namespace Faker {
    /**
     * @mixin \Faker\Provider\pt_BR\Address
     * @mixin \Faker\Provider\pt_BR\Company
     * @mixin \Faker\Provider\pt_BR\Payment
     * @mixin \Faker\Provider\pt_BR\Person
     * @mixin \Faker\Provider\pt_BR\PhoneNumber
     */
    class Generator {
    }
}

现在 PhpStorm 可以识别来自提供者的方法,甚至可以导航到它们,它只是无法与 PhpStan 一起使用。

于 2022-02-23T18:30:00.883 回答
0

您可以在相应地指示 IDE 的调用上方添加相应的@varPHPDoc 注释。$faker->这是一个例子:

    protected function setUp()
    {
        $faker = new Generator();
        $faker->addProvider(new \Faker\Provider\Book($faker));
        /** @var \Faker\Provider\Book $faker */
        $faker->ISBN();
    }

在这里您可以看到 IDE 正确识别它: 在此处输入图像描述

可悲的是,我现在想不出一种更优雅的方式来解决这个问题。

于 2022-01-25T14:37:25.143 回答