PHPStorm 2017.1 falha executando phpcs remotos: “ERRO: O arquivo ~ / .phpstorm_helpers /… não existe”

0

ATUALIZAÇÃO DA PERGUNTA : eu usei por engano o número de revisão do PHPStorm. A versão correta é 2017.1, não 2017.3 como inicialmente declarado .

Atualizei recentemente para o mais recente PHPStorm (2017.1 de março) e o PHPcs não funciona mais, dando um erro. Esta é a versão do 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

Lembro-me de um erro semelhante em 2017.1 de janeiro, que havia sido corrigido em fevereiro.

Eu já inspecionei a configuração e está tudo bem e valida corretamente; aparentemente, o Code Sniffer remoto (versão 2.7.0 no Ubuntu 16.04-LTS atualizado) não está sendo executado corretamente ou está sendo invocado com os parâmetros errados (parece mais provável).

O erro é:

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

O downgrade para a versão de fevereiro, como esperado, resolve o problema (isso não estava acontecendo antes da atualização). Eu queria atualizar, porque espero que isso conserte um bug chato que eu não quero resolver .

Antes de eu enviar um bug - com o qual não estou muito confortável, já que minha configuração não está pronta para o uso - alguém sabe qual é o problema ou alguém quer adivinhar? A configuração do PHPStorm estava correta para a revisão anterior , mas pode ser que o anterior me deixe escapar de alguma estupidez que eu tenha, que agora está me mordendo com a revisão atual. / p>     

por LSerni 23.03.2017 / 17:18

1 resposta

1

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.

    
por 23.03.2017 / 17:54

Tags