PHP-CS-Fixer 规则详解:phpdoc_single_line_var_spacing 让单行 @var 注释间距规范统一
开发工具代码质量静态分析Lint格式化【免费下载链接】PHP-CS-FixerA tool to automatically fix PHP Coding Standards issues项目地址https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer点击查看免费下载导读phpdoc_single_line_var_spacing是 PHP-CS-Fixer 提供的 PHPDoc 规范化规则用于修正单行var注释中多余或缺失的空格将其统一为/** var Type $variable */的标准形态。本文以 规则文档 为主体结合 Fixer 源码 与 单元测试完整讲解该规则的行为边界、底层实现、与其他规则的协作顺序以及如何在项目中使用与验证。读完本文你将掌握该规则的精确作用范围、正则匹配逻辑与规则集启用方式可直接落地到实际项目的代码风格配置中。规则概述修复什么该规则的目标非常聚焦单行varPHPDoc 应当具有合适的间距proper spacing。官方FixerDefinition描述为 Single linevarPHPDoc should have proper spacing.见 PhpdocSingleLineVarSpacingFixer.php。在源码注释中该 Fixer 的实现定位为 Fixer for part of rule defined in PSR5 ¶7.22见 源码第 26 行即其行为与 PSR-5 草案中关于 PHPDoc 格式的 7.22 节精神一致属于 PHPDoc 规范化的一个组成部分。需要特别强调边界本规则只处理单行形式的var注释即整个注释在一行内以/**开头、以*/结束。对于多行var注释例如属性注释跨越多行该规则不会插手。核心示例一条规则的典型修复规则文档给出了唯一的官方示例--- Original New -?php /**var MyClass $a */ ?php /** var MyClass $a */ $a test();可以看到这一条修复同时完成了三件事在/**与var之间补上缺失的空格/**var→/** var将var后多余的空格压缩为单个空格var MyClass→var MyClass将注释结尾*/前的多余空格清除$a */→$a */。源码解析修复是怎么发生的候选检查isCandidateFixer 只对包含注释的文件生效。isCandidate()通过$tokens-isAnyTokenKindsFound([\T_COMMENT, \T_DOC_COMMENT])检查 Token 流中是否存在普通注释或文档注释源码第 51-54 行。只要文件里没有任何注释该 Fixer 会直接跳过不产生任何开销。核心正则与替换逻辑applyFix()遍历所有 Token对每个注释 Token 调用fixTokenContent()核心是一个Preg::replaceCallback源码第 72-89 行#^/\*\*\h*var\h(\S)\h*(\$\S)?\h*([^\n]*)\*/$#逐段解读这个正则^/\*\*注释必须严格以/**开头\h*/**与var之间允许任意数量的水平空白含空格与 Tab但不含换行会被压缩var标签本体\h(\S)var后至少一个水平空白随后捕获第一个非空白片段——即类型如MyClass(\$\S)?可选的变量名捕获组以$开头如$a\h*([^\n]*)\*/$变量名之后可以跟任意数量的水平空白以及剩余描述文本[^\n]*不含换行说明描述必须与类型同行最后以*/结束。$锚定确保整个注释恰好匹配这一单行形态。替换时Fixer 以/** var为前缀重建内容将捕获到的类型、变量名、描述各组以单个空格拼接最后用rtrim去掉尾部空白再补上*/。由于正则锚定了整行任何不满足单行var形态的注释多行注释、含换行的注释、其他标签都不会被改动。输出 Token 类型替换后的内容以[\T_DOC_COMMENT, $fixedContent]写回 Token 流源码第 66-68 行保证注释仍被识别为文档注释不影响后续其他 PHPDoc 类规则的 Token 解析。与其他规则的协作优先级与依赖Fixer 通过getPriority()声明执行顺序返回-10并明确注释了约束源码第 40-49 行Must run before PhpdocAlignFixer. Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocNoAliasTagFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer.含义如下必须在 PhpdocAlignFixer 之前运行phpdoc_align负责把var、param等标签的类型与描述做垂直对齐见 PhpdocAlignFixer.php。先由本规则把单行var的多余空格收敛为标准间距phpdoc_align再基于干净的内容做列对齐避免两次修复互相干扰必须在 AlignMultilineCommentFixer、CommentToPhpdocFixer、PhpdocIndentFixer、PhpdocNoAliasTagFixer、PhpdocScalarFixer、PhpdocToCommentFixer、PhpdocTypesFixer 之后运行这些规则会改变注释的形态、缩进、别名标签或标量类型写法本规则必须在它们产出的最终形态上再做间距统一否则会被后续改动再次打破。这条依赖链说明PHP-CS-Fixer 中 Fixer 之间并非独立执行而是通过优先级组成确定的流水线phpdoc_single_line_var_spacing处于 PHPDoc 规范化流水线的中后段。测试验证官方承诺的行为边界测试类 PhpdocSingleLineVarSpacingFixerTest.php 中的每个用例都属于官方向后兼容承诺backward compatibility promise的一部分。从数据提供器provideFixCases()可以归纳出规则的实际行为边界用例 1缺失空格的两种情况/**var MyCass6 $a */ → /** var MyCass6 $a */ /**var MyCass6*/ → /** var MyCass6 *//**后缺空格、*/前缺空格都会被补齐类型名被保留。用例 2类型、变量、描述之间的多余空白/** var MyCass1 $test1 description and more.*/ → /** var MyCass1 $test1 description and more. */ /** var MyCass3 description. */ → /** var MyCass3 description. */注释内部含 Tab 与多个空格混用的空白被统一为单个空格描述文本内部的单词间距不会被打散——description and more.中and前的多余空格会被压成单个空格但描述内单词间的正常分隔保留变量名可省略/** var MyCass2 description and such. */这种无$var的形态同样受支持。用例 3不越界的场景单输入无输出第三个用例只有expected没有input表示该输入不做任何修改包括多行param array $options { ... }块内缩进的var bool $required ...行属于param的嵌套结构不被触碰多行var注释块中逐行书写的var bool $required ...与var string $label ...以/** var MyCass3开头但*/换行到下一行的多行注释。这正是单行限定词的含义只要注释不是单行/** ... */形态本规则一律不动从而避免误伤多行 PHPDoc 块与对齐排版结构。该用例同时暗示垂直对齐任务交由phpdoc_align处理本规则无需也不应代劳。所属规则集与如何启用规则文档明确该规则属于以下两个规则集规则集文档 Symfony.rstPhpCsFixer见 PhpCsFixer.rstSymfony见 Symfony.rst在源码层面Symfony规则集在 SymfonySet.php 中显式声明phpdoc_single_line_var_spacing true而PhpCsFixer规则集通过Symfony true继承启用见 PhpCsFixerSet.php。因此只要你的配置使用了这两个规则集之一该规则就会默认生效无需额外声明。在命令行中单独运行不依赖规则集针对单个文件单独验证该规则# 仅运行此规则并输出修复结果 php php-cs-fixer fix path/to/File.php --rulesphpdoc_single_line_var_spacing # 只查看差异不实际修改文件 php php-cs-fixer fix path/to/File.php --rulesphpdoc_single_line_var_spacing --dry-run --diff--dry-run与--diff组合可以安全预览该规则会改动的每一处注释适合先评估影响面再决定是否落地。在配置文件中启用在项目根目录的.php-cs-fixer.php配置文件中显式开启?php return (new PhpCsFixer\Config()) -setRules([ phpdoc_single_line_var_spacing true, ]) -setFinder( PhpCsFixer\Finder::create() -in(__DIR__./src) );由于该规则默认已随Symfony/PhpCsFixer启用上述显式声明通常用于只开启少量规则的轻量配置或用于自定义规则集时精确控制。使用建议与注意事项聚焦单行配合 phpdoc_align 使用如果项目中同时存在多行var块并希望对齐应同时启用phpdoc_align其优先级机制本规则先于phpdoc_align执行能保证间距归一后再对齐结果稳定该规则无配置项与可配置规则不同phpdoc_single_line_var_spacing是确定性行为、不接受参数开与不开只有两种状态配置成本为零向后兼容承诺官方测试用例定义了受支持的行为升级 PHP-CS-Fixer 版本时这些用例所覆盖的场景不会发生破坏性变化见 规则文档可放心纳入 CI 流程。小结phpdoc_single_line_var_spacing是一条小而精准的 PHPDoc 规则它以一条锚定单行var的正则为核心将注释内部的多余水平空白统一为单空格同时严格不越界处理多行注释与其他标签它位于 PHPDoc 处理流水线的中后段先于phpdoc_align执行并随Symfony与PhpCsFixer规则集默认启用。理解它的正则形态与优先级约束有助于你在排查 PHPDoc 相关修复差异时快速定位问题来源。赞分享开发工具代码质量静态分析Lint格式化【免费下载链接】PHP-CS-FixerA tool to automatically fix PHP Coding Standards issues项目地址https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer点击查看免费下载相关推荐PHP-CS-Fixer DoctrineAnnotation 规则集详解一键规范 Doctrine 注解格式PHP CS Fixer DoctrineAnnotation 规则集详解一键规范 Doctrine 注解格式 DoctrineAnnotation 是开发工具代码质量静态分析Lint格式化鸣潮智能辅助工具游戏自动化新纪元鸣潮智能辅助工具游戏自动化新纪元 在当今快节奏的游戏环境中玩家们常常需要在《鸣潮》这类开放世界游戏中投入大量时间来完成重复性任务。从日常委托到声骸刷取从资开发工具代码质量静态分析Lint格式化PHP-CS-Fixer 规则详解backtick_to_shell_exec 反引号命令统一为 shell_exec 调用PHP CS Fixer 规则详解 backtick_to_shell_exec 反引号命令统一为 shell_exec 调用 本文围绕 PHP CS Fix开发工具代码质量静态分析Lint格式化上一篇Hunyuan-MT API接口开发实战构建多语言翻译服务的5个关键步骤下一篇Metabase Cypress E2E 测试评审方法论从评审 Skill 到 Lint 规则与 e2e/单测分层决策创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考