Skip to content

FunctionCallSignature sniffs do not support here/nowdoc syntax and can cause syntax error when fixing #457

@aik099

Description

@aik099

I run following command on the https://github.com/stecman/symfony-console-completion project:

phpcbf --standard=PSR2 src tests

and I get this notice, when trying to fix CompletionCommand.php file:

PHP Notice:  Undefined offset: 192 in /usr/local/lib/php/PHP/CodeSniffer/Tokenizers/PHP.php on line 528
PHP Stack trace:
PHP   1. {main}() /usr/local/bin/phpcbf:0
PHP   2. PHP_CodeSniffer_CLI->runphpcbf() /usr/local/bin/phpcbf:23
PHP   3. PHP_CodeSniffer_CLI->process($values = array ('files' => array (0 => '.../src', 1 => '.../tests'), 'standard' => array (0 => 'PSR2'), 'verbosity' => 0, 'interactive' => FALSE, 'colors' => TRUE, 'explain' => FALSE, 'local' => FALSE, 'showSources' => FALSE, 'extensions' => array (), 'sniffs' => array (), 'ignored' => array (), 'reportFile' => NULL, 'generator' => '', 'reports' => array ('diff' => '.../phpcbf-fixed.diff'), 'errorSeverity' => NULL, 'warningSeverity' => NULL, 'tabWidth' => 0, 'encoding' => 'iso-8859-1', 'reportWidth' => NULL, 'showProgress' => FALSE)) /usr/local/lib/php/PHP/CodeSniffer/CLI.php:164
PHP   4. PHP_CodeSniffer->processFiles($files = array (0 => '.../src', 1 => '.../tests'), $local = FALSE) /usr/local/lib/php/PHP/CodeSniffer/CLI.php:867
PHP   5. PHP_CodeSniffer->processFile($file = '.../src/CompletionCommand.php', $contents = NULL) /usr/local/lib/php/PHP/CodeSniffer.php:619
PHP   6. PHP_CodeSniffer_Reporting->cacheFileReport($phpcsFile = class PHP_CodeSniffer_File { private $_file = '.../src/CompletionCommand.php'; public $eolChar = '\n'; public $phpcs = class PHP_CodeSniffer { protected $file = '.../src/CompletionCommand.php'; public $cli = class PHP_CodeSniffer_CLI { ... }; public $reporting = class PHP_CodeSniffer_Reporting { ... }; protected $listeners = array (...); protected $sniffs = array (...); private $_tokenListeners = array (...); protected $ruleset = array (...); protected $ignorePatterns = array (...); public $allowedFileExtensions = array (...); public $defaultFileExtensions = array (...) }; public $fixer = class PHP_CodeSniffer_Fixer { public $enabled = TRUE; public $loops = 2; private $_currentFile = ...; private $_tokens = array (...); private $_fixedTokens = array (...); private $_oldTokenValues = array (...); private $_changeset = array (...); private $_inChangeset = FALSE; private $_numFixes = 2 }; public $tokenizer = class PHP_CodeSniffer_Tokenizers_PHP { public $scopeOpeners = array (...); public $endScopeTokens = array (...) }; public $tokenizerType = 'PHP'; public $numTokens = 528; private $_tokens = array (0 => array (...), 1 => array (...), 2 => array (...), 3 => array (...), 4 => array (...), 5 => array (...), 6 => array (...), 7 => array (...), 8 => array (...), 9 => array (...), 10 => array (...), 11 => array (...), 12 => array (...), 13 => array (...), 14 => array (...), 15 => array (...), 16 => array (...), 17 => array (...), 18 => array (...), 19 => array (...), 20 => array (...), 21 => array (...), 22 => array (...), 23 => array (...), 24 => array (...), 25 => array (...), 26 => array (...), 27 => array (...), 28 => array (...), 29 => array (...), 30 => array (...), 31 => array (...), 32 => array (...), 33 => array (...), 34 => array (...), 35 => array (...), 36 => array (...), 37 => array (...), 38 => array (...), 39 => array (...), 40 => array (...), 41 => array (...), 42 => array (...), 43 => array (...), 44 => array (...), 45 => array (...), 46 => array (...), 47 => array (...), 48 => array (...), 49 => array (...), 50 => array (...), 51 => array (...), 52 => array (...), 53 => array (...), 54 => array (...), 55 => array (...), 56 => array (...), 57 => array (...), 58 => array (...), 59 => array (...), 60 => array (...), 61 => array (...), 62 => array (...), 63 => array (...), 64 => array (...), 65 => array (...), 66 => array (...), 67 => array (...), 68 => array (...), 69 => array (...), 70 => array (...), 71 => array (...), 72 => array (...), 73 => array (...), 74 => array (...), 75 => array (...), 76 => array (...), 77 => array (...), 78 => array (...), 79 => array (...), 80 => array (...), 81 => array (...), 82 => array (...), 83 => array (...), 84 => array (...), 85 => array (...), 86 => array (...), 87 => array (...), 88 => array (...), 89 => array (...), 90 => array (...), 91 => array (...), 92 => array (...), 93 => array (...), 94 => array (...), 95 => array (...), 96 => array (...), 97 => array (...), 98 => array (...), 99 => array (...), 100 => array (...), 101 => array (...), 102 => array (...), 103 => array (...), 104 => array (...), 105 => array (...), 106 => array (...), 107 => array (...), 108 => array (...), 109 => array (...), 110 => array (...), 111 => array (...), 112 => array (...), 113 => array (...), 114 => array (...), 115 => array (...), 116 => array (...), 117 => array (...), 118 => array (...), 119 => array (...), 120 => array (...), 121 => array (...), 122 => array (...), 123 => array (...), 124 => array (...), 125 => array (...), 126 => array (...), 127 => array (...), ...); private $_errors = array (); private $_warnings = array (); private $_metrics = array ('Number of newlines at EOF' => array (...), 'Declarations and side effects mixed' => array (...), 'PHP short open tag used' => array (...), 'EOL char' => array (...), 'PHP closing tag at EOF' => array (...), 'Line length' => array (...), 'Line indent' => array (...), 'PHP keyword case' => array (...), 'Multiple statements on same line' => array (...), 'Class opening brace placement' => array (...), 'One class per file' => array (...), 'Class defined in namespace' => array (...), 'CamelCase class name' => array (...), 'CamelCase method name' => array (...), 'Function opening brace placement' => array (...), 'PHP constant case' => array (...), 'Spaces after control structure open parenthesis' => array (...), 'Spaces before control structure close parenthesis' => array (...), 'Control structure defined inline' => array (...)); private $_recordErrors = TRUE; private $_ignoredLines = array (); private $_ignoredListeners = array (); private $_ignoredCodes = array (); private $_errorCount = 0; private $_warningCount = 0; private $_fixableCount = 0; private $_listeners = array (372 => array (...), 381 => array (...), 340 => array (...), 334 => array (...), 307 => array (...), 309 => array (...), 1029 => array (...), 1031 => array (...), 354 => array (...), 356 => array (...), 355 => array (...), 303 => array (...), 302 => array (...), 327 => array (...), 301 => array (...), 318 => array (...), 322 => array (...), 320 => array (...), 317 => array (...), 337 => array (...), 338 => array (...), 373 => array (...), 311 => array (...), 374 => array (...), 375 => array (...), 370 => array (...), 1201 => array (...), 1046 => array (...), 1013 => array (...), 353 => array (...), 347 => array (...), 362 => array (...), 326 => array (...), 331 => array (...), 363 => array (...), 329 => array (...), 298 => array (...), 335 => array (...), 332 => array (...), 324 => array (...), 330 => array (...), 316 => array (...), 352 => array (...), 325 => array (...), 321 => array (...), 323 => array (...), 304 => array (...), 328 => array (...), 319 => array (...), 260 => array (...), 300 => array (...), 357 => array (...), 346 => array (...), 1109 => array (...), 342 => array (...), 333 => array (...), 358 => array (...), 262 => array (...), 261 => array (...), 288 => array (...), 341 => array (...), 351 => array (...), 361 => array (...), 265 => array (...), 263 => array (...), 264 => array (...), 299 => array (...), 266 => array (...), 345 => array (...), 344 => array (...), 343 => array (...), 259 => array (...), 258 => array (...), 336 => array (...), 348 => array (...), 339 => array (...), 350 => array (...), 349 => array (...), 1012 => array (...), 1011 => array (...), 1010 => array (...), 1035 => array (...), 1037 => array (...)); private $_activeListener = ''; private $_listenerTimes = array (); protected $ruleset = array ('Generic.PHP.DisallowShortOpenTag.EchoFound' => array (...), 'Generic.Files.LineEndings' => array (...), 'Generic.Files.LineLength' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace.StartFile' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace.EndFile' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines' => array (...), 'Generic.WhiteSpace.ScopeIndent' => array (...), 'Squiz.Functions.FunctionDeclarationArgumentSpacing' => array (...), 'Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint' => array (...), 'PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket' => array (...), 'Squiz.ControlStructures.ControlSignature' => array (...)) }, $cliValues = array ('files' => array (0 => '.../src', 1 => '.../tests'), 'standard' => array (0 => 'PSR2'), 'verbosity' => 0, 'interactive' => FALSE, 'colors' => TRUE, 'explain' => FALSE, 'local' => FALSE, 'showSources' => FALSE, 'extensions' => array (), 'sniffs' => array (), 'ignored' => array (), 'reportFile' => NULL, 'generator' => '', 'reports' => array ('diff' => '.../phpcbf-fixed.diff'), 'errorSeverity' => NULL, 'warningSeverity' => NULL, 'tabWidth' => 4, 'encoding' => 'iso-8859-1', 'reportWidth' => NULL, 'showProgress' => FALSE)) /usr/local/lib/php/PHP/CodeSniffer.php:1706
PHP   7. PHP_CodeSniffer_Reports_Diff->generateFileReport($report = array ('filename' => '.../src/CompletionCommand.php', 'errors' => 7, 'warnings' => 2, 'fixable' => 7, 'messages' => array (10 => array (...), 22 => array (...), 43 => array (...), 55 => array (...), 58 => array (...), 88 => array (...), 94 => array (...))), $phpcsFile = class PHP_CodeSniffer_File { private $_file = '.../src/CompletionCommand.php'; public $eolChar = '\n'; public $phpcs = class PHP_CodeSniffer { protected $file = '.../src/CompletionCommand.php'; public $cli = class PHP_CodeSniffer_CLI { ... }; public $reporting = class PHP_CodeSniffer_Reporting { ... }; protected $listeners = array (...); protected $sniffs = array (...); private $_tokenListeners = array (...); protected $ruleset = array (...); protected $ignorePatterns = array (...); public $allowedFileExtensions = array (...); public $defaultFileExtensions = array (...) }; public $fixer = class PHP_CodeSniffer_Fixer { public $enabled = TRUE; public $loops = 2; private $_currentFile = ...; private $_tokens = array (...); private $_fixedTokens = array (...); private $_oldTokenValues = array (...); private $_changeset = array (...); private $_inChangeset = FALSE; private $_numFixes = 2 }; public $tokenizer = class PHP_CodeSniffer_Tokenizers_PHP { public $scopeOpeners = array (...); public $endScopeTokens = array (...) }; public $tokenizerType = 'PHP'; public $numTokens = 528; private $_tokens = array (0 => array (...), 1 => array (...), 2 => array (...), 3 => array (...), 4 => array (...), 5 => array (...), 6 => array (...), 7 => array (...), 8 => array (...), 9 => array (...), 10 => array (...), 11 => array (...), 12 => array (...), 13 => array (...), 14 => array (...), 15 => array (...), 16 => array (...), 17 => array (...), 18 => array (...), 19 => array (...), 20 => array (...), 21 => array (...), 22 => array (...), 23 => array (...), 24 => array (...), 25 => array (...), 26 => array (...), 27 => array (...), 28 => array (...), 29 => array (...), 30 => array (...), 31 => array (...), 32 => array (...), 33 => array (...), 34 => array (...), 35 => array (...), 36 => array (...), 37 => array (...), 38 => array (...), 39 => array (...), 40 => array (...), 41 => array (...), 42 => array (...), 43 => array (...), 44 => array (...), 45 => array (...), 46 => array (...), 47 => array (...), 48 => array (...), 49 => array (...), 50 => array (...), 51 => array (...), 52 => array (...), 53 => array (...), 54 => array (...), 55 => array (...), 56 => array (...), 57 => array (...), 58 => array (...), 59 => array (...), 60 => array (...), 61 => array (...), 62 => array (...), 63 => array (...), 64 => array (...), 65 => array (...), 66 => array (...), 67 => array (...), 68 => array (...), 69 => array (...), 70 => array (...), 71 => array (...), 72 => array (...), 73 => array (...), 74 => array (...), 75 => array (...), 76 => array (...), 77 => array (...), 78 => array (...), 79 => array (...), 80 => array (...), 81 => array (...), 82 => array (...), 83 => array (...), 84 => array (...), 85 => array (...), 86 => array (...), 87 => array (...), 88 => array (...), 89 => array (...), 90 => array (...), 91 => array (...), 92 => array (...), 93 => array (...), 94 => array (...), 95 => array (...), 96 => array (...), 97 => array (...), 98 => array (...), 99 => array (...), 100 => array (...), 101 => array (...), 102 => array (...), 103 => array (...), 104 => array (...), 105 => array (...), 106 => array (...), 107 => array (...), 108 => array (...), 109 => array (...), 110 => array (...), 111 => array (...), 112 => array (...), 113 => array (...), 114 => array (...), 115 => array (...), 116 => array (...), 117 => array (...), 118 => array (...), 119 => array (...), 120 => array (...), 121 => array (...), 122 => array (...), 123 => array (...), 124 => array (...), 125 => array (...), 126 => array (...), 127 => array (...), ...); private $_errors = array (); private $_warnings = array (); private $_metrics = array ('Number of newlines at EOF' => array (...), 'Declarations and side effects mixed' => array (...), 'PHP short open tag used' => array (...), 'EOL char' => array (...), 'PHP closing tag at EOF' => array (...), 'Line length' => array (...), 'Line indent' => array (...), 'PHP keyword case' => array (...), 'Multiple statements on same line' => array (...), 'Class opening brace placement' => array (...), 'One class per file' => array (...), 'Class defined in namespace' => array (...), 'CamelCase class name' => array (...), 'CamelCase method name' => array (...), 'Function opening brace placement' => array (...), 'PHP constant case' => array (...), 'Spaces after control structure open parenthesis' => array (...), 'Spaces before control structure close parenthesis' => array (...), 'Control structure defined inline' => array (...)); private $_recordErrors = TRUE; private $_ignoredLines = array (); private $_ignoredListeners = array (); private $_ignoredCodes = array (); private $_errorCount = 0; private $_warningCount = 0; private $_fixableCount = 0; private $_listeners = array (372 => array (...), 381 => array (...), 340 => array (...), 334 => array (...), 307 => array (...), 309 => array (...), 1029 => array (...), 1031 => array (...), 354 => array (...), 356 => array (...), 355 => array (...), 303 => array (...), 302 => array (...), 327 => array (...), 301 => array (...), 318 => array (...), 322 => array (...), 320 => array (...), 317 => array (...), 337 => array (...), 338 => array (...), 373 => array (...), 311 => array (...), 374 => array (...), 375 => array (...), 370 => array (...), 1201 => array (...), 1046 => array (...), 1013 => array (...), 353 => array (...), 347 => array (...), 362 => array (...), 326 => array (...), 331 => array (...), 363 => array (...), 329 => array (...), 298 => array (...), 335 => array (...), 332 => array (...), 324 => array (...), 330 => array (...), 316 => array (...), 352 => array (...), 325 => array (...), 321 => array (...), 323 => array (...), 304 => array (...), 328 => array (...), 319 => array (...), 260 => array (...), 300 => array (...), 357 => array (...), 346 => array (...), 1109 => array (...), 342 => array (...), 333 => array (...), 358 => array (...), 262 => array (...), 261 => array (...), 288 => array (...), 341 => array (...), 351 => array (...), 361 => array (...), 265 => array (...), 263 => array (...), 264 => array (...), 299 => array (...), 266 => array (...), 345 => array (...), 344 => array (...), 343 => array (...), 259 => array (...), 258 => array (...), 336 => array (...), 348 => array (...), 339 => array (...), 350 => array (...), 349 => array (...), 1012 => array (...), 1011 => array (...), 1010 => array (...), 1035 => array (...), 1037 => array (...)); private $_activeListener = ''; private $_listenerTimes = array (); protected $ruleset = array ('Generic.PHP.DisallowShortOpenTag.EchoFound' => array (...), 'Generic.Files.LineEndings' => array (...), 'Generic.Files.LineLength' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace.StartFile' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace.EndFile' => array (...), 'Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines' => array (...), 'Generic.WhiteSpace.ScopeIndent' => array (...), 'Squiz.Functions.FunctionDeclarationArgumentSpacing' => array (...), 'Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint' => array (...), 'PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket' => array (...), 'Squiz.ControlStructures.ControlSignature' => array (...)) }, $showSources = FALSE, $width = NULL) /usr/local/lib/php/PHP/CodeSniffer/Reporting.php:160
PHP   8. PHP_CodeSniffer_Fixer->fixFile() /usr/local/lib/php/PHP/CodeSniffer/Reports/Diff.php:68
PHP   9. PHP_CodeSniffer_File->start($contents = '<?php\n\nnamespace Stecman\\Component\\Symfony\\Console\\BashCompletion;\n\nuse Symfony\\Component\\Console\\Command\\Command as SymfonyCommand;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\n\nclass CompletionCommand extends SymfonyCommand\n{\n\n    /**\n     * @var CompletionHandler\n     */\n    protected $handler;\n\n    protected function configure()\n    {\n        $this\n       ...') /usr/local/lib/php/PHP/CodeSniffer/Fixer.php:182
PHP  10. PHP_CodeSniffer_File->_parse($contents = '<?php\n\nnamespace Stecman\\Component\\Symfony\\Console\\BashCompletion;\n\nuse Symfony\\Component\\Console\\Command\\Command as SymfonyCommand;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\n\nclass CompletionCommand extends SymfonyCommand\n{\n\n    /**\n     * @var CompletionHandler\n     */\n    protected $handler;\n\n    protected function configure()\n    {\n        $this\n       ...') /usr/local/lib/php/PHP/CodeSniffer/File.php:471
PHP  11. PHP_CodeSniffer_File::tokenizeString($string = '<?php\n\nnamespace Stecman\\Component\\Symfony\\Console\\BashCompletion;\n\nuse Symfony\\Component\\Console\\Command\\Command as SymfonyCommand;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\n\nclass CompletionCommand extends SymfonyCommand\n{\n\n    /**\n     * @var CompletionHandler\n     */\n    protected $handler;\n\n    protected function configure()\n    {\n        $this\n       ...', $tokenizer = class PHP_CodeSniffer_Tokenizers_PHP { public $scopeOpeners = array (301 => array (...), 337 => array (...), 338 => array (...), 1109 => array (...), 303 => array (...), 302 => array (...), 320 => array (...), 322 => array (...), 356 => array (...), 334 => array (...), 354 => array (...), 355 => array (...), 381 => array (...), 318 => array (...), 317 => array (...), 327 => array (...), 329 => array (...), 330 => array (...), 376 => array (...)); public $endScopeTokens = array (1001 => 1001, 331 => 331, 377 => 377) }, $eolChar = '\n', $tabWidth = NULL, $encoding = NULL) /usr/local/lib/php/PHP/CodeSniffer/File.php:737
PHP  12. PHP_CodeSniffer_Tokenizers_PHP->tokenizeString($string = '<?php\n\nnamespace Stecman\\Component\\Symfony\\Console\\BashCompletion;\n\nuse Symfony\\Component\\Console\\Command\\Command as SymfonyCommand;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\n\nclass CompletionCommand extends SymfonyCommand\n{\n\n    /**\n     * @var CompletionHandler\n     */\n    protected $handler;\n\n    protected function configure()\n    {\n        $this\n       ...', $eolChar = '\n') /usr/local/lib/php/PHP/CodeSniffer/File.php:1469

Used PHP_CodeSniffer version: 2.2.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions