gpt4 book ai didi

PHP Codesniffer 自定义规则:常量::类而不是字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:44 26 4
gpt4 key购买 nike

在我的一个客户的代码库中,我看到很多对合格类名的字符串引用;

[
'foobar' => 'My\Namespace\Class'
]

而不是使用:

[
'foobar' => My\Namespace\Class::class
]

出于多种原因,我们希望添加 PHP CodeSniffer 规则来捕获这些字符串并添加警告,以便可以将字符串重构为::class 常量。第一部分(捕获字符串)很容易,但是因为我们正在进行静态代码分析,所以我们无法执行(例如)class_exists 或查找 get_declared_classes() 的结果。

下一个选项可能是分析字符串本身 ([A-Za-z0-9]),但这不是很可靠,因为很多字符串会匹配但并不意味着是类名。

另一种选择是首先“收集”所有类名(基于 T_CLASS 标记),然后根据收集的类列表分析所有字符串。恕我直言,实现起来并不容易,因为 CodeSniffer 以每个文件为基础工作。

我能想到的最后一个选项也很脏;因为我们总是在我们的项目中使用 Composer ,所以我们可以使用 Composer 的自动加载文件并尝试匹配类映射和命名空间。也不是很可靠和干净。

有人提出我们没有考虑过的其他建议吗?!

最佳答案

好消息! 我创建了这个修复程序 - you can find it here .

最好与EasyCodingStandard一起使用像这样:

# ecs.yml
services:
Symplify\CodingStandard\Fixer\Php\ClassStringToClassConstantFixer: ~

安装:

composer require --dev symplify\easy-coding-standard

运行:

vendor/bin/ecs check src

修复:

vendor/bin/ecs check src --fix

尽情享受并告诉我它是如何为您服务的。

如果有任何问题出现,就create an issue here .我很乐意尽可能地改进这个工具。

关于PHP Codesniffer 自定义规则:常量::类而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39154585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com