From ed0888ca659466db30ccbd9ba16a55264f86df59 Mon Sep 17 00:00:00 2001 From: Thiemo Kreuz Date: Wed, 17 Jun 2020 08:34:55 +0200 Subject: [PATCH 1/2] Fix rare undefined offset errors in ConcatenationSpacingSniff This can happen when PHPCS runs on a file that is currently being worked on, but not yet completed. The file might end with a dot. We can not assume there are always 2 more tokens after a dot. --- .../Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php b/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php index 4125b63ad0..a5302d269a 100644 --- a/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php +++ b/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php @@ -79,10 +79,14 @@ public function process(File $phpcsFile, $stackPtr) $phpcsFile->recordMetric($stackPtr, 'Spacing before string concat', $before); } - if ($tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE) { + if (isset($tokens[($stackPtr + 1)]) === false + || $tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE + ) { $after = 0; } else { - if ($tokens[($stackPtr + 2)]['line'] !== $tokens[$stackPtr]['line']) { + if (isset($tokens[($stackPtr + 2)]) === true + && $tokens[($stackPtr + 2)]['line'] !== $tokens[$stackPtr]['line'] + ) { $after = 'newline'; } else { $after = $tokens[($stackPtr + 1)]['length']; From fd107c9235fcdaee44978967f38a58b150a31f37 Mon Sep 17 00:00:00 2001 From: Thiemo Kreuz Date: Wed, 17 Jun 2020 11:00:05 +0200 Subject: [PATCH 2/2] Don't report anything if the code is incomplete --- .../Sniffs/Strings/ConcatenationSpacingSniff.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php b/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php index a5302d269a..9d32e54a0a 100644 --- a/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php +++ b/src/Standards/Squiz/Sniffs/Strings/ConcatenationSpacingSniff.php @@ -55,6 +55,10 @@ public function register() public function process(File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens(); + if (isset($tokens[($stackPtr + 2)]) === false) { + // Syntax error or live coding, bow out. + return; + } $ignoreBefore = false; $prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true); @@ -79,14 +83,10 @@ public function process(File $phpcsFile, $stackPtr) $phpcsFile->recordMetric($stackPtr, 'Spacing before string concat', $before); } - if (isset($tokens[($stackPtr + 1)]) === false - || $tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE - ) { + if ($tokens[($stackPtr + 1)]['code'] !== T_WHITESPACE) { $after = 0; } else { - if (isset($tokens[($stackPtr + 2)]) === true - && $tokens[($stackPtr + 2)]['line'] !== $tokens[$stackPtr]['line'] - ) { + if ($tokens[($stackPtr + 2)]['line'] !== $tokens[$stackPtr]['line']) { $after = 'newline'; } else { $after = $tokens[($stackPtr + 1)]['length'];