shipmonk / name-collision-detector
一个简单的工具,用于在您的项目中查找模糊的类或其他名称重复项。
2.1.1
2024-03-01 13:26 UTC
Requires
- php: ^7.2 || ^8.0
- ext-json: *
- ext-tokenizer: *
- nette/schema: ^1.1.0
Requires (Dev)
- editorconfig-checker/editorconfig-checker: ^10.3.0
- ergebnis/composer-normalize: ^2.19
- phpstan/phpstan: ^1.8.7
- phpstan/phpstan-phpunit: ^1.1.1
- phpstan/phpstan-strict-rules: ^1.2.3
- phpunit/phpunit: ^8.5.28 || ^9.5.20
- shipmonk/composer-dependency-analyser: ^1.0.0
- slevomat/coding-standard: ^8.0.1
This package is auto-updated.
Last update: 2024-09-02 11:13:16 UTC
README
一个简单的工具,允许您检测同一命名空间内是否有重复定义的类型。这意味着任何模糊的类、接口、枚举、特性、常量或函数都会被报告。当发现任何重复时,会返回非零退出码。
安装
composer require --dev shipmonk/name-collision-detector
使用
检查重复类型
vendor/bin/detect-collisions dir1 dir2 dir3 # relative to cwd
示例错误输出
Foo\NamespacedClass2 is defined 2 times:
> /tests/sample-collisions/file2.php:23
> /tests/sample-collisions/file2.php:45
GlobalInterface1 is defined 2 times:
> /tests/sample-collisions/file1.php:8
> /tests/sample-collisions/file2.php:11
示例成功输出
OK (no name collision found)
* analysed files: 9867
* excluded files: 0
* elapsed time: 1.057 s
- 注意性能: 10,000 个文件只需几秒钟!
配置
如果当前工作目录中存在名为 collision-detector.json
的文件,则其内容作为配置选项。可能的配置选项
{ "scanPaths": ["src", "tests"], // files/directories to scan, relative to config file directory, glob not supported "excludePaths": ["tests/collisions"], // files/directories to exclude, relative to config file directory, glob not supported "fileExtensions": ["php"], // file extensions to parse "ignoreParseFailures": false // skip files with parse errors or not }
通过 CLI 参数提供的路径优先于 scanDirs
中的路径。
您可以通过 vendor/bin/detect-collisions --configuration path/to/config.json
提供自定义配置文件路径
原因
在项目中存在冲突的类可能会在调试过程中导致极大的困扰。通常,您有 PSR-4 自动加载,这通常可以为您解决此问题,但在某些情况下(例如 PHPStan 规则测试文件),您需要编写任何代码(使用 classmap 自动加载)。在这种情况下,测试可能在独立运行时正常工作,但在运行所有测试时失败(取决于哪个类首先被自动加载)。因此,在 CI 中拥有冲突检测器可能很有用。
Composer 的模糊类解析
您可能认为 Composer 本身正在以某种方式解决这个问题,但这并不是真的。Composer 执行的唯一类似检查(导致 Warning: Ambiguous class resolution
)发生在类在 vendor
路径内冲突时,而不是在您的代码库中。Composer 不会报告您的项目中的类歧义。
支持的 PHP 版本
- PHP 7.2 - PHP 8.3