如何在PHP-CS-Fixer中保留函数名与括号间的空格?
针对你使用friendsofphp/php-cs-fixer 3.4.0(PHP 7.4环境)时,已配置single_space_after_construct: true和no_spaces_after_function_name: false,但函数名与左括号间的空格仍被移除的问题,可从以下方向排查:
检查冲突规则
部分规则会覆盖当前设置,比如function_declaration规则默认会强制移除函数名后的空格。若你的完整规则中启用了该规则,需调整其参数:'function_declaration' => [ 'space_before_parenthesis' => true, ],确保该规则的配置允许函数名与左括号间保留空格。
确认规则执行顺序
PHP-CS-Fixer的规则按配置顺序执行,若后续规则修改了空格设置,会覆盖之前的配置。检查规则列表中,是否有修改函数空格的规则(如method_argument_space等)排在no_spaces_after_function_name之后,调整顺序让保留空格的规则后执行。验证配置加载有效性
执行命令php-cs-fixer fix --dry-run --verbose,查看输出中是否明确显示no_spaces_after_function_name为false、single_space_after_construct为true,确认配置文件被正确读取。排查魔术方法特殊规则
__invoke是魔术方法,部分针对魔术方法的规则(如magic_method_casing)可能附带空格修改逻辑,检查这类规则的配置是否影响空格保留。尝试版本升级
3.4.0版本可能存在规则冲突的bug,升级至3.4.x分支的最新稳定版,查看是否修复了该问题。
内容的提问来源于stack exchange,提问作者Shobi

