ghostwriter/psalm-sandbox

提供测试 Psalm 插件的框架

0.2.1 2023-08-04 20:49 UTC

README

Compliance Supported PHP Version Mutation Coverage Code Coverage Type Coverage Latest Version on Packagist Downloads

工作正在进行中

警告

该项目尚未完成,仍在开发中。

安装

您可以通过 composer 安装此包

composer require ghostwriter/psalm-sandbox --dev

使用方法

您可以通过扩展 AbstractPsalmSandboxTestCase 类来为您的插件创建测试。

例如:tests/Unit/MyPsalmPluginTest.php

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Unit;

use Ghostwriter\PsalmSandbox\AbstractPsalmSandboxTestCase;
use Psalm\Issue\CodeIssue;
use Psalm\Issue\MissingReturnType;
use Psalm\Plugin\PluginEntryPointInterface;
use Vendor\Package\MyPsalmPlugin;

final class MyPsalmPluginTest extends AbstractPsalmSandboxTestCase
{
    /**
     * @var class-string<PluginEntryPointInterface>
     */
    public const PLUGIN = MyPsalmPlugin::class;

    /**
     * @var array<class-string<CodeIssue>>
     */
    public const ISSUES = [MissingReturnType::class];
}

然后,您可以使用 PHPUnit 运行您的测试。

vendor/bin/phpunit

插件开发

示例目录结构

您的插件应该具有以下目录结构

composer.json
MyPsalmPlugin.php
src/
│   {PsalmIssueType}/
│   │   {FixIssue}.php
│   │   {ReportIssue}.php
│   │   {SuppressIssue}.php
│   MissingReturnType/
│   │   FixMissingReturnType.php
│   │   ReportMissingReturnType.php
│   │   SuppressMissingReturnType.php
tests/
│   Fixture/
│   │   {PsalmIssueType}/
│   │   │   fix-{PsalmIssueType}.php.inc
│   │   │   report-{PsalmIssueType}.php.inc
│   │   │   suppress-{PsalmIssueType}.php.inc
│   │   MissingReturnType/
│   │   │   fix-0001.php.inc
│   │   │   fix-missing-returntype.php.inc
│   │   │   report-0001.php.inc
│   │   │   report-missing-returntype.php.inc
│   │   │   suppress-0001.php.inc
│   │   │   suppress-missing-returntype.php.inc
│   Unit/
│   │   MyPsalmPluginTest.php

示例 Fix 测试

当您运行 vendor/bin/psalm --alter 时,它将自动为您修复代码。

要创建一个 Fix 测试,您需要在 tests/Fixture/{PsalmIssueType} 目录中创建一个文件。

文件名应以 fix- 和任何唯一标识符(例如,fix-0001.php.inc)开头。

文件必须使用 <!-- SEPARATOR --> 来分隔 beforeafter 代码。

文件的结构应如下所示

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class FixMissingReturnType
{
    public function fixMissingReturnType()
    {
    }
}
?>
<!--  SEPARATOR -->
<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class FixMissingReturnType
{
    public function fixMissingReturnType(): void
    {
    }
}
?>

示例 Report 测试

当您运行 vendor/bin/psalm 时,它将在您的代码中报告问题。

要创建一个 Report 测试,您需要在 tests/Fixture/{PsalmIssueType} 目录中创建一个文件。

文件名应以 report- 和任何唯一标识符(例如,report-0001.php.inc)开头。

文件的结构应如下所示

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class ReportMissingReturnType
{
    public function reportMissingReturnType()
    {
    }
}

示例 Suppress 测试

您可以通过添加 @psalm-suppress 注释、将抑制添加到您的 psalm.xml 文件或使用插件来抑制您的代码中的问题。

要创建一个 Suppress 测试,您需要在 tests/Fixture/{PsalmIssueType} 目录中创建一个文件。

文件名应以 suppress- 和任何唯一标识符(例如,suppress-0001.php.inc)开头。

文件的结构应如下所示

<?php

declare(strict_types=1);

namespace Vendor\PackageTests\Fixture\MissingReturnType;

final class SuppressMissingReturnType
{
    /**
     * @psalm-suppress MissingReturnType
     */
    public function suppressMissingReturnType()
    {
    }
}

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG.md

安全

如果您发现任何与安全相关的问题,请通过电子邮件 nathanael.esayeas@protonmail.com 联系,而不是使用问题跟踪器。

支持

[成为 GitHub 赞助者]

谢谢

以认可那些为社区创建和维护有价值项目的成员的努力。

感谢 Bruce Weirdan 为原始 psalm/codeception-psalm-module 所做的贡献,这为我工作的起点。

感谢 Matt Brown,他是 vimeo/psalm 的创造者,这是一个出色的 PHP 静态分析工具。

特别感谢 @orklah 维护 vimeo/psalm,确保其持续改进和功能。

致谢

许可协议

BSD-3-Clause 许可协议。有关更多信息,请参阅 许可文件