You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义PHP CodeSniffer Sniff报错:引用的嗅探不存在

排查PHP CodeSniffer自定义嗅探找不到的问题

以下是可能导致ERROR: Referenced sniff "MyCustom.IncludeUsingDirSniff" does not exist的几个常见问题及解决方法:

1. sniffPaths配置路径不正确

PHP CodeSniffer的sniffPaths需要指向包含你的自定义命名空间根目录的父目录,而非嗅探文件的直接目录。比如你的嗅探文件放在_dev/MyCustom/...下,配置应该指向./_dev,让PHPCS能递归查找里面的嗅探类:

<rule name="MyCustom.IncludeUsingDirSniff">
    <!-- 先确保sniffPaths正确 -->
    <sniffPaths>
        <path>./_dev</path>
    </sniffPaths>
</rule>

2. 目录结构与命名空间不匹配

PHPCS对自定义嗅探的目录结构有严格要求,必须遵循PSR规范:

  • 命名空间MyCustom对应的根目录是_dev/MyCustom
  • 嗅探类必须放在Sniffs子目录下的分类文件夹中(比如Includes,用于归类包含文件相关的嗅探)
  • 文件名必须和类名完全一致

正确的目录结构示例:

_dev/
  MyCustom/
    Sniffs/
      Includes/
        IncludeUsingDirSniff.php

对应的嗅探类代码开头应该是:

<?php
namespace MyCustom\Sniffs\Includes;

use PHP_CodeSniffer\Sniffs\Sniff;
use PHP_CodeSniffer\Files\File;

class IncludeUsingDirSniff implements Sniff
{
    // 你的嗅探逻辑...
}

3. 嗅探引用名称格式错误

在phpcs.xml中引用嗅探时,格式是命名空间.分类.类名,而非直接用命名空间加类名。比如上面的例子,正确的引用应该是:

<rule ref="MyCustom.Includes.IncludeUsingDirSniff"/>

4. 缺少自动加载配置

如果你的自定义嗅探使用PSR-4自动加载,需要在phpcs.xml中添加autoload配置,指定命名空间对应的目录:

<autoload>
    <namespace prefix="MyCustom" base="./_dev"/>
</autoload>

5. 文件权限问题

在Linux/macOS环境下,确保PHPCS进程有读取_dev目录及所有子文件的权限,可以通过以下命令修复:

chmod -R 644 _dev/
chmod -R +X _dev/

内容的提问来源于stack exchange,提问作者Juergen Schulze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:52:15