ngmy/unused-public

检测代码中的未使用公共属性、常量和方法

维护者

详细信息

github.com/ngmy/unused-public

源代码

安装: 967

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 11

类型:phpstan-extension

dev-main 2024-02-13 21:14 UTC

This package is auto-updated.

Last update: 2024-09-15 15:21:00 UTC


README



很容易找到未使用的私有类元素,因为它们在类本身中没有使用

 final class Book
 {
     public function getTitle(): string
     {
         // ...
     }

-    private function getSubtitle(): string
-    {
-        // ...
-    }
}

那么公共类元素怎么办呢?


我们如何检测这样的元素呢?

  • 找到一个例如公共方法
  • 找到所有公共方法调用
  • 通过简单的diff比较它们
  • 如果未找到公共方法,则可能未使用

这正是这个包所做的。


这项技术在私有项目中非常实用,用于检测意外公开的公共API,这些API应仅在本地上使用。


安装

composer require tomasvotruba/unused-public --dev

该包在标记的版本中在PHP 7.2-8.1版本上可用。


使用方法

使用 PHPStan扩展安装程序,一切准备就绪。

通过简单的配置启用每个项目

# phpstan.neon
parameters:
    unused_public:
        methods: true
        properties: true
        constants: true

您想检查仅本地使用的、不应删除但应改为 private/protected 的方法调用吗?

# phpstan.neon
parameters:
    unused_public:
        local_methods: true

排除模板中的方法调用

一些方法仅在TWIG或Blade模板中使用,可能会被误报为未使用。

{{ book.getTitle() }}

如何排除它们?在配置中将您的TWIG或Blade模板目录添加到排除方法名称中

# phpstan.neon
parameters:
    unused_public:
        template_paths:
            - templates

已知限制

在某些情况下,规则报告了误报

  • 当仅用于模板时(除了Twig路径外),无法检测它们

跳过仅公共方法

开源供应商设计公共API以供项目使用。元素被报告为未使用,但实际上它设计为公开使用吗?

使用@api注解标记类或元素以跳过它

final class Book
{
    /**
     * @api
     */
    public function getName()
    {
        return $this->name;
    }
}

仅在测试中使用的公共方法

一些公共方法设计为仅在测试中使用。元素被报告为未使用,但实际上它在测试中使用吗?

使用@internal注解标记类或元素以报告为使用

final class Book
{
    /**
     * @internal
     */
    public function getName()
    {
        return $this->name;
    }
}