问题更新:我错误地使用了 PHPStorm 的修订版本号。正确的版本是 2017.1,而不是最初所述的 2017.3。
我最近更新到了最新的 PHPStorm(2017.1 March),但 PHPcs 不再起作用,而是出现错误。这是 PHPStorm 版本:
PhpStorm 2017.1
Build #PS-171.3780.104, built on March 21, 2017
JRE: 1.8.0_112-release-736-b13 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 7 6.1
我记得 2017.1 一月出现过类似的错误,并在二月修复了。
我已经检查了配置并且它没问题并且验证正确;显然,远程代码嗅探器(最新的 Ubuntu 16.04-LTS 上的版本 2.7.0)要么运行不正确,要么使用错误的参数调用(看起来更有可能)。
错误是:
PHP Code Sniffer
phpcs: ERROR: The file "/home/lserni/.phpstorm_helpers/phpcs_temp.tmp/PHP" does not exist.
Usage: phpcs [-nwlsaepqvi] [-d key[=value]] [--colors] [--no-colors] [--stdin-path=<stdinPath>]
[--report=<report>] [--report-file=<reportFile>] [--report-<report>=<reportFile>] ...
[--report-width=<reportWidth>] [--generator=<generator>] [--tab-width=<tabWidth>]
[--severity=<severity>] [--error-severity=<severity>] [--warning-severity=<severity>]
[--runtime-set key value] [--config-set key value] [--config-delete key] [--config-show]
[--standard=<standard>] [--sniffs=<sniffs>] [--exclude=<sniffs>] [--encoding=<encoding>]
[--extensions=<extensions>] [--ignore=<patterns>] [--bootstrap=<bootstrap>]
[--file-list=<fileList>] <file> ...
Set
降级到 2 月版本,正如预期的那样,解决了这个问题(升级之前没有发生这种情况)。我想更新,因为我希望这能解决一个我不想解决的烦人的错误。
在我提交错误报告之前(我对此不太满意,因为我的配置不是开箱即用的),有谁知道问题是什么,或者有人愿意猜一下吗?PHPStorm 配置是正确的针对上一次修订但很可能之前的版本让我逃脱了一些我想出的愚蠢行为,而现在当前的修订版本却让我陷入困境。
答案1
好的,PHPStorm 在我的计算机上远程执行代码。我可以调试它。
事实证明,为了分析文件,PHPStorm 会通过 SFTP 将文件上传到我的计算机,正如预期的那样。然后,它从 SSH 调用 phpcs,这也符合预期。
没想到的是,我看到二调用(而是我会如果第一个没有崩溃,则会看到第二个,见下文)。第一个尝试针对名为“PHP Console”的文件运行 Code Sniffer,该文件做存在并且是已上传到我的机器上,但其长度为零字节(因此无法通过基本的 PHPCS 验证;它甚至没有短标签)。
然后 PHPStorm 调用不带引号的 phpcs,因此要求
...phpcs PHP Console --format=XML etc.
当然,phpcs 尝试打开一个名为“PHP”的文件,但失败了。因此它显示错误并停止,永远不会继续嗅探我想要嗅探的真实文件。
解决
我准备了一个调用 phpcs 的不同二进制文件并调用它/usr/local/bin/phpcs-phpstorm
:
#!/bin/sh
if [ "PHP" = "$1" ]; then
# Output a PHPCS message saying "This file is OK, go on."
cat <<-HERE
<?xml version="1.0" encoding="UTF-8"?>
<phpcs version="2.7.0"></phpcs>
HERE
exit 0
fi
# Launch the true phpcs. And since we're here, use also my own standard.
# (I need to find out how to update PHPCS smell sets in PHPStorm)
/usr/bin/phpcs --standard=/home/lserni/phpstorm-phpcs-ruleset.xml $*
然后我告诉 PHPStorm 我的远程 PHPCS 被调用/usr/local/bin/phpcs-phpstorm
。
这样,两个 phpcs 实例就启动了 - 第一个没有报告错误并立即终止,此时第二个 phpcs 针对机器上复制的真实 PHP 文件启动。第一次运行所花费的时间可以忽略不计,因为真正的 phpcs 甚至还没有加载。
虽然不优雅,但无论如何都行。