|
@@ -0,0 +1,66 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+/*
|
|
|
+ * This file is part of PHP CS Fixer.
|
|
|
+ *
|
|
|
+ * (c) Fabien Potencier <fabien@symfony.com>
|
|
|
+ * Dariusz Rumiński <dariusz.ruminski@gmail.com>
|
|
|
+ *
|
|
|
+ * This source file is subject to the MIT license that is bundled
|
|
|
+ * with this source code in the file LICENSE.
|
|
|
+ */
|
|
|
+
|
|
|
+namespace PhpCsFixer\Fixer\Phpdoc;
|
|
|
+
|
|
|
+use PhpCsFixer\AbstractFixer;
|
|
|
+use PhpCsFixer\DocBlock\DocBlock;
|
|
|
+use PhpCsFixer\Tokenizer\Tokens;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
|
|
|
+ */
|
|
|
+final class PhpdocAnnotationWithoutDotFixer extends AbstractFixer
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public function isCandidate(Tokens $tokens)
|
|
|
+ {
|
|
|
+ return $tokens->isTokenKindFound(T_DOC_COMMENT);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public function fix(\SplFileInfo $file, Tokens $tokens)
|
|
|
+ {
|
|
|
+ foreach ($tokens as $token) {
|
|
|
+ if (!$token->isGivenKind(T_DOC_COMMENT)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $doc = new DocBlock($token->getContent());
|
|
|
+ $annotations = $doc->getAnnotations();
|
|
|
+
|
|
|
+ if (empty($annotations)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($annotations as $annotation) {
|
|
|
+ if ($annotation->getTag()->valid()) {
|
|
|
+ $line = $doc->getLine($annotation->getEnd());
|
|
|
+ $line->setContent(preg_replace('/[.。](\s+)$/u', '\1', $line->getContent()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $token->setContent($doc->getContent());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * {@inheritdoc}
|
|
|
+ */
|
|
|
+ public function getDescription()
|
|
|
+ {
|
|
|
+ return 'Phpdocs annotation descriptions should not end with a full stop.';
|
|
|
+ }
|
|
|
+}
|