在switch语句中@noinspection批注cruft清理

时间:2016-05-29 20:16:34

标签: php intellij-idea phpstorm

我有以下代码,可确保在应用更新后我的数据库架构是最新的。

private function migrate($old_version) {

    switch ($old_version) {

        /** @noinspection PhpMissingBreakStatementInspection */
        case self::NOT_INITIALIZED:
            migrateToV0();

        /** @noinspection PhpMissingBreakStatementInspection */
        case 0:
            migrateToV1();

        /** @noinspection PhpMissingBreakStatementInspection */
        case 1:
            migrateToV2();

        /** @noinspection PhpMissingBreakStatementInspection */
        case 2:
            migrateToV3();

        case 3:
            migrateToV4();

    }
}

正如您所看到的,@noinspection注释必须放在每个 case之前,以免检查员抱怨我没有break声明。< / p>

我仍然希望通常对我的代码发出此警告,因此通常禁用该规则是不可取的,但将它清理一下会很不错。也许在switch语句之前只有一个@noinspection

private function migrate($old_version) {

    /** @noinspection PhpMissingBreakStatementInspection */
    switch ($old_version) {

        case self::NOT_INITIALIZED:
            migrateToV0();

        case 0:
            migrateToV1();

        case 1:
            migrateToV2();

        case 2:
            migrateToV3();

        case 3:
            migrateToV4();

    }
}

这在PHPStorm中是否可行?这个无需注意的注释来自PHPStorm / Intellij吗?或者它是一个集成的第三方工具?

1 个答案:

答案 0 :(得分:1)

在Eclipse + CodeSniffer和PHPStorm v2016.2中,所需要的只是你显示你知道&#34;直通&#34; switch case s。

这可以像添加空注释一样少(仅在PHPStorm v2016.2上测试;在Eclipse上,在我的头顶,评论有效,空注释可能):

switch ($old_version) {
    case self::NOT_INITIALIZED:
        migrateToV0();
        // then:
    case 0:
        migrateToV1();
        // then:
    case 1:
        migrateToV2();
        // 
    case 2:
        migrateToV3();
        // 
    case 3:
        migrateToV4();
        //
}

或删除开关。

即使从代码覆盖的角度来看它不是很干净(函数可以隐式定义而不是解决),我也可以这样做 - 特别是如果有很多这样的话我也有从DB或INI文件读取它们,和/或它们定义的类甚至没有加载(这对于非常大类/函数):

$transitions = [
    0 => 'migrateToV1',
    1 => [ 'Migrations', 'migrateToV2' ],
    2 => function() { die('Oh noes!'); },
    3 => 'migrateToV4',
];
foreach ($transitions as $ifVersion => $todo) {
    // if $todo is an array I can check the class exists
    if ($old_version === $ifVersion) {
        $newVersion = $todo($old_version);
        if (null === $newVersion) {
            $newVersion = $old_version +1;
        }
        $old_version = $newVersion;
    }
}