我正在尝试使用 psalm static analysis tool for PHP 。我的理解是这个工具可以告诉我关于 unused methods in my codebase 的信息。但是,如果我创建一个简单的测试文件

#File: src/test.php
<?php
class A {
    private function foo() : void {}
}

new A();

然后运行 ​​psalm
$ ./vendor/bin/psalm --find-dead-code src/test.php
Scanning files...
Analyzing files...

------------------------------
No errors found!
------------------------------

Checks took 0.16 seconds and used 32.694MB of memory
Psalm was able to infer types for 100% of the codebase

psalter
$ ./vendor/bin/psalter --find-unused-code --dry-run --issues=UnusedMethod src/test.php
Scanning files...
Analyzing files...

------------------------------
No errors found!
------------------------------

Checks took 0.05 seconds and used 29.214MB of memory
Psalm was able to infer types for 100% of the codebase

没有发现错误。

为什么 psalm 没有找到未使用的方法 foo ?是否需要额外的配置?还是我误解了这个工具的作用?我的 psalm.xml 文件在下面。
<?xml version="1.0"?>
<psalm
    totallyTyped="false"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="https://getpsalm.org/schema/config"
    xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
>
    <projectFiles>
        <directory name="src" />
        <ignoreFiles>
            <directory name="vendor" />
        </ignoreFiles>
    </projectFiles>

    <issueHandlers>
        <LessSpecificReturnType errorLevel="info" />

        <!-- level 3 issues - slightly lazy code writing, but provably low false-negatives -->

        <DeprecatedMethod errorLevel="info" />
        <DeprecatedProperty errorLevel="info" />
        <DeprecatedClass errorLevel="info" />
        <DeprecatedConstant errorLevel="info" />
        <DeprecatedInterface errorLevel="info" />
        <DeprecatedTrait errorLevel="info" />

        <InternalMethod errorLevel="info" />
        <InternalProperty errorLevel="info" />
        <InternalClass errorLevel="info" />

        <MissingClosureReturnType errorLevel="info" />
        <MissingReturnType errorLevel="info" />
        <MissingPropertyType errorLevel="info" />
        <InvalidDocblock errorLevel="info" />
        <MisplacedRequiredParam errorLevel="info" />

        <PropertyNotSetInConstructor errorLevel="info" />
        <MissingConstructor errorLevel="info" />
        <MissingClosureParamType errorLevel="info" />
        <MissingParamType errorLevel="info" />

        <RedundantCondition errorLevel="info" />

        <DocblockTypeContradiction errorLevel="info" />
        <RedundantConditionGivenDocblockType errorLevel="info" />

        <UnresolvableInclude errorLevel="info" />

        <RawObjectIteration errorLevel="info" />

        <InvalidStringClass errorLevel="info" />

        <UnusedMethod errorLevel="info" />
    </issueHandlers>
</psalm>

最佳答案

此处的 Psalm 创建者 - 死代码检测仅在分析整个项目时检测未使用的类和方法 - 例如./vendor/bin/psalm --find-dead-code ,省略 src/test.php

虽然私有(private)方法和属性是一种特殊情况(可以在不检查整个项目的情况下推断出它们的未使用),但对于公共(public)/ protected 方法和属性,必须使用所有内容。

关于php - 如何使用 Psalm 的 UnusedMethod 功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55924476/

10-11 02:53