getStmt(); $statementsSource = $event->getStatementsSource(); self::checkClassComment($stmt, $statementsSource); foreach ($stmt->getMethods() as $method) { self::checkMethodOrConstantComment($method, $statementsSource, 'method'); } foreach ($stmt->getConstants() as $constant) { self::checkMethodOrConstantComment($constant, $statementsSource, 'constant'); } } private static function checkClassComment(ClassLike $stmt, FileSource $statementsSource): void { $docblock = $stmt->getDocComment(); if ($docblock === null) { IssueBuffer::maybeAdd( new InvalidDocblock( 'PHPDoc is required for classes/interfaces in OCP.', new CodeLocation($statementsSource, $stmt) ) ); return; } try { $parsedDocblock = DocComment::parsePreservingLength($docblock); } catch (DocblockParseException $e) { IssueBuffer::maybeAdd( new InvalidDocblock( $e->getMessage(), new CodeLocation($statementsSource, $stmt) ) ); return; } if (!isset($parsedDocblock->tags['since'])) { IssueBuffer::maybeAdd( new InvalidDocblock( '@since is required for classes/interfaces in OCP.', new CodeLocation($statementsSource, $stmt) ) ); } if (isset($parsedDocblock->tags['depreacted'])) { IssueBuffer::maybeAdd( new InvalidDocblock( 'Typo in @deprecated for classes/interfaces in OCP.', new CodeLocation($statementsSource, $stmt) ) ); } } private static function checkMethodOrConstantComment(Stmt $stmt, FileSource $statementsSource, string $type): void { $docblock = $stmt->getDocComment(); if ($docblock === null) { IssueBuffer::maybeAdd( new InvalidDocblock( 'PHPDoc is required for ' . $type . 's in OCP.', new CodeLocation($statementsSource, $stmt) ), ); return; } try { $parsedDocblock = DocComment::parsePreservingLength($docblock); } catch (DocblockParseException $e) { IssueBuffer::maybeAdd( new InvalidDocblock( $e->getMessage(), new CodeLocation($statementsSource, $stmt) ) ); return; } if (!isset($parsedDocblock->tags['since'])) { IssueBuffer::maybeAdd( new InvalidDocblock( '@since is required for ' . $type . 's in OCP.', new CodeLocation($statementsSource, $stmt) ) ); } if (isset($parsedDocblock->tags['depreacted'])) { IssueBuffer::maybeAdd( new InvalidDocblock( 'Typo in @deprecated for ' . $type . ' in OCP.', new CodeLocation($statementsSource, $stmt) ) ); } } }