类/trait/接口是否存在可自定义的Sniff属性以规范内部空行格式?
问题解答
针对类、trait、接口三种结构,完全可以通过自定义Sniff属性实现你要求的两条代码规范校验,具体实现逻辑如下:
- 校验结构内部首行内容前无空行:自定义Sniff时监听
T_CLASS、T_TRAIT、T_INTERFACE三类 token,获取对应结构左大括号的行号后,直接读取下一行的内容,若为空白行即可触发错误提示。 - 校验结构内部末尾内容后保留1个空行:同样监听上述三类token,获取对应结构右大括号的行号后,分别校验右大括号前1行是否为空白行、前2行是否为非空白内容,不满足条件即可触发错误提示。
如果你不想完全从头写Sniff,也可以基于PHP_CodeSniffer已有的Generic.WhiteSpace.ScopeIndent、PSR2.Classes.ClassDeclaration规则扩展,只需要追加上述两个校验逻辑即可,不需要重构完整的Sniff功能。
规则示例匹配说明
你给出的合法/非法规则完全可以和上述校验逻辑对应:
合法代码:
Class Example() { /** Content */ }
非法代码(同时触发首行前有空行、末尾后无空行两个错误):
Class Example() { /** Content */ }
内容的提问来源于stack exchange,提问作者Safry
相关产品推荐
相关产品推荐

