本地运行phpcs代码规范检测抛出Unclosed '('解析错误如何修复
问题修复方案
这个报错是本地PHP环境与phpcs版本兼容问题导致的冗余输出,不会影响最终代码规范检测结果,和项目本身的业务代码无关,按以下顺序排查即可:
- 先对齐环境版本:
分别在本地和CI环境执行php -v核对版本,如果你本地使用的是PHP 8.1.0~8.1.2版本,这几个版本的内置tokenizer扩展存在已知解析bug,会在phpcs初始化解析规则模板、生成临时测试代码片段时误报未闭合括号错误,直接把本地PHP升级到8.1.3及以上版本、或者切换到和CI一致的PHP版本即可解决。 - 核对phpcs版本:
执行composer show squizlabs/php_codesniffer查看本地安装的phpcs版本,如果版本低于3.6.2,直接升级phpcs到最新稳定版,官方已经在3.6.2版本加入了对上述PHP bug的兼容处理:composer update squizlabs/php_codesniffer --with-all-dependencies - 校验PHP配置一致性:
打开本地php.ini配置文件,查看short_open_tag项的取值,保持和CI环境配置一致(绝大多数CI环境默认将该配置设为Off),配置不一致会导致phpcs的模板解析逻辑出现异常。 - 排除依赖损坏问题:
如果以上操作都没解决,删除本地依赖目录和锁文件重新安装,排除依赖安装过程中文件损坏、版本锁不匹配的问题:rm -rf vendor composer.lock composer install - 快速定位根因:
可以直接执行下面的命令验证本地PHP的tokenizer功能是否正常:
如果执行这条命令就抛出php -r "token_get_all('<?php (?>');"Unclosed '('的解析错误,可直接确认是本地PHP本身的bug,升级PHP版本即可彻底解决。
内容的提问来源于stack exchange,提问作者Vadim
相关产品推荐
相关产品推荐

