Skip to content

Commit

Permalink
ci: migrate ocp since checker to psalm
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Kesselberg <[email protected]>
  • Loading branch information
kesselb committed Jan 24, 2023
1 parent f867a2d commit 258c919
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 126 deletions.
2 changes: 0 additions & 2 deletions autotest-checkers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ php ./build/triple-dot-checker.php
RESULT=$(($RESULT+$?))
php ./build/htaccess-checker.php
RESULT=$(($RESULT+$?))
php ./build/OCPSinceChecker.php
RESULT=$(($RESULT+$?))
php ./build/files-checker.php
RESULT=$(($RESULT+$?))

Expand Down
124 changes: 0 additions & 124 deletions build/OCPSinceChecker.php

This file was deleted.

115 changes: 115 additions & 0 deletions build/psalm/OcpSinceChecker.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<?php

declare(strict_types=1);

/**
* @copyright 2023 Daniel Kesselberg <[email protected]>
*
* @author 2023 Daniel Kesselberg <[email protected]>
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/

use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\ClassLike;
use Psalm\CodeLocation;
use Psalm\DocComment;
use Psalm\Exception\DocblockParseException;
use Psalm\FileSource;
use Psalm\Issue\InvalidDocblock;
use Psalm\IssueBuffer;
use Psalm\Plugin\EventHandler\Event\AfterClassLikeVisitEvent;

class OcpSinceChecker implements Psalm\Plugin\EventHandler\AfterClassLikeVisitInterface {
public static function afterClassLikeVisit(AfterClassLikeVisitEvent $event): void {
$stmt = $event->getStmt();
$statementsSource = $event->getStatementsSource();

self::checkClassComment($stmt, $statementsSource);

foreach ($stmt->getMethods() as $method) {
self::checkMethodComment($method, $statementsSource);
}
}

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)
)
);
}
}

private static function checkMethodComment(Stmt $stmt, FileSource $statementsSource): void {
$docblock = $stmt->getDocComment();

if ($docblock === null) {
IssueBuffer::maybeAdd(
new InvalidDocblock(
'PHPDoc is required for methods 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 methods in OCP.',
new CodeLocation($statementsSource, $stmt)
)
);
}
}
}
4 changes: 4 additions & 0 deletions lib/public/Dashboard/RegisterWidgetEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@
class RegisterWidgetEvent extends Event {
private $manager;

/**
* @param IManager $manager
* @since 20.0.0
*/
public function __construct(IManager $manager) {
parent::__construct();

Expand Down
4 changes: 4 additions & 0 deletions lib/public/Files/Storage.php
Original file line number Diff line number Diff line change
Expand Up @@ -462,5 +462,9 @@ public function getAvailability();
*/
public function setAvailability($isAvailable);

/**
* @since 12.0.0
* @return mixed
*/
public function needsPartFile();
}
1 change: 1 addition & 0 deletions lib/public/Group/Backend/ABackend.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
abstract class ABackend implements GroupInterface {
/**
* @deprecated 14.0.0
* @since 14.0.0
*
* @param int $actions The action to check for
* @return bool
Expand Down
1 change: 1 addition & 0 deletions lib/public/User/Backend/ABackend.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
abstract class ABackend implements IUserBackend, UserInterface {
/**
* @deprecated 14.0.0
* @since 14.0.0
*
* @param int $actions The action to check for
* @return bool
Expand Down
1 change: 1 addition & 0 deletions psalm-ocp.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
>
<plugins>
<plugin filename="build/psalm/AppFrameworkTainter.php" />
<plugin filename="build/psalm/OcpSinceChecker.php" />
</plugins>
<projectFiles>
<directory name="lib/public"/>
Expand Down

0 comments on commit 258c919

Please sign in to comment.