OK, então o PHPStorm executa o código remotamente na minha máquina. Eu posso depurar isso.
Acontece que para analisar um arquivo, o PHPStorm carrega o arquivo via SFTP para minha máquina, como esperado. Em seguida, ele invoca phpcs do SSH, também como esperado.
O que não é esperado é que eu veja duas invocações (ao invés disso eu veria duas se o primeiro não travasse, veja abaixo). O primeiro tenta executar o Code Sniffer em um arquivo chamado "Console do PHP", que existe e é carregado em minha máquina, exceto que ele tem zero bytes de comprimento (e portanto, falha na validação PHPCS básica; ela nem tem tags curtas).
Então PHPStorm invoca phpcs sem aspas, então pede
...phpcs PHP Console --format=XML etc.
e, claro, o phpcs tenta abrir um arquivo chamado "PHP" e falha. Portanto, ele exibe um erro e ele para, nunca vai cheirar o arquivo real que eu quero sniffed.
Resolução
Eu preparei um binário diferente que chama phpcs e o chamava de /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 $*
Eu então disse ao PHPStorm que meu PHPCS remoto era chamado /usr/local/bin/phpcs-phpstorm
.
Desta forma, duas instâncias de phpcs são lançadas - o primeiro relata nenhum erro e termina imediatamente, e nesse ponto o segundo phpcs é lançado contra o arquivo PHP real copiado na máquina. O tempo gasto pela primeira execução é insignificante, uma vez que os phps reais não estão carregados.
Não elegante, mas o que quer que funcione.