diff --git a/CHANGELOG.md b/CHANGELOG.md index a81ccb2..4ea7eab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ This project adheres to [Semantic Versioning](https://semver.org/). The format of this change log follows the advice given at [Keep a CHANGELOG](https://keepachangelog.com). ## [Unreleased] +### Fixed +- Fixed a recent regression by allowing to the `moodle.Files.BoilerplateComment` sniff to contain "extra" consecutive comment lines immediately after the official boilerplate ends. ## [v3.4.8] - 2024-06-14 ### Added diff --git a/moodle/Sniffs/Files/BoilerplateCommentSniff.php b/moodle/Sniffs/Files/BoilerplateCommentSniff.php index eb5f987..692f5b2 100644 --- a/moodle/Sniffs/Files/BoilerplateCommentSniff.php +++ b/moodle/Sniffs/Files/BoilerplateCommentSniff.php @@ -166,7 +166,23 @@ public function process(File $phpcsFile, $stackPtr): void return; } - $tokenptr++; + // Let's jump over all the extra (allowed) consecutive comments to find the first non-comment token. + $lastComment = $tokenptr; + $nextComment = $tokenptr; + while (($nextComment = $phpcsFile->findNext(T_COMMENT, ($nextComment + 1), null, false)) !== false) { + // Only \n is allowed as spacing since the previous comment line. + if (strpos($tokens[$nextComment - 1]['content'], "\n") === false) { + // Stop looking for consecutive comments, some spacing broke the sequence. + $nextComment = $lastComment; // Previous was the last one. + break; + } + if ($tokens[$nextComment]['line'] !== ($tokens[$lastComment]['line'] + 1)) { + // Stop looking for consecutive comments, the lines are not. + break; + } + $lastComment = $nextComment; + } + $tokenptr = $lastComment + 1; // Move to the last found comment + 1. $nextnonwhitespace = $phpcsFile->findNext(T_WHITESPACE, $tokenptr, null, true); diff --git a/moodle/Tests/fixtures/files/boilerplatecomment/ok2.php b/moodle/Tests/fixtures/files/boilerplatecomment/ok2.php index 61f4f1b..49f799c 100644 --- a/moodle/Tests/fixtures/files/boilerplatecomment/ok2.php +++ b/moodle/Tests/fixtures/files/boilerplatecomment/ok2.php @@ -13,5 +13,9 @@ // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . +// +// Note that extra lines after the official boilerplate are allowed +// to put any other information. We only will require the blank line +// after the whole boilerplate ends. class someclass { }