如何设置 PHP CodeSniffer 来扩展 WordPress 编码标准 + VSCode 中的自动修复错误?

Iva*_*pić 5 php wordpress phpcodesniffer visual-studio-code

如何使用扩展 WordPress 编码标准的个人规则为项目设置 PHP CodeSniffer + 保存时在 VSCode 中自动修复错误?

我已经全局安装了 CodeSniffer

composer global require "squizlabs/php_codesniffer=*"
Run Code Online (Sandbox Code Playgroud)

WordPress 编码标准安装在主题文件夹内(因此它们位于项目内/wp-content/themes/bideja/wpcs

git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wpcs
Run Code Online (Sandbox Code Playgroud)

我创建的主题文件夹内部phpcs.xml应继承 WordPress 标准,以便我可以进一步自定义它

<?xml version="1.0"?>
<ruleset name="Bideja">
    <description>Sniffs</description>

    <config name="installed_paths" value="wpcs" />

    <arg value="s"/>

    <exclude-pattern>assets/*</exclude-pattern>
    <exclude-pattern>node_modules/*</exclude-pattern>
    <exclude-pattern>vendor/*</exclude-pattern>

    <rule ref="WordPress-VIP">
        <exclude name="Generic.Files.EndFileNewline.NotFound" />
        <exclude name="WordPress.PHP.YodaConditions.NotYoda" />
    </rule>

</ruleset>
Run Code Online (Sandbox Code Playgroud)

在主题内的 Bash 终端中,我可以扫描页面中的错误并修复它们

phpcs page.php
phpbcf page.php 
Run Code Online (Sandbox Code Playgroud)

但是 VSCode 如何在保存时修复它们呢?我收到弹出错误:

phpcs: Referenced sniff "WordPress-VIP" does not exist
Run Code Online (Sandbox Code Playgroud)

我应该在 User settings.json 中放置什么?

"phpcs.enable": true,
"phpcs.standard": "WordPress", // ?
Run Code Online (Sandbox Code Playgroud)

我尝试过设置

phpcs --config-set installed_paths wpcs
Run Code Online (Sandbox Code Playgroud)

当我检查已安装的标准时,phpcs -i我可以看到列出了 WordPress 标准

 The installed coding standards are MySource, PEAR, PSR1, PSR12, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra and WordPress-VIP
Run Code Online (Sandbox Code Playgroud)

CodeSniffer 是否能够自动缩进 PHP 和 HTML 或者这超出了它的能力?我正在为 VSCode 中的良好缩进而苦苦挣扎

Iva*_*pić 4

我已将 WordPress 编码标准克隆到 git 中,并在其中C:/wamp64/www/tools/phpcs创建了自定义ruleset.xmlC:/wamp64/www/tools/phpcs/bideja

<?xml version="1.0"?>
<ruleset name="Bideja">

    <arg value="s"/>

    <exclude-pattern>assets/*</exclude-pattern>
    <exclude-pattern>node_modules/*</exclude-pattern>
    <exclude-pattern>vendor/*</exclude-pattern>

    <rule ref="WordPress">
        <exclude name="WordPress.PHP.YodaConditions.NotYoda" />
        <!-- exclude other stuff as you wish -->
    </rule>

</ruleset>
Run Code Online (Sandbox Code Playgroud)

安装新标准

phpcs --config-set installed_paths C:/wamp64/www/tools/phpcs/wp-coding-standards/wpcs,C:/wamp64/www/tools/phpcs/bideja
Run Code Online (Sandbox Code Playgroud)

检查是否安装了标准

phpcs -i
Run Code Online (Sandbox Code Playgroud)

设置默认标准

phpcs --config-set default_standard bideja
Run Code Online (Sandbox Code Playgroud)

安装phpcbf扩展,根据您的文件夹路径在 Windows 中为 Path 添加环境变量

 C:\Users\User\AppData\Roaming\Composer\vendor\bin
Run Code Online (Sandbox Code Playgroud)

User settings.json使用标准的正确路径和名称进行修改

"phpcbf.executablePath": "C:\\Users\\User\\AppData\\Roaming\\Composer\\vendor\\bin\\phpcbf.bat",
"phpcbf.executablePathWindows": "C:\\Users\\User\\AppData\\Roaming\\Composer\\vendor\\bin\\phpcbf.bat",
"phpcs.standard": "bideja",
"phpcbf.standard": "bideja",
"phpcs.enable": true,
"phpcbf.onsave": true,
Run Code Online (Sandbox Code Playgroud)

我希望我没有忘记一些事情,因为我花了几个小时搞乱了这个问题,但现在保存文件后,VSCode 终于修复了它可以修复的问题。