Skip to content

Commit

Permalink
Generic/DisallowTabIndent: do not auto-fix heredoc/nowdoc closer indent
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
jrfnl committed Jul 4, 2024
1 parent 71326b4 commit 9127ff1
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,14 @@ public function process(File $phpcsFile, $stackPtr)
continue;
}

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

$fix = $phpcsFile->addFixableError($error, $i, $errorCode);
if ($fix === true) {
if (isset($tokens[$i]['orig_content']) === true) {
Expand Down

This file was deleted.

0 comments on commit 9127ff1

Please sign in to comment.