neoighodaro / unused-public
检测代码中未使用的公共属性、常量和方法
1.0.0
2024-03-31 14:59 UTC
Requires
- php: ^8.1
- phpstan/phpstan: ^1.10
- webmozart/assert: ^1.11
Requires (Dev)
- nikic/php-parser: ^4.19
- phpstan/extension-installer: ^1.3
- phpunit/phpunit: ^10.5
- rector/rector: ^1.0
- symplify/easy-ci: ^11.2
- symplify/easy-coding-standard: ^12.0
- tomasvotruba/class-leak: ^0.2
- tomasvotruba/cognitive-complexity: ^0.2.2
- tomasvotruba/type-coverage: ^0.2
- tracy/tracy: ^2.10
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); } // ... }