neoighodaro/unused-public

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

安装: 861

依赖: 0

建议者: 0

安全: 0

星星: 0

观察者: 0

分支: 11

类型:phpstan-extension

1.0.0 2024-03-31 14:59 UTC

This package is auto-updated.

Last update: 2024-08-31 00:31:58 UTC


README



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

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

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

但公共类元素怎么办呢?


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

  • 找到例如公共方法
  • 找到所有公共方法调用
  • 进行简单的比较
  • 如果公共方法没有被找到,它可能就是未使用的

这正是这个包所做的事情。


这种技术对于私有项目和检测意外公开的公共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;
    }
}

您还可以使用 @required@internal 在某些情况下使其更清晰,表明您想要跳过检查或它是在内部使用的。在这种情况下,在Laravel中,虽然直接调用不存在,但它可以作为属性在 引用Laravel Eloquent模型中的关系 时使用

<?php

class User extends Model
{
    // ...

    /**
     * @internal
     */
    public $timestamps = false;

    /**
     * @required
     */
    public function post(): HasOne
    {
        return $this->hasOne(Post::class);
    }

    // ...
}