diff --git a/packages/coding-standard/src/Fixer/Commenting/FixTagTypoFixer.php b/packages/coding-standard/src/Fixer/Commenting/FixTagTypoFixer.php new file mode 100644 index 0000000000..e9e8e6148d --- /dev/null +++ b/packages/coding-standard/src/Fixer/Commenting/FixTagTypoFixer.php @@ -0,0 +1,37 @@ + $tokens + */ + protected function processDocContent(string $docContent, Tokens $tokens, int $position): string + { + return Regex::replace($docContent, self::PLURAL_TAG_REGEX, '@$1'); + } +} diff --git a/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/FixTagTypoFixerTest.php b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/FixTagTypoFixerTest.php new file mode 100644 index 0000000000..c772926638 --- /dev/null +++ b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/FixTagTypoFixerTest.php @@ -0,0 +1,28 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFiles(__DIR__ . '/Fixture'); + } + + public function provideConfig(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/Fixture/plural_tags.php.inc b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/Fixture/plural_tags.php.inc new file mode 100644 index 0000000000..e056b30567 --- /dev/null +++ b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/Fixture/plural_tags.php.inc @@ -0,0 +1,25 @@ + +----- + diff --git a/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/Fixture/skip_correct_tags.php.inc b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/Fixture/skip_correct_tags.php.inc new file mode 100644 index 0000000000..fb7e400029 --- /dev/null +++ b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/Fixture/skip_correct_tags.php.inc @@ -0,0 +1,10 @@ + +----- + diff --git a/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/config/configured_rule.php b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/config/configured_rule.php new file mode 100644 index 0000000000..5f07c1ff45 --- /dev/null +++ b/packages/coding-standard/tests/Fixer/Commenting/FixTagTypoFixer/config/configured_rule.php @@ -0,0 +1,10 @@ +rule(FixTagTypoFixer::class); +}; diff --git a/src/Config/Level/DocblockLevel.php b/src/Config/Level/DocblockLevel.php index 898f06f2fe..8ebd0dc7f9 100644 --- a/src/Config/Level/DocblockLevel.php +++ b/src/Config/Level/DocblockLevel.php @@ -35,6 +35,7 @@ use Symplify\CodingStandard\Fixer\Commenting\AddMissingVarNameFixer; use Symplify\CodingStandard\Fixer\Commenting\DoubleAsteriskInlineVarFixer; use Symplify\CodingStandard\Fixer\Commenting\FixParamNameTypoFixer; +use Symplify\CodingStandard\Fixer\Commenting\FixTagTypoFixer; use Symplify\CodingStandard\Fixer\Commenting\RemoveDeadParamFixer; use Symplify\CodingStandard\Fixer\Commenting\RemoveDeadVarThisFixer; use Symplify\CodingStandard\Fixer\Commenting\RemoveParamNameReferenceFixer; @@ -57,6 +58,9 @@ final class DocblockLevel * @var array> */ public const array RULES = [ + // tag name typos (@returns → @return), run early so later rules see correct tags + FixTagTypoFixer::class, + // inline @var DoubleAsteriskInlineVarFixer::class, RemoveDeadVarThisFixer::class, diff --git a/src/Configuration/ConfigInitializer.php b/src/Configuration/ConfigInitializer.php index 2877adce46..a7aad654a3 100644 --- a/src/Configuration/ConfigInitializer.php +++ b/src/Configuration/ConfigInitializer.php @@ -7,6 +7,7 @@ use Nette\Utils\FileSystem; use Symplify\EasyCodingStandard\Application\FileProcessorCollector; use Symplify\EasyCodingStandard\Console\Style\EasyCodingStandardStyle; +use Symplify\EasyCodingStandard\Contract\Application\FileProcessorInterface; final readonly class ConfigInitializer { @@ -21,7 +22,7 @@ public function __construct( public function areSomeCheckersRegistered(): bool { $fileProcessors = $this->fileProcessorCollector->getFileProcessors(); - return array_any($fileProcessors, fn ($fileProcessor): bool => $fileProcessor->getCheckers() !== []); + return array_any($fileProcessors, fn (FileProcessorInterface $fileProcessor): bool => $fileProcessor->getCheckers() !== []); } public function createConfig(string $projectDirectory): void