Skip to content

Commit bed152b

Browse files
committed
#22317: CodeSniffer should not mark correctly aligned DocBlock elements as code style violation.
1 parent 810780b commit bed152b

File tree

3 files changed

+161
-34
lines changed

3 files changed

+161
-34
lines changed

dev/tests/static/framework/Magento/Sniffs/Annotation/AnnotationFormatValidator.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,46 @@ public function validateTagGroupingFormat(File $phpcsFile, int $commentStartPtr)
249249
}
250250
}
251251

252+
/**
253+
* Validates tag aligning format
254+
*
255+
* @param File $phpcsFile
256+
* @param int $commentStartPtr
257+
*/
258+
public function validateTagAligningFormat(File $phpcsFile, int $commentStartPtr) : void
259+
{
260+
$tokens = $phpcsFile->getTokens();
261+
$noAlignmentPositions = [];
262+
$actualPositions = [];
263+
$stackPtr = null;
264+
foreach ($tokens[$commentStartPtr]['comment_tags'] as $position => $tag) {
265+
$content = $tokens[$tag]['content'];
266+
if (preg_match('/^@/', $content) && ($tokens[$tag]['line'] === $tokens[$tag + 2]['line'])) {
267+
$noAlignmentPositions[] = $tokens[$tag + 1]['column'] + 1;
268+
$actualPositions[] = $tokens[$tag + 2]['column'];
269+
$stackPtr = $stackPtr ?? $tag;
270+
}
271+
272+
}
273+
274+
if (!$this->allTagsAligned($actualPositions)
275+
&& !$this->noneTagsAligned($actualPositions, $noAlignmentPositions)) {
276+
$phpcsFile->addFixableError(
277+
'Tags visual alignment must be consistent',
278+
$stackPtr,
279+
'MethodArguments'
280+
);
281+
}
282+
}
283+
284+
private function allTagsAligned(array $actualPositions) {
285+
return count(array_unique($actualPositions)) === 1;
286+
}
287+
288+
private function noneTagsAligned(array $actualPositions, array $noAlignmentPositions) {
289+
return $actualPositions === $noAlignmentPositions;
290+
}
291+
252292
/**
253293
* Validates extra newline before short description
254294
*

dev/tests/static/framework/Magento/Sniffs/Annotation/MethodAnnotationStructureSniff.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public function process(File $phpcsFile, $stackPtr)
7575
$emptyTypeTokens
7676
);
7777
$this->annotationFormatValidator->validateTagGroupingFormat($phpcsFile, $commentStartPtr);
78+
$this->annotationFormatValidator->validateTagAligningFormat($phpcsFile, $commentStartPtr);
7879
}
7980
}
8081
}

0 commit comments

Comments
 (0)