Skip to content

Commit 01b4cec

Browse files
committed
Generic/DisallowTabIndent: do not auto-fix heredoc/nowdoc closer indent
Follow up on squizlabs/PHP_CodeSniffer 3640, which added the `T_END_HEREDOC` and `T_END_NOWDOC` tokens to the list of tokens to examine and was included in the 3.7.2 release. When a flexible heredoc/nowdoc is used, the indentation type of the heredoc/nowdoc content and the indentation type of the heredoc/nowdoc closer must be consistent, so auto-fixing the indentation of the closer, without also changing the indentation of the contents (from tabs to spaces) would cause a parse error. See: https://3v4l.org/7OF3M I do believe indentation tabs should still be flagged, but the auto-fixer should be disabled. To allow people to disregard tab indentation for heredoc/nowdoc closers completely, the error now also has a more specific error code - ` TabsUsedHeredocCloser` -, which allows for excluding it in a ruleset. While the change in the error code _could_ be considered a breaking change, the fact that the potential for a parse error hasn't been reported as a bug so far, leads me to believe this is not a frequently encountered situation, so the impact of the higher specificity for the error code should be minimal.
1 parent 71326b4 commit 01b4cec

File tree

2 files changed

+8
-13
lines changed

2 files changed

+8
-13
lines changed

src/Standards/Generic/Sniffs/WhiteSpace/DisallowTabIndentSniff.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,14 @@ public function process(File $phpcsFile, $stackPtr)
169169
continue;
170170
}
171171

172+
// Report, but don't auto-fix tab identation for a PHP 7.3+ flexible heredoc/nowdoc closer.
173+
// Auto-fixing this would cause parse errors as the indentation of the heredoc/nowdoc contents
174+
// needs to use the same type of indentation. Also see: https://3v4l.org/7OF3M .
175+
if ($tokens[$i]['code'] === T_END_HEREDOC || $tokens[$i]['code'] === T_END_NOWDOC) {
176+
$phpcsFile->addError($error, $i, $errorCode.'HeredocCloser');
177+
continue;
178+
}
179+
172180
$fix = $phpcsFile->addFixableError($error, $i, $errorCode);
173181
if ($fix === true) {
174182
if (isset($tokens[$i]['orig_content']) === true) {

src/Standards/Generic/Tests/WhiteSpace/DisallowTabIndentUnitTest.3.inc.fixed

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)