PhpStorm выдает ошибку при запуске phpcs

Прежде всего, позвольте мне перечислить некоторые версии, чтобы вы знали установку.

ОС: Windows 10
php: 7.2.7 NTS с активным xDebug 2.6.1
PhpStorm: 2016.2.2
PHP_CodeSniffer: версия 3.4.0 (стабильная) от Squiz (http://www.squiz.net)
ГРУША: 1.10.7

Теперь опишу проблему:

Сниффер кода был установлен через грушу. Я использую следующий bat-скрипт для запуска сниффера.

@echo off

set folder=C:\Program Files\php
set phpcs=%folder%\phpcs

php "%phpcs%" %*

Если я запущу анализатор кода через PowerShell с помощью следующей команды:

phpcs.bat index.php --standard=PSR2 --encoding=utf-8 --report=xml

Я получаю действительный вывод:

xml version="1.0" encoding="UTF-8"?>
<file name="C:\Users\simon\Documents\Repositories\mm-BIT\CatalogGenerator\index.php" errors="3" warnings="0" fixable="3">
    <error line="1" column="1" source="Generic.Files.LineEndings.InvalidEOLChar" severity="5" fixable="1">End of line character is invalid; expected &quot;\n&quot; but found &quot;\r\n&quot;</error>
    <error line="124" column="1" source="PSR2.Methods.FunctionCallSignature.SpaceBeforeOpenBracket" severity="5" fixable="1">Space before opening parenthesis of function call prohibited</error>
    <error line="129" column="1" source="PSR2.Methods.FunctionCallSignature.SpaceBeforeOpenBracket" severity="5" fixable="1">Space before opening parenthesis of function call prohibited</error>
</file>
</phpcs>

В PHPStorm настройка выглядит так:

введите здесь описание изображения

введите здесь описание изображения

Если я подтвержу установку, PhpStorm скажет мне, что все в порядке:

введите здесь описание изображения

Данные для стандартов кодирования на странице Inspections были загружены автоматически, так что, похоже, это тоже работает.

Если PhpStorm запускает скрипт, я получаю следующую ошибку:

PHP Code Sniffer
phpcs: xml version="1.0" encoding="UTF-8"?>

Я выставлял некоторые данные через скрипт, который вызывается:

Сниффер кода PHP

phpcs: C:/temp/___1.tmp/Core/DataContainers/Language.php --standard=PSR2 --encoding=utf-8 --report=xml
command: php "C:\Program Files\php\phpcs" C:/temp/___1.tmp/Core/DataContainers/Language.php --standard=PSR2 --encoding=utf-8 --report=xml
xml version="1.0" encoding="UTF-8"?>

Я проверял временную папку на наличие разрешений на запись и проверял, правильно ли создан файл по указанному выше пути. Я скопировал папку, как только она была создана, и успешно запустил командную строку вручную в PowerShell.

php "C:\Program Files\php\phpcs"    
C:/temp/___.tmp/Core/DataContainers/Modules/SimpleTableModule.php -- 
standard=PSR2 --encoding=utf-8 --report=xml

который обеспечивает следующий вывод:

<?xml version="1.0" encoding="UTF-8"?>
<phpcs version="3.4.0">
xml version="1.0" encoding="UTF-8"?>
<file name="C:\temp\___.tmp\Core\DataContainers\Modules\SimpleTableModule.php" errors="1" warnings="1" fixable="1">
    <warning line="82" column="114" source="Generic.Files.LineLength.TooLong" severity="5" fixable="0">Line exceeds 120 characters; contains 123 characters</warning>
    <error line="106" column="1" source="PSR2.Files.EndFileNewline.NoneFound" severity="5" fixable="1">Expected 1 newline at end of file; 0 found</error>
</file>
</phpcs>

Я не знаю, как это исправить, если бы вы могли дать мне несколько идей, я был бы очень счастлив.


person Simon Aberle    schedule 26.02.2019    source источник


Ответы (1)


Проблема решилась, заменил содержимое файла phpcs.bat на официальный скрипт:

@echo off
REM PHP_CodeSniffer detects violations of a defined coding standard.
REM 
REM @author    Greg Sherwood <[email protected]>
REM @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
REM @license   https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence

if "%PHP_PEAR_PHP_BIN%" neq "" (
    set PHPBIN=%PHP_PEAR_PHP_BIN%
) else set PHPBIN=php

"%PHPBIN%" "%~dp0\phpcs" %*

Скрипт в репозитории

Я пробовал это раньше, но это не сработало, я также дал себе полные права доступа к папке установки PHP. Похоже, теперь проблема устранена.

Тем не менее большое спасибо всем, кто заглянул.

Редактировать: я снова проверил свой bat-файл, и он не был полностью идентичен файлу из репозитория git. Я оставил свой старый код в качестве комментария в файле. После того, как я почистил это сегодня утром, сниффер больше не работал, после того, как я снова прочитал комментарии, функция снова заработала. Итак, вот полное содержимое файла в текущем рабочем состоянии:

@echo off
REM PHP_CodeSniffer detects violations of a defined coding standard.
REM 
REM @author    Greg Sherwood <[email protected]>
REM @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
REM @license   https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence

if "%PHP_PEAR_PHP_BIN%" neq "" (
    set PHPBIN=%PHP_PEAR_PHP_BIN%
) else set PHPBIN=php

"%PHPBIN%" "%~dp0\phpcs" %*
REM End of file

Мы подтвердили такое поведение на другом компьютере с таким же установленным программным обеспечением, так что проблема, похоже, в нем.

Edit2: кажется, что вам просто нужна строка комментария после последней строки исходного скрипта. Я обновил фрагмент кода, который использую в данный момент.

person Simon Aberle    schedule 26.02.2019
comment
В проект на GitHub добавлен тикет. - person Simon Aberle; 01.03.2019