PhpStorm 2023.3.4中PSR-12多异常catch语句格式化异常问题
PhpStorm 2023.3.4 中 PSR-12 多异常捕获缩进配置问题
环境与问题背景
- 使用PhpStorm 2023.3.4
- 项目已配置PSR-12代码标准,采用4空格缩进,禁用制表符
编写了符合PSR-12规范的多异常捕获代码:
<?php class MyClass { public function myMethod(): void { try { ... } catch ( Exception01 | Exception02 | ... ExceptionNN $e ) { // Do something about it } } }
但执行自动格式化后,IDE会将代码改写为如下样式,异常类没有正确缩进:
<?php class MyClass { public function myMethod(): void { try { ... } catch ( Exception01 | Exception02 | ... ExceptionNN $e ) { // Do something about it } } }
手动修正缩进后,IDE还会提示“空格不正确”。奇怪的是,PHP-CS-Fixer命令行工具可以正常将代码格式化为期望的样式,现在需要在PhpStorm中配置正确的代码风格。
当前导出的代码风格XML配置
<code_scheme name="Project" version="173"> <PHPCodeStyleSettings> <option name="BLANK_LINES_BETWEEN_IMPORTS" value="1" /> <option name="THROWS_WEIGHT" value="0" /> <option name="PARAM_WEIGHT" value="28" /> <option name="RETURN_WEIGHT" value="28" /> <option name="LOWER_CASE_BOOLEAN_CONST" value="true" /> <option name="LOWER_CASE_NULL_CONST" value="true" /> <option name="ELSE_IF_STYLE" value="COMBINE" /> <option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" /> <option name="BLANK_LINES_AFTER_OPENING_TAG" value="1" /> <option name="KEEP_BLANK_LINES_AFTER_LBRACE" value="0" /> <option name="NEW_LINE_AFTER_PHP_OPENING_TAG" value="true" /> <option name="SPACES_AROUND_PIPE_IN_UNION_TYPE" value="true" /> </PHPCodeStyleSettings> <codeStyleSettings language="PHP"> <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" /> <option name="BLANK_LINES_AFTER_PACKAGE" value="1" /> <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" /> <option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" /> <option name="CALL_PARAMETERS_WRAP" value="5" /> <option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" /> <option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" /> <option name="METHOD_PARAMETERS_WRAP" value="5" /> <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" /> <option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" /> <option name="EXTENDS_LIST_WRAP" value="5" /> <option name="METHOD_CALL_CHAIN_WRAP" value="5" /> <option name="PARENTHESES_EXPRESSION_LPAREN_WRAP" value="true" /> <option name="PARENTHESES_EXPRESSION_RPAREN_WRAP" value="true" /> <option name="BINARY_OPERATION_WRAP" value="5" /> <option name="FOR_STATEMENT_LPAREN_ON_NEXT_LINE" value="true" /> <option name="FOR_STATEMENT_RPAREN_ON_NEXT_LINE" value="true" /> <option name="ARRAY_INITIALIZER_WRAP" value="5" /> <option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" /> <option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" /> <option name="IF_BRACE_FORCE" value="3" /> <option name="DOWHILE_BRACE_FORCE" value="3" /> <option name="WHILE_BRACE_FORCE" value="3" /> <option name="FOR_BRACE_FORCE" value="3" /> </codeStyleSettings> </code_scheme>
解决方法
图形界面配置步骤
- 打开PhpStorm设置:
File > Settings(Windows/Linux)或PhpStorm > Settings(Mac) - 进入
Editor > Code Style > PHP - 切换到
Wrapping and Braces标签 - 找到Catch clause区域,设置:
- 勾选
Align multiline catch types - 确保
Indent catch types的缩进值为4(与PSR-12要求一致)
- 勾选
直接修改XML配置
如果图形界面找不到对应选项,可以直接在导出的XML配置中,向<codeStyleSettings language="PHP">节点添加以下配置:
<option name="ALIGN_MULTILINE_CATCH_TYPES" value="true" /> <option name="INDENT_CATCH_TYPES" value="4" />
修改后,PhpStorm的自动格式化会将多异常捕获的类型缩进至与catch (的左括号对齐,符合PSR-12规范,同时不会再出现缩进错误提示。
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

