From 00ed5d6b32ec64e3cef2d48d7ef6cdd2a710e7e6 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 15:06:21 +0200 Subject: [PATCH 01/22] =?UTF-8?q?=F0=9F=90=9B=20fix(qa):=20validate=20ICU?= =?UTF-8?q?=20patterns=20on=20locked=20segments=20at=20project=20creation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Model/ProjectCreation/ProjectManager.php | 8 +- lib/Model/ProjectCreation/QAProcessor.php | 76 ++++++++++++++- .../Model/ProjectCreation/QAProcessorTest.php | 96 ++++++++++++++++++- .../ProjectCreation/TestableQAProcessor.php | 26 +++-- 4 files changed, 191 insertions(+), 15 deletions(-) diff --git a/lib/Model/ProjectCreation/ProjectManager.php b/lib/Model/ProjectCreation/ProjectManager.php index bccb47f2f3..e7fa49f1d1 100644 --- a/lib/Model/ProjectCreation/ProjectManager.php +++ b/lib/Model/ProjectCreation/ProjectManager.php @@ -32,6 +32,7 @@ use Plugins\Features\SecondPassReview; use ReflectionException; use Throwable; +use TypeError; use Utils\ActiveMQ\AMQHandler; use Utils\ActiveMQ\WorkerClient; use Utils\AsyncTasks\Workers\ActivityLogWorker; @@ -215,7 +216,11 @@ protected function getJobCreationService(): JobCreationService */ protected function getQAProcessor(): QAProcessor { - return $this->qaProcessor ??= new QAProcessor($this->filter, $this->features); + return $this->qaProcessor ??= new QAProcessor( + $this->filter, + $this->features, + (bool) ($this->projectStructure->metadata[ProjectsMetadataMarshaller::ICU_ENABLED->value] ?? false), + ); } /** @@ -1017,6 +1022,7 @@ protected function storeSegments(int $fid): void /** * @throws Exception + * @throws TypeError */ private function insertSegmentNotesForFile(): void { diff --git a/lib/Model/ProjectCreation/QAProcessor.php b/lib/Model/ProjectCreation/QAProcessor.php index 301fd64a40..0b45101b2d 100644 --- a/lib/Model/ProjectCreation/QAProcessor.php +++ b/lib/Model/ProjectCreation/QAProcessor.php @@ -2,6 +2,9 @@ namespace Model\ProjectCreation; +use Exception; +use Matecat\ICU\MessagePatternComparator; +use Matecat\ICU\MessagePatternValidator; use Matecat\SubFiltering\MateCatFilter; use Model\FeaturesBase\FeatureSet; use Utils\LQA\QA; @@ -13,6 +16,10 @@ * selects the appropriate target string, converts back to Layer 0, and writes the results * onto each {@see TranslationTuple} in place. * + * When ICU is enabled for the project, the processor also detects ICU MessageFormat + * patterns in each segment and passes a {@see MessagePatternComparator} to QA so that + * ICU consistency is validated alongside tag checks. + * * Produces 4 scalars per tuple: * - translationLayer0: the QA-processed target (Layer 0) * - suggestionLayer0: same as translationLayer0 (may diverge in future) @@ -24,6 +31,7 @@ class QAProcessor public function __construct( private readonly MateCatFilter $filter, private readonly FeatureSet $features, + private readonly bool $icuEnabled = false, ) { } @@ -35,6 +43,8 @@ public function __construct( * @param ProjectStructure $projectStructure contains translations to process * @param string $sourceLang source language code (e.g. 'en-US') * @param string $targetLang target language code (e.g. 'it-IT') + * + * @throws Exception */ public function process( ProjectStructure $projectStructure, @@ -50,7 +60,14 @@ public function process( $source = $this->filter->fromLayer0ToLayer1($tuple->source); $target = $this->filter->fromLayer0ToLayer1($tuple->target); - $check = $this->createQA($source, $target); + [$comparator, $sourceContainsIcu] = $this->detectIcu( + $sourceLang, + $targetLang, + $tuple->source, + $tuple->target, + ); + + $check = $this->createQA($source, $target, $comparator, $sourceContainsIcu); $check->setFeatureSet($this->features); $check->setSourceSegLang($sourceLang); $check->setTargetSegLang($targetLang); @@ -70,12 +87,63 @@ public function process( } } + /** + * Detect ICU MessageFormat patterns in the source segment. + * + * Uses the raw Layer 0 content for detection because curly-bracket filter + * handlers are disabled by default at project-creation time, so ICU syntax + * survives the L0→L1 round-trip. + * + * @param string $sourceLang source language code + * @param string $targetLang target language code + * @param string $rawSource raw Layer 0 source content + * @param string $rawTarget raw Layer 0 target content + * + * @return array{0: ?MessagePatternComparator, 1: bool} + * [comparator (null when ICU is not detected), sourceContainsIcu flag] + */ + private function detectIcu( + string $sourceLang, + string $targetLang, + string $rawSource, + string $rawTarget, + ): array { + if (!$this->icuEnabled) { + return [null, false]; + } + + $sourceValidator = new MessagePatternValidator($sourceLang, $rawSource); + + $sourceContainsIcu = $sourceValidator->containsComplexSyntax() + && $sourceValidator->isValidSyntax(); + + if (!$sourceContainsIcu) { + return [null, false]; + } + + $targetValidator = new MessagePatternValidator($targetLang, $rawTarget); + + return [ + MessagePatternComparator::fromValidators($sourceValidator, $targetValidator), + true, + ]; + } + /** * Create a new QA instance. * Protected so test subclasses can override to inject stubs. + * + * @param string $source Layer 1 source segment + * @param string $target Layer 1 target segment + * @param MessagePatternComparator|null $comparator ICU pattern comparator (null when ICU not detected) + * @param bool $sourceContainsIcu whether the source contains ICU patterns */ - protected function createQA(string $source, string $target): QA - { - return new QA($source, $target); + protected function createQA( + string $source, + string $target, + ?MessagePatternComparator $comparator = null, + bool $sourceContainsIcu = false, + ): QA { + return new QA($source, $target, $comparator, $sourceContainsIcu); } } diff --git a/tests/unit/Model/ProjectCreation/QAProcessorTest.php b/tests/unit/Model/ProjectCreation/QAProcessorTest.php index fd2f7a4424..c33bd3fcf8 100644 --- a/tests/unit/Model/ProjectCreation/QAProcessorTest.php +++ b/tests/unit/Model/ProjectCreation/QAProcessorTest.php @@ -50,7 +50,7 @@ protected function setUp(): void * * @throws MockException */ - private function buildProcessor(?QA $qa = null): TestableQAProcessor + private function buildProcessor(?QA $qa = null, bool $icuEnabled = false): TestableQAProcessor { $filter = $this->createStub(MateCatFilter::class); $filter->method('fromLayer0ToLayer1') @@ -61,6 +61,7 @@ private function buildProcessor(?QA $qa = null): TestableQAProcessor $processor = new TestableQAProcessor( $filter, $this->createStub(FeatureSet::class), + $icuEnabled, ); if ($qa !== null) { @@ -247,4 +248,97 @@ public function appliesLayerConversions(): void // fromLayer1ToLayer0('L1:target text') → 'L0:L1:target text' $this->assertSame('L0:L1:target text', $tuple->translationLayer0); } + + // ── Test 6: ICU enabled + ICU source → comparator passed to createQA ─ + + /** + * @throws MockException + */ + #[Test] + public function passesComparatorWhenIcuEnabledAndSourceContainsIcu(): void + { + $qa = $this->buildQAStub(normalizedTarget: 'norm'); + + $icuSource = '{count, plural, one{# item} other{# items}}'; + $icuTarget = '{count, plural, one{# elemento} other{# elementi}}'; + + $tuple = $this->makeTuple(source: $icuSource, target: $icuTarget); + $this->projectStructure->translations = [ + 'tu-1' => [0 => $tuple], + ]; + + $processor = $this->buildProcessor($qa, icuEnabled: true); + $processor->process($this->projectStructure, 'en-US', 'it-IT'); + + $this->assertNotNull($processor->lastComparator); + $this->assertTrue($processor->lastSourceContainsIcu); + } + + // ── Test 7: ICU disabled + ICU source → no comparator ──────────── + + /** + * @throws MockException + */ + #[Test] + public function skipsIcuDetectionWhenIcuDisabled(): void + { + $qa = $this->buildQAStub(normalizedTarget: 'norm'); + + $icuSource = '{count, plural, one{# item} other{# items}}'; + $icuTarget = '{count, plural, one{# elemento} other{# elementi}}'; + + $tuple = $this->makeTuple(source: $icuSource, target: $icuTarget); + $this->projectStructure->translations = [ + 'tu-1' => [0 => $tuple], + ]; + + $processor = $this->buildProcessor($qa, icuEnabled: false); + $processor->process($this->projectStructure, 'en-US', 'it-IT'); + + $this->assertNull($processor->lastComparator); + $this->assertFalse($processor->lastSourceContainsIcu); + } + + // ── Test 8: ICU enabled + non-ICU source → no comparator ───────── + + /** + * @throws MockException + */ + #[Test] + public function skipsIcuDetectionWhenSourceHasNoIcuPatterns(): void + { + $qa = $this->buildQAStub(normalizedTarget: 'norm'); + + $tuple = $this->makeTuple(source: 'plain source text', target: 'plain target text'); + $this->projectStructure->translations = [ + 'tu-1' => [0 => $tuple], + ]; + + $processor = $this->buildProcessor($qa, icuEnabled: true); + $processor->process($this->projectStructure, 'en-US', 'it-IT'); + + $this->assertNull($processor->lastComparator); + $this->assertFalse($processor->lastSourceContainsIcu); + } + + // ── Test 9: ICU enabled + broken target → QA reports ICU errors ── + + #[Test] + public function reportsIcuValidationErrorsForBrokenTarget(): void + { + $icuSource = '{count, plural, one{# item} other{# items}}'; + $brokenTarget = '{count, plural, one{# elemento}}'; + + $tuple = $this->makeTuple(source: $icuSource, target: $brokenTarget); + $this->projectStructure->translations = [ + 'tu-1' => [0 => $tuple], + ]; + + // No QA stub — uses real QA so ICU validation actually runs + $processor = $this->buildProcessor(icuEnabled: true); + $processor->process($this->projectStructure, 'en-US', 'it-IT'); + + $this->assertSame(1, $tuple->warning); + $this->assertNotEmpty($tuple->serializedErrors); + } } diff --git a/tests/unit/Model/ProjectCreation/TestableQAProcessor.php b/tests/unit/Model/ProjectCreation/TestableQAProcessor.php index 03dbefff55..3f27f0c8f0 100644 --- a/tests/unit/Model/ProjectCreation/TestableQAProcessor.php +++ b/tests/unit/Model/ProjectCreation/TestableQAProcessor.php @@ -2,6 +2,7 @@ namespace unit\Model\ProjectCreation; +use Matecat\ICU\MessagePatternComparator; use Model\ProjectCreation\QAProcessor; use Utils\LQA\QA; @@ -12,19 +13,26 @@ class TestableQAProcessor extends QAProcessor { private ?QA $qaInstance = null; - /** - * Inject a QA stub/mock for tests. - */ + /** @var ?MessagePatternComparator Captures the comparator passed to the last createQA() call */ + public ?MessagePatternComparator $lastComparator = null; + + /** @var ?bool Captures the sourceContainsIcu flag passed to the last createQA() call */ + public ?bool $lastSourceContainsIcu = null; + public function setQA(QA $qa): void { $this->qaInstance = $qa; } - /** - * Override to return the injected QA instance instead of creating a real one. - */ - protected function createQA(string $source, string $target): QA - { - return $this->qaInstance ?? parent::createQA($source, $target); + protected function createQA( + string $source, + string $target, + ?MessagePatternComparator $comparator = null, + bool $sourceContainsIcu = false, + ): QA { + $this->lastComparator = $comparator; + $this->lastSourceContainsIcu = $sourceContainsIcu; + + return $this->qaInstance ?? parent::createQA($source, $target, $comparator, $sourceContainsIcu); } } From 49ce566fcd1dbedbc221ffb7f7e7e1a2af810774 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:16:31 +0000 Subject: [PATCH 02/22] refactor(qa): share ICU source detection logic across LQA flows Agent-Logs-Url: https://github.com/matecat/MateCat/sessions/fd68bba9-e500-4dc8-acc5-ca3dc0ec9264 Co-authored-by: Ostico <8008416+Ostico@users.noreply.github.com> --- lib/Model/ProjectCreation/QAProcessor.php | 4 ++-- lib/Utils/LQA/ICUSourceSegmentChecker.php | 9 +++++---- lib/Utils/LQA/ICUSourceSegmentDetector.php | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 lib/Utils/LQA/ICUSourceSegmentDetector.php diff --git a/lib/Model/ProjectCreation/QAProcessor.php b/lib/Model/ProjectCreation/QAProcessor.php index 0b45101b2d..d1257623c2 100644 --- a/lib/Model/ProjectCreation/QAProcessor.php +++ b/lib/Model/ProjectCreation/QAProcessor.php @@ -7,6 +7,7 @@ use Matecat\ICU\MessagePatternValidator; use Matecat\SubFiltering\MateCatFilter; use Model\FeaturesBase\FeatureSet; +use Utils\LQA\ICUSourceSegmentDetector; use Utils\LQA\QA; /** @@ -114,8 +115,7 @@ private function detectIcu( $sourceValidator = new MessagePatternValidator($sourceLang, $rawSource); - $sourceContainsIcu = $sourceValidator->containsComplexSyntax() - && $sourceValidator->isValidSyntax(); + $sourceContainsIcu = ICUSourceSegmentDetector::sourceContainsIcu($sourceValidator, $this->icuEnabled); if (!$sourceContainsIcu) { return [null, false]; diff --git a/lib/Utils/LQA/ICUSourceSegmentChecker.php b/lib/Utils/LQA/ICUSourceSegmentChecker.php index 8a99d9760e..229664aa3b 100644 --- a/lib/Utils/LQA/ICUSourceSegmentChecker.php +++ b/lib/Utils/LQA/ICUSourceSegmentChecker.php @@ -44,9 +44,10 @@ private function sourceContainsIcu(ProjectStruct $projectStruct, JobStruct $chun $sourceSegment, ); - if ($this->icuEnabled($projectStruct)) { - $this->sourceContainsIcu = $this->icuSourcePatternValidator->containsComplexSyntax() && $this->icuSourcePatternValidator->isValidSyntax(); - } + $this->sourceContainsIcu = ICUSourceSegmentDetector::sourceContainsIcu( + $this->icuSourcePatternValidator, + $this->icuEnabled($projectStruct) + ); return $this->sourceContainsIcu; @@ -66,4 +67,4 @@ private function icuEnabled(ProjectStruct $projectStruct): bool return $this->icuEnabled = $projectStruct->getMetadataValue(ProjectsMetadataMarshaller::ICU_ENABLED->value) ?? false; } -} \ No newline at end of file +} diff --git a/lib/Utils/LQA/ICUSourceSegmentDetector.php b/lib/Utils/LQA/ICUSourceSegmentDetector.php new file mode 100644 index 0000000000..96a899fe9e --- /dev/null +++ b/lib/Utils/LQA/ICUSourceSegmentDetector.php @@ -0,0 +1,21 @@ +containsComplexSyntax() + && $validator->isValidSyntax(); + } +} From d283bed8921d32da5d4bab9b66aa8758c0cb53c9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:17:35 +0000 Subject: [PATCH 03/22] docs(qa): add full phpdoc for shared ICU detector Agent-Logs-Url: https://github.com/matecat/MateCat/sessions/fd68bba9-e500-4dc8-acc5-ca3dc0ec9264 Co-authored-by: Ostico <8008416+Ostico@users.noreply.github.com> --- lib/Utils/LQA/ICUSourceSegmentDetector.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Utils/LQA/ICUSourceSegmentDetector.php b/lib/Utils/LQA/ICUSourceSegmentDetector.php index 96a899fe9e..0352f755ec 100644 --- a/lib/Utils/LQA/ICUSourceSegmentDetector.php +++ b/lib/Utils/LQA/ICUSourceSegmentDetector.php @@ -11,6 +11,11 @@ final class ICUSourceSegmentDetector { /** * Determines whether a source segment contains valid ICU MessageFormat patterns. + * + * @param MessagePatternValidator $validator ICU validator for the source segment + * @param bool $icuEnabled Whether ICU support is enabled for the current project + * + * @return bool True when ICU is enabled and the source has valid complex ICU syntax */ public static function sourceContainsIcu(MessagePatternValidator $validator, bool $icuEnabled): bool { From ef7938266b8554c9f0f79ddf799347451717aee7 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 15:11:35 +0200 Subject: [PATCH 04/22] =?UTF-8?q?=F0=9F=94=A7=20chore(phpstan):=20regenera?= =?UTF-8?q?te=20baseline=20for=20new=20@throws=20rules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - regenerate phpstan-baseline.neon to absorb 726 pre-existing @throws violations across 275 files - add phpstan-throws-backlog.txt listing all files to fix sequentially --- phpstan-baseline.neon | 4454 +++++++++++++++++++++++++++++++++++- phpstan-throws-backlog.txt | 283 +++ 2 files changed, 4706 insertions(+), 31 deletions(-) create mode 100644 phpstan-throws-backlog.txt diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 11ca388c21..9fbb95c4c8 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -6,12 +6,24 @@ parameters: count: 1 path: lib/Bootstrap.php + - + message: '#^Method Bootstrap\:\:formatOutputExceptions\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Bootstrap.php + - message: '#^Method Bootstrap\:\:getConfigurationForEnvironment\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: lib/Bootstrap.php + - + message: '#^Method Bootstrap\:\:initMandatoryPlugins\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Bootstrap.php + - message: '#^Parameter \#1 \$directory of function mkdir expects string, string\|null given\.$#' identifier: argument.type @@ -60,18 +72,72 @@ parameters: count: 1 path: lib/Bootstrap.php + - + message: '#^Method Controller\\API\\App\\AIAssistantController\:\:alternative_translations\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/AIAssistantController.php + + - + message: '#^Method Controller\\API\\App\\AIAssistantController\:\:alternative_translations\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 12 + path: lib/Controller/API/App/AIAssistantController.php + + - + message: '#^Method Controller\\API\\App\\AIAssistantController\:\:alternative_translations\(\) throws checked exception Matecat\\Locales\\InvalidLanguageException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/AIAssistantController.php + - message: '#^Method Controller\\API\\App\\AIAssistantController\:\:enqueueWorker\(\) has parameter \$params with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/AIAssistantController.php + - + message: '#^Method Controller\\API\\App\\AIAssistantController\:\:feedback\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/AIAssistantController.php + + - + message: '#^Method Controller\\API\\App\\AIAssistantController\:\:feedback\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 7 + path: lib/Controller/API/App/AIAssistantController.php + + - + message: '#^Method Controller\\API\\App\\AIAssistantController\:\:feedback\(\) throws checked exception Matecat\\Locales\\InvalidLanguageException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/AIAssistantController.php + - message: '#^Parameter \#1 \$json of function json_decode expects string, string\|null given\.$#' identifier: argument.type count: 3 path: lib/Controller/API/App/AIAssistantController.php + - + message: '#^Method Controller\\API\\App\\AjaxUtilsController\:\:clearNotCompletedUploads\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/AjaxUtilsController.php + + - + message: '#^Method Controller\\API\\App\\AjaxUtilsController\:\:clearNotCompletedUploads\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/AjaxUtilsController.php + + - + message: '#^Method Controller\\API\\App\\AjaxUtilsController\:\:ping\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/AjaxUtilsController.php + - message: '#^Cannot access offset ''host'' on array\{scheme\?\: string, host\?\: string, port\?\: int\<0, 65535\>, user\?\: string, pass\?\: string, path\?\: string, query\?\: string, fragment\?\: string\}\|false\.$#' identifier: offsetAccess.nonOffsetAccessible @@ -90,6 +156,18 @@ parameters: count: 1 path: lib/Controller/API/App/Authentication/ForgotPasswordController.php + - + message: '#^Method Controller\\API\\App\\Authentication\\ForgotPasswordController\:\:setNewPassword\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/Authentication/ForgotPasswordController.php + + - + message: '#^Method Controller\\API\\App\\Authentication\\ForgotPasswordController\:\:setNewPassword\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/Authentication/ForgotPasswordController.php + - message: '#^Parameter \#1 \$new_password of method Model\\Users\\Authentication\\PasswordResetModel\:\:resetPassword\(\) expects string, string\|false given\.$#' identifier: argument.type @@ -276,6 +354,18 @@ parameters: count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:delete\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 8 + path: lib/Controller/API/App/CommentController.php + + - + message: '#^Method Controller\\API\\App\\CommentController\:\:delete\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CommentController.php + - message: '#^Method Controller\\API\\App\\CommentController\:\:enqueueComment\(\) has parameter \$id_client with no type specified\.$#' identifier: missingType.parameter @@ -294,6 +384,12 @@ parameters: count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:enqueueComment\(\) throws checked exception Stomp\\Exception\\ConnectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CommentController.php + - message: '#^Method Controller\\API\\App\\CommentController\:\:enqueueDeleteCommentMessage\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter @@ -330,6 +426,12 @@ parameters: count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:enqueueDeleteCommentMessage\(\) throws checked exception Stomp\\Exception\\ConnectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CommentController.php + - message: '#^Method Controller\\API\\App\\CommentController\:\:filterUsers\(\) has parameter \$uidSentList with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -360,6 +462,12 @@ parameters: count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:getRange\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CommentController.php + - message: '#^Method Controller\\API\\App\\CommentController\:\:prepareCommentData\(\) has parameter \$request with no type specified\.$#' identifier: missingType.parameter @@ -372,18 +480,36 @@ parameters: count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:prepareCommentData\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 7 + path: lib/Controller/API/App/CommentController.php + - message: '#^Method Controller\\API\\App\\CommentController\:\:prepareMentionCommentData\(\) has parameter \$request with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:prepareMentionCommentData\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/CommentController.php + - message: '#^Method Controller\\API\\App\\CommentController\:\:projectData\(\) has parameter \$id_project with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:resolve\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CommentController.php + - message: '#^Method Controller\\API\\App\\CommentController\:\:resolveTeamMentions\(\) has parameter \$message with no type specified\.$#' identifier: missingType.parameter @@ -438,6 +564,12 @@ parameters: count: 1 path: lib/Controller/API/App/CommentController.php + - + message: '#^Method Controller\\API\\App\\CommentController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CommentController.php + - message: '#^Parameter \#1 \$body of class Stomp\\Transport\\Message constructor expects string, string\|false given\.$#' identifier: argument.type @@ -690,6 +822,24 @@ parameters: count: 1 path: lib/Controller/API/App/CreateProjectController.php + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:buildProjectStructure\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CreateProjectController.php + + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:buildProjectStructure\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 22 + path: lib/Controller/API/App/CreateProjectController.php + + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:clearSessionFiles\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CreateProjectController.php + - message: '#^Method Controller\\API\\App\\CreateProjectController\:\:generateTargetEngineAssociation\(\) has parameter \$mt_engine with no type specified\.$#' identifier: missingType.parameter @@ -726,6 +876,12 @@ parameters: count: 1 path: lib/Controller/API/App/CreateProjectController.php + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:getFileMetadata\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CreateProjectController.php + - message: '#^Method Controller\\API\\App\\CreateProjectController\:\:getFilesList\(\) has parameter \$arFiles with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -804,12 +960,24 @@ parameters: count: 1 path: lib/Controller/API/App/CreateProjectController.php + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validateMtEngine\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CreateProjectController.php + - message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validatePayableRateTemplate\(\) never returns Model\\PayableRates\\CustomPayableRateStruct so it can be removed from the return type\.$#' identifier: return.unusedType count: 1 path: lib/Controller/API/App/CreateProjectController.php + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validatePublicTMPenalty\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CreateProjectController.php + - message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validateQaModelTemplate\(\) has Exception in PHPDoc @throws tag but it''s not thrown\.$#' identifier: throws.unusedType @@ -822,12 +990,24 @@ parameters: count: 1 path: lib/Controller/API/App/CreateProjectController.php + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validateSourceLang\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CreateProjectController.php + - message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validateTargetLangs\(\) has parameter \$target_lang with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Controller/API/App/CreateProjectController.php + - + message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validateTargetLangs\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/CreateProjectController.php + - message: '#^Method Controller\\API\\App\\CreateProjectController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -1098,6 +1278,12 @@ parameters: count: 1 path: lib/Controller/API/App/DeleteContributionController.php + - + message: '#^Method Controller\\API\\App\\DeleteContributionController\:\:isRevision\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/DeleteContributionController.php + - message: '#^Method Controller\\API\\App\\DeleteContributionController\:\:updateSuggestionsArray\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -1122,6 +1308,18 @@ parameters: count: 1 path: lib/Controller/API/App/DeleteContributionController.php + - + message: '#^Method Controller\\API\\App\\DeleteContributionController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Controller/API/App/DeleteContributionController.php + + - + message: '#^Method Controller\\API\\App\\DeleteContributionController\:\:validateTheRequest\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/DeleteContributionController.php + - message: '#^PHPDoc tag @var has invalid value \(\$tm_key TmKeyStruct\)\: Unexpected token "\$tm_key", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -1152,12 +1350,24 @@ parameters: count: 1 path: lib/Controller/API/App/DeleteContributionController.php + - + message: '#^Method Controller\\API\\App\\DownloadAnalysisReportController\:\:download\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/DownloadAnalysisReportController.php + - message: '#^Method Controller\\API\\App\\DownloadAnalysisReportController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/DownloadAnalysisReportController.php + - + message: '#^Method Controller\\API\\App\\DownloadAnalysisReportController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/DownloadAnalysisReportController.php + - message: '#^Parameter \#1 \$message of class InvalidArgumentException constructor expects string, int given\.$#' identifier: argument.type @@ -1230,6 +1440,18 @@ parameters: count: 1 path: lib/Controller/API/App/EngineController.php + - + message: '#^Method Controller\\API\\App\\EngineController\:\:add\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 7 + path: lib/Controller/API/App/EngineController.php + + - + message: '#^Method Controller\\API\\App\\EngineController\:\:disable\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/EngineController.php + - message: '#^Method Controller\\API\\App\\EngineController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -1308,6 +1530,12 @@ parameters: count: 1 path: lib/Controller/API/App/FilesController.php + - + message: '#^Method Controller\\API\\App\\FilesController\:\:validateInteger\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/FilesController.php + - message: '#^Access to an undefined property object\:\:\$id_after\.$#' identifier: property.notFound @@ -1344,6 +1572,12 @@ parameters: count: 2 path: lib/Controller/API/App/GetContributionController.php + - + message: '#^Method Controller\\API\\App\\GetContributionController\:\:get\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 12 + path: lib/Controller/API/App/GetContributionController.php + - message: '#^Method Controller\\API\\App\\GetContributionController\:\:getCrossLanguages\(\) has parameter \$cross_language with no type specified\.$#' identifier: missingType.parameter @@ -1356,6 +1590,12 @@ parameters: count: 1 path: lib/Controller/API/App/GetContributionController.php + - + message: '#^Method Controller\\API\\App\\GetContributionController\:\:isRevision\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/GetContributionController.php + - message: '#^Method Controller\\API\\App\\GetContributionController\:\:rewriteContributionContexts\(\) has parameter \$request with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -1368,6 +1608,18 @@ parameters: count: 1 path: lib/Controller/API/App/GetContributionController.php + - + message: '#^Method Controller\\API\\App\\GetContributionController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Controller/API/App/GetContributionController.php + + - + message: '#^Method Controller\\API\\App\\GetContributionController\:\:validateTheRequest\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/GetContributionController.php + - message: '#^Parameter \#1 \$id_job of method Model\\Jobs\\MetadataDao\:\:get\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -1572,6 +1824,12 @@ parameters: count: 1 path: lib/Controller/API/App/GetSearchController.php + - + message: '#^Method Controller\\API\\App\\GetSearchController\:\:doSearch\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/GetSearchController.php + - message: '#^Method Controller\\API\\App\\GetSearchController\:\:getJobData\(\) has parameter \$job_id with no type specified\.$#' identifier: missingType.parameter @@ -1614,18 +1872,36 @@ parameters: count: 1 path: lib/Controller/API/App/GetSearchController.php + - + message: '#^Method Controller\\API\\App\\GetSearchController\:\:saveReplacementEvent\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 8 + path: lib/Controller/API/App/GetSearchController.php + - message: '#^Method Controller\\API\\App\\GetSearchController\:\:updateSegments\(\) has parameter \$search_results with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/GetSearchController.php + - + message: '#^Method Controller\\API\\App\\GetSearchController\:\:updateSegments\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/GetSearchController.php + - message: '#^Method Controller\\API\\App\\GetSearchController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/GetSearchController.php + - + message: '#^Method Controller\\API\\App\\GetSearchController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/GetSearchController.php + - message: '#^Offset ''segment_hash'' might not exist on Model\\Translations\\SegmentTranslationStruct\|null\.$#' identifier: offsetAccess.notFound @@ -1806,6 +2082,12 @@ parameters: count: 1 path: lib/Controller/API/App/GetSegmentsController.php + - + message: '#^Method Controller\\API\\App\\GetSegmentsController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/GetSegmentsController.php + - message: '#^Parameter \#1 \$id_job of method Model\\Jobs\\MetadataDao\:\:getSubfilteringCustomHandlers\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -1872,6 +2154,12 @@ parameters: count: 1 path: lib/Controller/API/App/GetTranslationMismatchesController.php + - + message: '#^Method Controller\\API\\App\\GetVolumeAnalysisController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/GetVolumeAnalysisController.php + - message: '#^Parameter \#2 \$features of class Model\\Analysis\\Status constructor expects Model\\FeaturesBase\\FeatureSet, Model\\FeaturesBase\\FeatureSet\|null given\.$#' identifier: argument.type @@ -1944,6 +2232,12 @@ parameters: count: 1 path: lib/Controller/API/App/GetWarningController.php + - + message: '#^Method Controller\\API\\App\\GetWarningController\:\:icuEnabled\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/GetWarningController.php + - message: '#^Method Controller\\API\\App\\GetWarningController\:\:invokeLocalWarningsOnFeatures\(\) has parameter \$src_content with no type specified\.$#' identifier: missingType.parameter @@ -2082,6 +2376,18 @@ parameters: count: 1 path: lib/Controller/API/App/HeartBeat.php + - + message: '#^Method Controller\\API\\App\\HeartBeat\:\:ping\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/HeartBeat.php + + - + message: '#^Method Controller\\API\\App\\IntentoController\:\:routingList\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/IntentoController.php + - message: '#^Ternary operator condition is always true\.$#' identifier: ternary.alwaysTrue @@ -2148,18 +2454,36 @@ parameters: count: 1 path: lib/Controller/API/App/OutsourceConfirmationController.php + - + message: '#^Method Controller\\API\\App\\OutsourceToController\:\:outsource\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/OutsourceToController.php + - message: '#^Method Controller\\API\\App\\OutsourceToController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/OutsourceToController.php + - + message: '#^Method Controller\\API\\App\\OutsourceToController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/OutsourceToController.php + - message: '#^Method Controller\\API\\App\\QualityFrameworkController\:\:renderQualityFramework\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/QualityFrameworkController.php + - + message: '#^Method Controller\\API\\App\\QualityFrameworkController\:\:renderQualityFramework\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/QualityFrameworkController.php + - message: '#^Method Controller\\API\\App\\RequestExportTMXController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -2184,12 +2508,36 @@ parameters: count: 1 path: lib/Controller/API/App/RequestExportTMXController.php + - + message: '#^Method Controller\\API\\App\\SetChunkCompletedController\:\:complete\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/SetChunkCompletedController.php + + - + message: '#^Method Controller\\API\\App\\SetChunkCompletedController\:\:isRevision\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/SetChunkCompletedController.php + - message: '#^Method Controller\\API\\App\\SetChunkCompletedController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/SetChunkCompletedController.php + - + message: '#^Method Controller\\API\\App\\SetChunkCompletedController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/SetChunkCompletedController.php + + - + message: '#^Method Controller\\API\\App\\SetChunkCompletedController\:\:validateTheRequest\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/SetChunkCompletedController.php + - message: '#^Parameter \#1 \$id_job of static method Model\\Jobs\\JobDao\:\:getByIdAndPassword\(\) expects int, string given\.$#' identifier: argument.type @@ -2208,12 +2556,24 @@ parameters: count: 1 path: lib/Controller/API/App/SetChunkCompletedController.php + - + message: '#^Method Controller\\API\\App\\SetCurrentSegmentController\:\:set\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/SetCurrentSegmentController.php + - message: '#^Method Controller\\API\\App\\SetCurrentSegmentController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/SetCurrentSegmentController.php + - + message: '#^Method Controller\\API\\App\\SetCurrentSegmentController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/SetCurrentSegmentController.php + - message: '#^Parameter \#1 \$value of function count expects array\|Countable, array\|string given\.$#' identifier: argument.type @@ -2316,12 +2676,30 @@ parameters: count: 1 path: lib/Controller/API/App/SetTranslationController.php + - + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:evalSetContribution\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Controller/API/App/SetTranslationController.php + - message: '#^Method Controller\\API\\App\\SetTranslationController\:\:getOldTranslation\(\) never returns null so it can be removed from the return type\.$#' identifier: return.unusedType count: 1 path: lib/Controller/API/App/SetTranslationController.php + - + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:getOldTranslation\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/SetTranslationController.php + + - + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:getOldTranslation\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/SetTranslationController.php + - message: '#^Method Controller\\API\\App\\SetTranslationController\:\:getTranslationObject\(\) has parameter \$saved_translation with no type specified\.$#' identifier: missingType.parameter @@ -2341,31 +2719,67 @@ parameters: path: lib/Controller/API/App/SetTranslationController.php - - message: '#^Method Controller\\API\\App\\SetTranslationController\:\:updateJobPEE\(\) has parameter \$new_translation with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:icuEnabled\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException count: 1 path: lib/Controller/API/App/SetTranslationController.php - - message: '#^Method Controller\\API\\App\\SetTranslationController\:\:updateJobPEE\(\) has parameter \$old_translation with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:isRevision\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException count: 1 path: lib/Controller/API/App/SetTranslationController.php - - message: '#^Method Controller\\API\\App\\SetTranslationController\:\:validateTheRequest\(\) should return array\{id_job\: numeric\-string, password\: string, received_password\: string, id_segment\: string, time_to_edit\: int\|numeric\-string, id_translator\: string, translation\: string, segment\: Model\\Segments\\SegmentStruct\|null, \.\.\.\} but returns array\{id_job\: non\-falsy\-string, password\: non\-falsy\-string, received_password\: string\|false, id_segment\: non\-falsy\-string, time_to_edit\: 0\|string, id_translator\: string\|false, translation\: string\|false, segment\: Model\\Segments\\SegmentStruct\|null, \.\.\.\}\.$#' - identifier: return.type + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:setSubFilteringBehavior\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException count: 1 path: lib/Controller/API/App/SetTranslationController.php - - message: '#^Offset ''locked'' might not exist on Model\\Translations\\SegmentTranslationStruct\|null\.$#' - identifier: offsetAccess.notFound - count: 1 + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:translate\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 9 path: lib/Controller/API/App/SetTranslationController.php - - message: '#^Offset ''match_type'' might not exist on Model\\Translations\\SegmentTranslationStruct\|null\.$#' + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:updateJobPEE\(\) has parameter \$new_translation with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: lib/Controller/API/App/SetTranslationController.php + + - + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:updateJobPEE\(\) has parameter \$old_translation with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: lib/Controller/API/App/SetTranslationController.php + + - + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:updateJobPEE\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/SetTranslationController.php + + - + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:validateTheRequest\(\) should return array\{id_job\: numeric\-string, password\: string, received_password\: string, id_segment\: string, time_to_edit\: int\|numeric\-string, id_translator\: string, translation\: string, segment\: Model\\Segments\\SegmentStruct\|null, \.\.\.\} but returns array\{id_job\: non\-falsy\-string, password\: non\-falsy\-string, received_password\: string\|false, id_segment\: non\-falsy\-string, time_to_edit\: 0\|string, id_translator\: string\|false, translation\: string\|false, segment\: Model\\Segments\\SegmentStruct\|null, \.\.\.\}\.$#' + identifier: return.type + count: 1 + path: lib/Controller/API/App/SetTranslationController.php + + - + message: '#^Method Controller\\API\\App\\SetTranslationController\:\:validateTheRequest\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/SetTranslationController.php + + - + message: '#^Offset ''locked'' might not exist on Model\\Translations\\SegmentTranslationStruct\|null\.$#' + identifier: offsetAccess.notFound + count: 1 + path: lib/Controller/API/App/SetTranslationController.php + + - + message: '#^Offset ''match_type'' might not exist on Model\\Translations\\SegmentTranslationStruct\|null\.$#' identifier: offsetAccess.notFound count: 1 path: lib/Controller/API/App/SetTranslationController.php @@ -2646,6 +3060,12 @@ parameters: count: 1 path: lib/Controller/API/App/SplitSegmentController.php + - + message: '#^Method Controller\\API\\App\\SplitSegmentController\:\:split\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/SplitSegmentController.php + - message: '#^Method Controller\\API\\App\\SplitSegmentController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -2712,6 +3132,12 @@ parameters: count: 1 path: lib/Controller/API/App/TmKeyManagementController.php + - + message: '#^Method Controller\\API\\App\\TmKeyManagementController\:\:_checkForAdaptiveEngines\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/TmKeyManagementController.php + - message: '#^Method Controller\\API\\App\\TmKeyManagementController\:\:sortKeysInTheRightOrder\(\) has parameter \$jobKeyList with no type specified\.$#' identifier: missingType.parameter @@ -2754,18 +3180,48 @@ parameters: count: 1 path: lib/Controller/API/App/TmKeyManagementController.php + - + message: '#^Method Controller\\API\\App\\UpdateJobKeysController\:\:isRevision\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/UpdateJobKeysController.php + - message: '#^Method Controller\\API\\App\\UpdateJobKeysController\:\:jobOwnerIsMe\(\) has parameter \$owner with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Controller/API/App/UpdateJobKeysController.php + - + message: '#^Method Controller\\API\\App\\UpdateJobKeysController\:\:validateTMKeysArray\(\) throws checked exception Swaggest\\JsonSchema\\Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/UpdateJobKeysController.php + - message: '#^Method Controller\\API\\App\\UpdateJobKeysController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/App/UpdateJobKeysController.php + - + message: '#^Method Controller\\API\\App\\UpdateJobKeysController\:\:validateTheRequest\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/UpdateJobKeysController.php + + - + message: '#^Method Controller\\API\\App\\UpdateJobKeysController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/App/UpdateJobKeysController.php + + - + message: '#^Method Controller\\API\\App\\UpdateJobKeysController\:\:validateTheRequest\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/UpdateJobKeysController.php + - message: '#^Parameter \#1 \$Json_clientKeys of static method Utils\\TmKeyManagement\\TmKeyManager\:\:mergeJsonKeys\(\) expects string, string\|false given\.$#' identifier: argument.type @@ -2808,6 +3264,12 @@ parameters: count: 1 path: lib/Controller/API/App/UserKeysController.php + - + message: '#^Method Controller\\API\\App\\UserKeysController\:\:getMemoryToUpdate\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/App/UserKeysController.php + - message: '#^Method Controller\\API\\App\\UserKeysController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -2844,6 +3306,12 @@ parameters: count: 1 path: lib/Controller/API/App/UserKeysController.php + - + message: '#^Method Controller\\API\\App\\XliffToTargetConverterController\:\:convert\(\) throws checked exception Klein\\Exceptions\\ResponseAlreadySentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/App/XliffToTargetConverterController.php + - message: '#^Parameter \#1 \$body of method Klein\\AbstractResponse\:\:body\(\) expects string\|null, string\|false given\.$#' identifier: argument.type @@ -2892,6 +3360,12 @@ parameters: count: 1 path: lib/Controller/API/Commons/Validators/Base.php + - + message: '#^Method Controller\\API\\Commons\\Validators\\Base\:\:onFailure\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/Commons/Validators/Base.php + - message: '#^Property Controller\\API\\Commons\\Validators\\Base\:\:\$_failureCallback \(Closure\|null\) does not accept callable\(\)\: mixed\.$#' identifier: assign.propertyType @@ -2910,6 +3384,12 @@ parameters: count: 1 path: lib/Controller/API/Commons/Validators/Base.php + - + message: '#^Method Controller\\API\\Commons\\Validators\\ChunkPasswordValidator\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/Commons/Validators/ChunkPasswordValidator.php + - message: '#^Method Controller\\API\\Commons\\Validators\\ChunkPasswordValidator\:\:getChunk\(\) should return Model\\Jobs\\JobStruct but returns Model\\Jobs\\JobStruct\|null\.$#' identifier: return.type @@ -2982,6 +3462,12 @@ parameters: count: 1 path: lib/Controller/API/Commons/Validators/JobPasswordValidator.php + - + message: '#^Method Controller\\API\\Commons\\Validators\\ProjectAccessTokenValidator\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/Commons/Validators/ProjectAccessTokenValidator.php + - message: '#^Property Controller\\API\\Commons\\Validators\\ProjectAccessTokenValidator\:\:\$accessToken \(string\) does not accept string\|false\|null\.$#' identifier: assign.propertyType @@ -3006,6 +3492,12 @@ parameters: count: 1 path: lib/Controller/API/Commons/Validators/ProjectAccessValidator.php + - + message: '#^Method Controller\\API\\Commons\\Validators\\ProjectPasswordValidator\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/Commons/Validators/ProjectPasswordValidator.php + - message: '#^Method Controller\\API\\Commons\\Validators\\ProjectPasswordValidator\:\:getPassword\(\) should return string but returns string\|null\.$#' identifier: return.type @@ -3054,6 +3546,18 @@ parameters: count: 1 path: lib/Controller/API/Commons/Validators/ProjectValidator.php + - + message: '#^Method Controller\\API\\Commons\\Validators\\ProjectValidator\:\:setFeature\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/Commons/Validators/ProjectValidator.php + + - + message: '#^Method Controller\\API\\Commons\\Validators\\ProjectValidator\:\:setIdProject\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/Commons/Validators/ProjectValidator.php + - message: '#^Method Controller\\API\\Commons\\Validators\\ProjectValidator\:\:setProject\(\) has no return type specified\.$#' identifier: missingType.return @@ -3084,6 +3588,12 @@ parameters: count: 1 path: lib/Controller/API/Commons/Validators/SegmentTranslationIssueValidator.php + - + message: '#^Method Controller\\API\\Commons\\Validators\\SegmentValidator\:\:_validate\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/Commons/Validators/SegmentValidator.php + - message: '#^PHPDoc tag @return with type mixed is not subtype of native type void\.$#' identifier: return.phpDocType @@ -3108,6 +3618,12 @@ parameters: count: 1 path: lib/Controller/API/Commons/ViewValidators/ViewLoginRedirectValidator.php + - + message: '#^Method Controller\\API\\GDrive\\GDriveController\:\:changeConversionParameters\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/GDrive/GDriveController.php + - message: '#^Method Controller\\API\\GDrive\\GDriveController\:\:doImport\(\) has parameter \$listOfIds with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -3162,6 +3678,12 @@ parameters: count: 1 path: lib/Controller/API/GDrive/OAuthController.php + - + message: '#^Method Controller\\API\\GDrive\\OAuthController\:\:__handleCode\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/GDrive/OAuthController.php + - message: '#^Method Controller\\API\\GDrive\\OAuthController\:\:__handleError\(\) has no return type specified\.$#' identifier: missingType.return @@ -3228,6 +3750,18 @@ parameters: count: 1 path: lib/Controller/API/V1/NewController.php + - + message: '#^Method Controller\\API\\V1\\NewController\:\:buildProjectStructure\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V1/NewController.php + + - + message: '#^Method Controller\\API\\V1\\NewController\:\:buildProjectStructure\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 21 + path: lib/Controller/API/V1/NewController.php + - message: '#^Method Controller\\API\\V1\\NewController\:\:generateTargetEngineAssociation\(\) has parameter \$mt_engine with no type specified\.$#' identifier: missingType.parameter @@ -3258,6 +3792,12 @@ parameters: count: 1 path: lib/Controller/API/V1/NewController.php + - + message: '#^Method Controller\\API\\V1\\NewController\:\:getFileMetadata\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V1/NewController.php + - message: '#^Method Controller\\API\\V1\\NewController\:\:getFilesList\(\) has parameter \$arFiles with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -3300,6 +3840,12 @@ parameters: count: 1 path: lib/Controller/API/V1/NewController.php + - + message: '#^Method Controller\\API\\V1\\NewController\:\:validateCharacterCounterMode\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V1/NewController.php + - message: '#^Method Controller\\API\\V1\\NewController\:\:validateDialectStrictParam\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -3354,6 +3900,12 @@ parameters: count: 1 path: lib/Controller/API/V1/NewController.php + - + message: '#^Method Controller\\API\\V1\\NewController\:\:validatePublicTMPenalty\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V1/NewController.php + - message: '#^Method Controller\\API\\V1\\NewController\:\:validateQaModel\(\) has Exception in PHPDoc @throws tag but it''s not thrown\.$#' identifier: throws.unusedType @@ -3936,6 +4488,30 @@ parameters: count: 1 path: lib/Controller/API/V2/DownloadController.php + - + message: '#^Method Controller\\API\\V2\\DownloadController\:\:_saveActivity\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/DownloadController.php + + - + message: '#^Method Controller\\API\\V2\\DownloadController\:\:_saveActivity\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/DownloadController.php + + - + message: '#^Method Controller\\API\\V2\\DownloadController\:\:downloadFile\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/DownloadController.php + + - + message: '#^Method Controller\\API\\V2\\DownloadController\:\:downloadFile\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Controller/API/V2/DownloadController.php + - message: '#^Method Controller\\API\\V2\\DownloadController\:\:getOutputContentsWithZipFiles\(\) has parameter \$output_content with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -3948,6 +4524,12 @@ parameters: count: 1 path: lib/Controller/API/V2/DownloadController.php + - + message: '#^Method Controller\\API\\V2\\DownloadController\:\:ifGlobalSightXliffRemoveTargetMarks\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/DownloadController.php + - message: '#^Method Controller\\API\\V2\\DownloadController\:\:startRemoteFileService\(\) has parameter \$output_content with no type specified\.$#' identifier: missingType.parameter @@ -4086,6 +4668,18 @@ parameters: count: 1 path: lib/Controller/API/V2/DownloadJobTMXController.php + - + message: '#^Method Controller\\API\\V2\\DownloadJobTMXController\:\:_saveActivity\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/DownloadJobTMXController.php + + - + message: '#^Method Controller\\API\\V2\\DownloadJobTMXController\:\:index\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/DownloadJobTMXController.php + - message: '#^PHPDoc tag @var has invalid value \(\$tmx SplTempFileObject\)\: Unexpected token "\$tmx", expected type at offset 28 on line 2$#' identifier: phpDoc.parseError @@ -4134,6 +4728,12 @@ parameters: count: 1 path: lib/Controller/API/V2/DownloadOriginalController.php + - + message: '#^Method Controller\\API\\V2\\DownloadOriginalController\:\:index\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Controller/API/V2/DownloadOriginalController.php + - message: '#^Offset ''basename'' might not exist on array\|string\.$#' identifier: offsetAccess.notFound @@ -4188,6 +4788,12 @@ parameters: count: 3 path: lib/Controller/API/V2/GlossaryFilesController.php + - + message: '#^Method Controller\\API\\V2\\GlossaryFilesController\:\:afterConstruct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/GlossaryFilesController.php + - message: '#^Method Controller\\API\\V2\\GlossaryFilesController\:\:extractCSV\(\) has no return type specified\.$#' identifier: missingType.return @@ -4260,6 +4866,12 @@ parameters: count: 1 path: lib/Controller/API/V2/JobsController.php + - + message: '#^Method Controller\\API\\V2\\JobsTranslatorsController\:\:get\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/JobsTranslatorsController.php + - message: '#^Parameter \#1 \$delivery_date of method Model\\Translators\\TranslatorsModel\:\:setDeliveryDate\(\) expects int\|string, string\|false\|null given\.$#' identifier: argument.type @@ -4302,6 +4914,12 @@ parameters: count: 1 path: lib/Controller/API/V2/MarkAllSegmentStatusController.php + - + message: '#^Method Controller\\API\\V2\\MemoryKeysController\:\:listKeys\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/MemoryKeysController.php + - message: '#^Property Model\\TmKeyManagement\\MemoryKeyStruct\:\:\$uid \(int\) does not accept int\|null\.$#' identifier: assign.propertyType @@ -4332,6 +4950,18 @@ parameters: count: 1 path: lib/Controller/API/V2/ProjectsController.php + - + message: '#^Method Controller\\API\\V2\\ProjectsController\:\:deleteDueDate\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/ProjectsController.php + + - + message: '#^Method Controller\\API\\V2\\ProjectsController\:\:updateDueDate\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/ProjectsController.php + - message: '#^Property Controller\\API\\V2\\ProjectsController\:\:\$project \(Model\\Projects\\ProjectStruct\) does not accept Model\\Projects\\ProjectStruct\|null\.$#' identifier: assign.propertyType @@ -4398,6 +5028,30 @@ parameters: count: 1 path: lib/Controller/API/V2/SegmentTranslationIssueController.php + - + message: '#^Method Controller\\API\\V2\\SegmentTranslationIssueController\:\:checkLoggedUserPermissions\(\) throws checked exception Controller\\API\\Commons\\Exceptions\\AuthorizationError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/SegmentTranslationIssueController.php + + - + message: '#^Method Controller\\API\\V2\\SegmentTranslationIssueController\:\:checkLoggedUserPermissions\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/V2/SegmentTranslationIssueController.php + + - + message: '#^Method Controller\\API\\V2\\SegmentTranslationIssueController\:\:create\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/SegmentTranslationIssueController.php + + - + message: '#^Method Controller\\API\\V2\\SegmentTranslationIssueController\:\:update\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/SegmentTranslationIssueController.php + - message: '#^Parameter \#1 \$entry of method Controller\\API\\V2\\SegmentTranslationIssueController\:\:checkLoggedUserPermissions\(\) expects Model\\LQA\\EntryStruct, Model\\LQA\\EntryStruct\|null given\.$#' identifier: argument.type @@ -4458,12 +5112,24 @@ parameters: count: 1 path: lib/Controller/API/V2/SplitJobController.php + - + message: '#^Method Controller\\API\\V2\\SplitJobController\:\:checkSplit\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/SplitJobController.php + - message: '#^Method Controller\\API\\V2\\SplitJobController\:\:checkSplitAccess\(\) has parameter \$jobList with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/V2/SplitJobController.php + - + message: '#^Method Controller\\API\\V2\\SplitJobController\:\:checkSplitAccess\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/SplitJobController.php + - message: '#^Method Controller\\API\\V2\\SplitJobController\:\:filterJobsById\(\) has parameter \$jobList with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -4482,12 +5148,24 @@ parameters: count: 1 path: lib/Controller/API/V2/SplitJobController.php + - + message: '#^Method Controller\\API\\V2\\SplitJobController\:\:merge\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/SplitJobController.php + - message: '#^Method Controller\\API\\V2\\SplitJobController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/V2/SplitJobController.php + - + message: '#^Method Controller\\API\\V2\\SplitJobController\:\:validateTheRequest\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Controller/API/V2/SplitJobController.php + - message: '#^PHPDoc tag @var has invalid value \(\$data SplitMergeProjectData\)\: Unexpected token "\$data", expected type at offset 10 on line 1$#' identifier: phpDoc.parseError @@ -4524,6 +5202,12 @@ parameters: count: 1 path: lib/Controller/API/V2/TeamMembersController.php + - + message: '#^Method Controller\\API\\V2\\TeamMembersController\:\:index\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/TeamMembersController.php + - message: '#^Parameter \#1 \$emails of method Model\\Teams\\TeamModel\:\:addMemberEmails\(\) expects array, array\\|false\|null given\.$#' identifier: argument.type @@ -4548,6 +5232,12 @@ parameters: count: 1 path: lib/Controller/API/V2/TeamsController.php + - + message: '#^Method Controller\\API\\V2\\TeamsController\:\:getTeamList\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/TeamsController.php + - message: '#^Parameter \#1 \$email of method Model\\Teams\\TeamModel\:\:addMemberEmail\(\) expects string, string\|false given\.$#' identifier: argument.type @@ -4572,6 +5262,12 @@ parameters: count: 1 path: lib/Controller/API/V2/TeamsController.php + - + message: '#^Method Controller\\API\\V2\\TeamsProjectsController\:\:_appendSingleProjectTeamValidators\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V2/TeamsProjectsController.php + - message: '#^Property Controller\\API\\V2\\TeamsProjectsController\:\:\$project \(Model\\Projects\\ProjectStruct\) does not accept Model\\Projects\\ProjectStruct\|null\.$#' identifier: assign.propertyType @@ -4608,6 +5304,18 @@ parameters: count: 1 path: lib/Controller/API/V2/UrlsController.php + - + message: '#^Method Controller\\API\\V2\\UserController\:\:edit\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/UserController.php + + - + message: '#^Method Controller\\API\\V2\\UserController\:\:setMetadata\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V2/UserController.php + - message: '#^Parameter \#1 \$json of function json_decode expects string, string\|null given\.$#' identifier: argument.type @@ -4650,6 +5358,12 @@ parameters: count: 1 path: lib/Controller/API/V3/CountWordController.php + - + message: '#^Method Controller\\API\\V3\\CountWordController\:\:afterConstruct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/CountWordController.php + - message: '#^PHPDoc tag @var has invalid value \(\$filter MateCatFilter\)\: Unexpected token "\$filter", expected type at offset 9 on line 1$#' identifier: phpDoc.parseError @@ -4770,6 +5484,12 @@ parameters: count: 1 path: lib/Controller/API/V3/DownloadQRController.php + - + message: '#^Method Controller\\API\\V3\\DownloadQRController\:\:download\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/API/V3/DownloadQRController.php + - message: '#^Parameter \#1 \$stream of function fclose expects resource, resource\|false given\.$#' identifier: argument.type @@ -4812,12 +5532,24 @@ parameters: count: 1 path: lib/Controller/API/V3/FileInfoController.php + - + message: '#^Method Controller\\API\\V3\\FileInfoController\:\:setInstructions\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/FileInfoController.php + - message: '#^Method Controller\\API\\V3\\FiltersConfigTemplateController\:\:validateJSON\(\) has parameter \$json with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Controller/API/V3/FiltersConfigTemplateController.php + - + message: '#^Method Controller\\API\\V3\\FiltersConfigTemplateController\:\:validateJSON\(\) throws checked exception Swaggest\\JsonSchema\\Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/FiltersConfigTemplateController.php + - message: '#^Parameter \#1 \$json of function json_decode expects string, string\|false given\.$#' identifier: argument.type @@ -4884,6 +5616,12 @@ parameters: count: 1 path: lib/Controller/API/V3/IssueCheckController.php + - + message: '#^Method Controller\\API\\V3\\LaraController\:\:glossaries\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/LaraController.php + - message: '#^Parameter \#2 \$engineId of class Controller\\API\\Commons\\Validators\\EngineOwnershipValidator constructor expects int, string\|false given\.$#' identifier: argument.type @@ -4956,6 +5694,12 @@ parameters: count: 1 path: lib/Controller/API/V3/ModernMTController.php + - + message: '#^Method Controller\\API\\V3\\ModernMTController\:\:extractCSV\(\) throws checked exception PhpOffice\\PhpSpreadsheet\\Writer\\Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/ModernMTController.php + - message: '#^Method Controller\\API\\V3\\ModernMTController\:\:filterResult\(\) has parameter \$memory with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -5064,6 +5808,12 @@ parameters: count: 1 path: lib/Controller/API/V3/ModernMTController.php + - + message: '#^Method Controller\\API\\V3\\MyMemoryController\:\:saveMemoryKey\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/MyMemoryController.php + - message: '#^Parameter \#1 \$json of function json_decode expects string, string\|null given\.$#' identifier: argument.type @@ -5106,6 +5856,12 @@ parameters: count: 1 path: lib/Controller/API/V3/PayableRateController.php + - + message: '#^Method Controller\\API\\V3\\PayableRateController\:\:validateJSON\(\) throws checked exception Swaggest\\JsonSchema\\Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/PayableRateController.php + - message: '#^Parameter \#1 \$json of class Utils\\Validator\\JSONSchema\\JSONValidatorObject constructor expects string, string\|null given\.$#' identifier: argument.type @@ -5232,6 +5988,12 @@ parameters: count: 1 path: lib/Controller/API/V3/QAModelTemplateController.php + - + message: '#^Method Controller\\API\\V3\\QAModelTemplateController\:\:validateJSON\(\) throws checked exception Swaggest\\JsonSchema\\Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/QAModelTemplateController.php + - message: '#^Parameter \#1 \$json of class Utils\\Validator\\JSONSchema\\JSONValidatorObject constructor expects string, string\|null given\.$#' identifier: argument.type @@ -5298,6 +6060,12 @@ parameters: count: 1 path: lib/Controller/API/V3/QualityReportControllerAPI.php + - + message: '#^Method Controller\\API\\V3\\QualityReportControllerAPI\:\:_getPaginationLinks\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/QualityReportControllerAPI.php + - message: '#^Method Controller\\API\\V3\\QualityReportControllerAPI\:\:getJob\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -5310,6 +6078,12 @@ parameters: count: 1 path: lib/Controller/API/V3/QualityReportControllerAPI.php + - + message: '#^Method Controller\\API\\V3\\QualityReportControllerAPI\:\:getSecsPerWord\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/QualityReportControllerAPI.php + - message: '#^Method Controller\\API\\V3\\QualityReportControllerAPI\:\:getTteArrayForSegment\(\) has parameter \$tteArray with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -5322,6 +6096,12 @@ parameters: count: 1 path: lib/Controller/API/V3/QualityReportControllerAPI.php + - + message: '#^Method Controller\\API\\V3\\QualityReportControllerAPI\:\:show\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/QualityReportControllerAPI.php + - message: '#^PHPDoc tag @var for variable \$filter has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -5352,6 +6132,12 @@ parameters: count: 1 path: lib/Controller/API/V3/QualityReportControllerAPI.php + - + message: '#^Method Controller\\API\\V3\\RevisionFeedbackController\:\:feedback\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Controller/API/V3/RevisionFeedbackController.php + - message: '#^Method Controller\\API\\V3\\RevisionFeedbackController\:\:getJob\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -5508,12 +6294,24 @@ parameters: count: 1 path: lib/Controller/API/V3/SegmentAnalysisController.php + - + message: '#^Method Controller\\API\\V3\\SegmentAnalysisController\:\:getSegmentsForAJob\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/SegmentAnalysisController.php + - message: '#^Method Controller\\API\\V3\\SegmentAnalysisController\:\:getSegmentsForAProject\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Controller/API/V3/SegmentAnalysisController.php + - + message: '#^Method Controller\\API\\V3\\SegmentAnalysisController\:\:getSegmentsForAProject\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/SegmentAnalysisController.php + - message: '#^Method Controller\\API\\V3\\SegmentAnalysisController\:\:getSegmentsFromIdJobAndPassword\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -5544,6 +6342,12 @@ parameters: count: 1 path: lib/Controller/API/V3/SegmentAnalysisController.php + - + message: '#^Method Controller\\API\\V3\\SegmentAnalysisController\:\:job\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/SegmentAnalysisController.php + - message: '#^PHPDoc tag @var has invalid value \(\$segmentForAnalysis ShapelessConcreteStruct\)\: Unexpected token "\$segmentForAnalysis", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -5622,12 +6426,24 @@ parameters: count: 1 path: lib/Controller/API/V3/TeamsProjectsController.php + - + message: '#^Method Controller\\API\\V3\\TeamsProjectsController\:\:getTotalPages\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/TeamsProjectsController.php + - message: '#^Method Controller\\API\\V3\\TeamsProjectsController\:\:setTeam\(\) has parameter \$team with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Controller/API/V3/TeamsProjectsController.php + - + message: '#^Method Controller\\API\\V3\\TeamsProjectsController\:\:setTeam\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/TeamsProjectsController.php + - message: '#^Access to an undefined property object\:\:\$definitions\.$#' identifier: property.notFound @@ -5646,6 +6462,12 @@ parameters: count: 1 path: lib/Controller/API/V3/XliffConfigTemplateController.php + - + message: '#^Method Controller\\API\\V3\\XliffConfigTemplateController\:\:validateJSON\(\) throws checked exception Swaggest\\JsonSchema\\Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/API/V3/XliffConfigTemplateController.php + - message: '#^Parameter \#1 \$json of static method Model\\Xliff\\XliffConfigTemplateDao\:\:createFromJSON\(\) expects string, string\|null given\.$#' identifier: argument.type @@ -5706,6 +6528,12 @@ parameters: count: 1 path: lib/Controller/Abstracts/AbstractDownloadController.php + - + message: '#^Method Controller\\Abstracts\\AbstractDownloadController\:\:finalize\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/AbstractDownloadController.php + - message: '#^Method Controller\\Abstracts\\AbstractDownloadController\:\:nocache\(\) has no return type specified\.$#' identifier: missingType.return @@ -5766,6 +6594,12 @@ parameters: count: 1 path: lib/Controller/Abstracts/AbstractDownloadController.php + - + message: '#^Method Controller\\Abstracts\\Authentication\\AuthCookie\:\:destroyAuthentication\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/Authentication/AuthCookie.php + - message: '#^Method Controller\\Abstracts\\Authentication\\AuthCookie\:\:generateSignedAuthCookie\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -5778,6 +6612,12 @@ parameters: count: 1 path: lib/Controller/Abstracts/Authentication/AuthCookie.php + - + message: '#^Method Controller\\Abstracts\\Authentication\\AuthCookie\:\:getCredentials\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/Authentication/AuthCookie.php + - message: '#^Method Controller\\Abstracts\\Authentication\\AuthCookie\:\:getData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -5886,6 +6726,12 @@ parameters: count: 1 path: lib/Controller/Abstracts/Authentication/CookieManager.php + - + message: '#^Method Controller\\Abstracts\\Authentication\\SessionTokenStoreHandler\:\:_cacheSetConnection\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/Authentication/SessionTokenStoreHandler.php + - message: '#^Method Controller\\Abstracts\\Authentication\\SessionTokenStoreHandler\:\:_deleteCacheByKey\(\) should return bool but returns int\.$#' identifier: return.type @@ -5904,6 +6750,18 @@ parameters: count: 1 path: lib/Controller/Abstracts/Authentication/SessionTokenStoreHandler.php + - + message: '#^Method Controller\\Abstracts\\Authentication\\SessionTokenStoreHandler\:\:_setInCacheMap\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/Authentication/SessionTokenStoreHandler.php + + - + message: '#^Method Controller\\Abstracts\\Authentication\\SessionTokenStoreHandler\:\:isLoginCookieStillActive\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/Authentication/SessionTokenStoreHandler.php + - message: '#^Parameter \#1 \$key of method Predis\\ClientInterface\:\:get\(\) expects string, int given\.$#' identifier: argument.type @@ -6108,6 +6966,12 @@ parameters: count: 1 path: lib/Controller/Abstracts/BaseKleinViewController.php + - + message: '#^Method Controller\\Abstracts\\BaseKleinViewController\:\:render\(\) throws checked exception Klein\\Exceptions\\ResponseAlreadySentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/BaseKleinViewController.php + - message: '#^Method Controller\\Abstracts\\BaseKleinViewController\:\:setView\(\) has parameter \$params with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -6162,6 +7026,12 @@ parameters: count: 1 path: lib/Controller/Abstracts/KleinController.php + - + message: '#^Method Controller\\Abstracts\\KleinController\:\:broadcastLogout\(\) throws checked exception Stomp\\Exception\\ConnectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Abstracts/KleinController.php + - message: '#^Method Controller\\Abstracts\\KleinController\:\:getFeatureSet\(\) should return Model\\FeaturesBase\\FeatureSet but returns Model\\FeaturesBase\\FeatureSet\|null\.$#' identifier: return.type @@ -6192,6 +7062,12 @@ parameters: count: 1 path: lib/Controller/Abstracts/KleinController.php + - + message: '#^Method Controller\\Abstracts\\KleinController\:\:setAuthKeysIfExists\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/Abstracts/KleinController.php + - message: '#^Method Controller\\Abstracts\\KleinController\:\:startTimer\(\) has no return type specified\.$#' identifier: missingType.return @@ -6246,6 +7122,12 @@ parameters: count: 1 path: lib/Controller/Traits/KleinResponseFileStream.php + - + message: '#^Method Controller\\Traits\\KleinResponseFileStream\:\:streamFileFromPointer\(\) throws checked exception Klein\\Exceptions\\ResponseAlreadySentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Traits/KleinResponseFileStream.php + - message: '#^Method Controller\\Traits\\KleinResponseFileStream\:\:streamFileInlineFromPointer\(\) has no return type specified\.$#' identifier: missingType.return @@ -6318,6 +7200,12 @@ parameters: count: 1 path: lib/Controller/Views/AnalyzeController.php + - + message: '#^Method Controller\\Views\\AnalyzeController\:\:renderView\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/AnalyzeController.php + - message: '#^Method Controller\\Views\\AnalyzeController\:\:validateTheRequest\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -6366,6 +7254,12 @@ parameters: count: 1 path: lib/Controller/Views/CattoolController.php + - + message: '#^Method Controller\\Views\\CattoolController\:\:_saveActivity\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/CattoolController.php + - message: '#^Method Controller\\Views\\CattoolController\:\:archived\(\) has parameter \$jobOwnership with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -6408,6 +7302,12 @@ parameters: count: 1 path: lib/Controller/Views/CattoolController.php + - + message: '#^Method Controller\\Views\\CattoolController\:\:validateTheRequest\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/Views/CattoolController.php + - message: '#^Offset 0 might not exist on array\\|null\.$#' identifier: offsetAccess.notFound @@ -6474,6 +7374,12 @@ parameters: count: 1 path: lib/Controller/Views/ManageController.php + - + message: '#^Method Controller\\Views\\ManageController\:\:renderView\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/ManageController.php + - message: '#^Property Model\\ActivityLog\\ActivityLogStruct\:\:\$ip \(string\) does not accept string\|null\.$#' identifier: assign.propertyType @@ -6492,12 +7398,30 @@ parameters: count: 1 path: lib/Controller/Views/OauthResponseHandlerController.php + - + message: '#^Method Controller\\Views\\OauthResponseHandlerController\:\:_processSuccessfulOAuth\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Controller/Views/OauthResponseHandlerController.php + - message: '#^Parameter \#2 \$provider of method Controller\\Views\\OauthResponseHandlerController\:\:_processSuccessfulOAuth\(\) expects null, string\|false\|null given\.$#' identifier: argument.type count: 1 path: lib/Controller/Views/OauthResponseHandlerController.php + - + message: '#^Method Controller\\Views\\OutsourceTo\\AbstractController\:\:afterConstruct\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/OutsourceTo/AbstractController.php + + - + message: '#^Method Controller\\Views\\OutsourceTo\\AbstractController\:\:validateTheRequest\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/OutsourceTo/AbstractController.php + - message: '#^Offset ''currency'' might not exist on Utils\\Shop\\AbstractItem\|null\.$#' identifier: offsetAccess.notFound @@ -6522,6 +7446,12 @@ parameters: count: 1 path: lib/Controller/Views/QualityReportController.php + - + message: '#^Method Controller\\Views\\QualityReportController\:\:renderView\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/QualityReportController.php + - message: '#^Method Controller\\Views\\QualityReportController\:\:searchableStatuses\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -6540,6 +7470,12 @@ parameters: count: 1 path: lib/Controller/Views/QualityReportController.php + - + message: '#^Method Controller\\Views\\TemplateDecorator\\AbstractDecorator\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/TemplateDecorator/AbstractDecorator.php + - message: '#^Method Controller\\Views\\TemplateDecorator\\AbstractDecorator\:\:decorate\(\) has no return type specified\.$#' identifier: missingType.return @@ -6570,6 +7506,12 @@ parameters: count: 1 path: lib/Controller/Views/TemplateDecorator/DownloadOmegaTOutputDecorator.php + - + message: '#^Method Controller\\Views\\TemplateDecorator\\DownloadOmegaTOutputDecorator\:\:createOmegaTZip\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Controller/Views/TemplateDecorator/DownloadOmegaTOutputDecorator.php + - message: '#^Method Controller\\Views\\TemplateDecorator\\DownloadOmegaTOutputDecorator\:\:decorate\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -6642,6 +7584,12 @@ parameters: count: 1 path: lib/Model/ActivityLog/ActivityLogDao.php + - + message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:create\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ActivityLog/ActivityLogDao.php + - message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:getAllForProject\(\) has parameter \$id_project with no type specified\.$#' identifier: missingType.parameter @@ -6654,12 +7602,24 @@ parameters: count: 1 path: lib/Model/ActivityLog/ActivityLogDao.php + - + message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:getAllForProject\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ActivityLog/ActivityLogDao.php + - message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:getByID\(\) has parameter \$activity_id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/ActivityLog/ActivityLogDao.php + - + message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:getByID\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ActivityLog/ActivityLogDao.php + - message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:getLastActionInProject\(\) has parameter \$id_project with no type specified\.$#' identifier: missingType.parameter @@ -6672,6 +7632,12 @@ parameters: count: 1 path: lib/Model/ActivityLog/ActivityLogDao.php + - + message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:getLastActionInProject\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ActivityLog/ActivityLogDao.php + - message: '#^Method Model\\ActivityLog\\ActivityLogDao\:\:read\(\) has parameter \$whereKeys with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -6696,6 +7662,18 @@ parameters: count: 1 path: lib/Model/Analysis/AbstractStatus.php + - + message: '#^Method Model\\Analysis\\AbstractStatus\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Analysis/AbstractStatus.php + + - + message: '#^Method Model\\Analysis\\AbstractStatus\:\:_fetchProjectData\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Analysis/AbstractStatus.php + - message: '#^Method Model\\Analysis\\AbstractStatus\:\:fetchData\(\) should return \$this\(Model\\Analysis\\AbstractStatus\) but returns Model\\Analysis\\AbstractStatus\.$#' identifier: return.type @@ -6726,6 +7704,12 @@ parameters: count: 1 path: lib/Model/Analysis/AbstractStatus.php + - + message: '#^Method Model\\Analysis\\AbstractStatus\:\:loadObjects\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Analysis/AbstractStatus.php + - message: '#^Parameter \#1 \$mt_we_workflow_enabled of static method Model\\Analysis\\Constants\\MatchConstantsFactory\:\:getInstance\(\) expects bool\|null, string\|false given\.$#' identifier: argument.type @@ -6792,12 +7776,24 @@ parameters: count: 1 path: lib/Model/Analysis/AnalysisDao.php + - + message: '#^Method Model\\Analysis\\AnalysisDao\:\:destroyCacheByProjectId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Analysis/AnalysisDao.php + - message: '#^Method Model\\Analysis\\AnalysisDao\:\:getProjectStatsVolumeAnalysis\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Analysis/AnalysisDao.php + - + message: '#^Method Model\\Analysis\\AnalysisDao\:\:getProjectStatsVolumeAnalysis\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Analysis/AnalysisDao.php + - message: '#^Unsafe usage of new static\(\)\.$#' identifier: new.static @@ -6924,6 +7920,12 @@ parameters: count: 1 path: lib/Model/Analysis/XTRFStatus.php + - + message: '#^Method Model\\Analysis\\XTRFStatus\:\:formatFile\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 13 + path: lib/Model/Analysis/XTRFStatus.php + - message: '#^Method Model\\Analysis\\XTRFStatus\:\:getResultArray\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -6954,30 +7956,60 @@ parameters: count: 1 path: lib/Model/ApiKeys/ApiKeyDao.php + - + message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:create\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ApiKeys/ApiKeyDao.php + - message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:deleteByUid\(\) has parameter \$uid with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/ApiKeys/ApiKeyDao.php + - + message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:deleteByUid\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ApiKeys/ApiKeyDao.php + - message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:findByKey\(\) has parameter \$key with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/ApiKeys/ApiKeyDao.php + - + message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:findByKey\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ApiKeys/ApiKeyDao.php + - message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:getById\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/ApiKeys/ApiKeyDao.php + - + message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:getById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ApiKeys/ApiKeyDao.php + - message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:getByUid\(\) has parameter \$uid with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/ApiKeys/ApiKeyDao.php + - + message: '#^Method Model\\ApiKeys\\ApiKeyDao\:\:getByUid\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ApiKeys/ApiKeyDao.php + - message: '#^Method Model\\ApiKeys\\ApiKeyStruct\:\:validSecret\(\) has parameter \$secret with no type specified\.$#' identifier: missingType.parameter @@ -7002,12 +8034,30 @@ parameters: count: 1 path: lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + - + message: '#^Method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:createFromChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + + - + message: '#^Method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:deleteEvent\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + - message: '#^Method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:getByIdAndChunk\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + - + message: '#^Method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:getByIdAndChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + - message: '#^Method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:lastCompletionRecord\(\) has parameter \$params with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -7020,6 +8070,12 @@ parameters: count: 1 path: lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + - + message: '#^Method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:updatePassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + - message: '#^Method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:validSources\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -7038,6 +8094,12 @@ parameters: count: 1 path: lib/Model/ChunksCompletion/ChunkCompletionUpdateDao.php + - + message: '#^Method Model\\ChunksCompletion\\ChunkCompletionUpdateDao\:\:createOrUpdateFromStruct\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ChunksCompletion/ChunkCompletionUpdateDao.php + - message: '#^Method Model\\ChunksCompletion\\ChunkCompletionUpdateDao\:\:updatePassword\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -7056,6 +8118,12 @@ parameters: count: 1 path: lib/Model/ChunksCompletion/ChunkCompletionUpdateDao.php + - + message: '#^Method Model\\ChunksCompletion\\ChunkCompletionUpdateDao\:\:updatePassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ChunksCompletion/ChunkCompletionUpdateDao.php + - message: '#^Method Model\\ChunksCompletion\\ChunkCompletionUpdateDao\:\:validSources\(\) has no return type specified\.$#' identifier: missingType.return @@ -7068,12 +8136,30 @@ parameters: count: 1 path: lib/Model/Comments/BaseCommentStruct.php + - + message: '#^Method Model\\Comments\\BaseCommentStruct\:\:templateMessage\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Comments/BaseCommentStruct.php + - message: '#^Parameter \#1 \$object of function date_format expects DateTimeInterface, DateTime\|false given\.$#' identifier: argument.type count: 2 path: lib/Model/Comments/BaseCommentStruct.php + - + message: '#^Method Model\\Comments\\CommentDao\:\:deleteComment\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Comments/CommentDao.php + + - + message: '#^Method Model\\Comments\\CommentDao\:\:destroySegmentIdSegmentCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Comments/CommentDao.php + - message: '#^Method Model\\Comments\\CommentDao\:\:getById\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter @@ -7086,6 +8172,12 @@ parameters: count: 1 path: lib/Model/Comments/CommentDao.php + - + message: '#^Method Model\\Comments\\CommentDao\:\:getCommentsForChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/Comments/CommentDao.php + - message: '#^Method Model\\Comments\\CommentDao\:\:getOpenThreadsForProjects\(\) has parameter \$projectIds with no type specified\.$#' identifier: missingType.parameter @@ -7098,12 +8190,24 @@ parameters: count: 1 path: lib/Model/Comments/CommentDao.php + - + message: '#^Method Model\\Comments\\CommentDao\:\:getOpenThreadsForProjects\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Comments/CommentDao.php + - message: '#^Method Model\\Comments\\CommentDao\:\:getThreadContributorUids\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Comments/CommentDao.php + - + message: '#^Method Model\\Comments\\CommentDao\:\:getThreadContributorUids\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Comments/CommentDao.php + - message: '#^Method Model\\Comments\\CommentDao\:\:getThreadsBySegments\(\) has parameter \$job_id with no type specified\.$#' identifier: missingType.parameter @@ -7122,6 +8226,12 @@ parameters: count: 1 path: lib/Model/Comments/CommentDao.php + - + message: '#^Method Model\\Comments\\CommentDao\:\:getThreadsBySegments\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Comments/CommentDao.php + - message: '#^Method Model\\Comments\\CommentDao\:\:getUsersIdFromContent\(\) has parameter \$content with no type specified\.$#' identifier: missingType.parameter @@ -7207,27 +8317,63 @@ parameters: path: lib/Model/ConnectedServices/ConnectedServiceDao.php - - message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:findServiceByUserAndId\(\) has parameter \$id_service with no type specified\.$#' - identifier: missingType.parameter - count: 1 + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 path: lib/Model/ConnectedServices/ConnectedServiceDao.php - - message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:setServiceExpired\(\) has parameter \$time with no type specified\.$#' - identifier: missingType.parameter - count: 1 + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:findDefaultServiceByUserAndName\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 path: lib/Model/ConnectedServices/ConnectedServiceDao.php - - message: '#^Property Model\\ConnectedServices\\ConnectedServiceDao\:\:\$auto_increment_field type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:findServiceByUserAndId\(\) has parameter \$id_service with no type specified\.$#' + identifier: missingType.parameter count: 1 path: lib/Model/ConnectedServices/ConnectedServiceDao.php - - message: '#^Property Model\\ConnectedServices\\ConnectedServiceDao\:\:\$primary_keys type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:findServiceByUserAndId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ConnectedServices/ConnectedServiceDao.php + + - + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:findServicesByUser\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ConnectedServices/ConnectedServiceDao.php + + - + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:findUserServicesByNameAndEmail\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ConnectedServices/ConnectedServiceDao.php + + - + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:setDefaultService\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/ConnectedServices/ConnectedServiceDao.php + + - + message: '#^Method Model\\ConnectedServices\\ConnectedServiceDao\:\:setServiceExpired\(\) has parameter \$time with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: lib/Model/ConnectedServices/ConnectedServiceDao.php + + - + message: '#^Property Model\\ConnectedServices\\ConnectedServiceDao\:\:\$auto_increment_field type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: lib/Model/ConnectedServices/ConnectedServiceDao.php + + - + message: '#^Property Model\\ConnectedServices\\ConnectedServiceDao\:\:\$primary_keys type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 path: lib/Model/ConnectedServices/ConnectedServiceDao.php - @@ -7296,6 +8442,12 @@ parameters: count: 1 path: lib/Model/ConnectedServices/GDrive/GDriveTokenVerifyModel.php + - + message: '#^Method Model\\ConnectedServices\\GDrive\\GDriveUserAuthorizationModel\:\:__collectProperties\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/ConnectedServices/GDrive/GDriveUserAuthorizationModel.php + - message: '#^Method Model\\ConnectedServices\\GDrive\\GDriveUserAuthorizationModel\:\:__insertService\(\) should return Model\\ConnectedServices\\ConnectedServiceStruct but returns Model\\ConnectedServices\\ConnectedServiceStruct\|false\.$#' identifier: return.type @@ -7326,6 +8478,12 @@ parameters: count: 1 path: lib/Model/ConnectedServices/GDrive/RemoteFileService.php + - + message: '#^Method Model\\ConnectedServices\\GDrive\\RemoteFileService\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/RemoteFileService.php + - message: '#^Method Model\\ConnectedServices\\GDrive\\RemoteFileService\:\:copyFile\(\) has parameter \$copyTitle with no type specified\.$#' identifier: missingType.parameter @@ -7350,6 +8508,12 @@ parameters: count: 1 path: lib/Model/ConnectedServices/GDrive/RemoteFileService.php + - + message: '#^Method Model\\ConnectedServices\\GDrive\\RemoteFileService\:\:getService\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/RemoteFileService.php + - message: '#^Method Model\\ConnectedServices\\GDrive\\RemoteFileService\:\:updateFileOnGDrive\(\) has parameter \$parents with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -7392,6 +8556,12 @@ parameters: count: 1 path: lib/Model/ConnectedServices/GDrive/Session.php + - + message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:deleteDirectory\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/Session.php + - message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:doConversion\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -7428,6 +8598,18 @@ parameters: count: 1 path: lib/Model/ConnectedServices/GDrive/Session.php + - + message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:getInstanceForCLI\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/Session.php + + - + message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:getInstanceForCLI\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/Session.php + - message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:getToken\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -7440,6 +8622,24 @@ parameters: count: 1 path: lib/Model/ConnectedServices/GDrive/Session.php + - + message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:removeFile\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/Session.php + + - + message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:removeFile\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/Session.php + + - + message: '#^Method Model\\ConnectedServices\\GDrive\\Session\:\:sanitizeFileName\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/GDrive/Session.php + - message: '#^Parameter \#1 \$googleMime of static method Model\\ConnectedServices\\GDrive\\RemoteFileService\:\:officeExtensionFromMime\(\) expects string, string\|null given\.$#' identifier: argument.type @@ -7476,6 +8676,18 @@ parameters: count: 1 path: lib/Model/ConnectedServices/GDrive/Session.php + - + message: '#^Method Model\\ConnectedServices\\Oauth\\DefuseEncryption\:\:decrypt\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/DefuseEncryption.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\DefuseEncryption\:\:encrypt\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/DefuseEncryption.php + - message: '#^Parameter \#2 \$key of static method Defuse\\Crypto\\Crypto\:\:decrypt\(\) expects Defuse\\Crypto\\Key, Defuse\\Crypto\\Key\|null given\.$#' identifier: argument.type @@ -7500,6 +8712,24 @@ parameters: count: 1 path: lib/Model/ConnectedServices/Oauth/DefuseEncryption.php + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Facebook\\FacebookProvider\:\:getAccessTokenFromAuthCode\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Facebook/FacebookProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Facebook\\FacebookProvider\:\:getClient\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Facebook/FacebookProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Facebook\\FacebookProvider\:\:getResourceOwner\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ConnectedServices/Oauth/Facebook/FacebookProvider.php + - message: '#^Property Model\\ConnectedServices\\Oauth\\ProviderUser\:\:\$email \(string\) does not accept string\|null\.$#' identifier: assign.propertyType @@ -7512,6 +8742,30 @@ parameters: count: 1 path: lib/Model/ConnectedServices/Oauth/Facebook/FacebookProvider.php + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Github\\GithubProvider\:\:getAccessTokenFromAuthCode\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Github/GithubProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Github\\GithubProvider\:\:getAuthorizationUrl\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Github/GithubProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Github\\GithubProvider\:\:getResourceOwner\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ConnectedServices/Oauth/Github/GithubProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Github\\GithubProvider\:\:getResourceOwner\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Github/GithubProvider.php + - message: '#^Method Model\\ConnectedServices\\Oauth\\Google\\AccessToken\:\:__construct\(\) has parameter \$options with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -7548,6 +8802,12 @@ parameters: count: 1 path: lib/Model/ConnectedServices/Oauth/Google/GoogleClientLogsFormatter.php + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Google\\GoogleProvider\:\:getResourceOwner\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/ConnectedServices/Oauth/Google/GoogleProvider.php + - message: '#^Parameter \#1 \$applicationName of method Google\\Client\:\:setApplicationName\(\) expects string, string\|null given\.$#' identifier: argument.type @@ -7578,6 +8838,48 @@ parameters: count: 1 path: lib/Model/ConnectedServices/Oauth/Google/GoogleProvider.php + - + message: '#^Method Model\\ConnectedServices\\Oauth\\LinkedIn\\LinkedInProvider\:\:getAccessTokenFromAuthCode\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/LinkedIn/LinkedInProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\LinkedIn\\LinkedInProvider\:\:getResourceOwner\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/LinkedIn/LinkedInProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\LinkedIn\\LinkedInProvider\:\:getResourceOwner\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/ConnectedServices/Oauth/LinkedIn/LinkedInProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Microsoft\\MicrosoftProvider\:\:getAccessTokenFromAuthCode\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Microsoft/MicrosoftProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Microsoft\\MicrosoftProvider\:\:getAuthorizationUrl\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Microsoft/MicrosoftProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Microsoft\\MicrosoftProvider\:\:getResourceOwner\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ConnectedServices/Oauth/Microsoft/MicrosoftProvider.php + + - + message: '#^Method Model\\ConnectedServices\\Oauth\\Microsoft\\MicrosoftProvider\:\:getResourceOwner\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/Microsoft/MicrosoftProvider.php + - message: '#^PHPDoc tag @return with type mixed is not subtype of native type Model\\ConnectedServices\\Oauth\\ProviderUser\.$#' identifier: return.phpDocType @@ -7596,12 +8898,24 @@ parameters: count: 1 path: lib/Model/ConnectedServices/Oauth/Microsoft/MicrosoftProvider.php + - + message: '#^Method Model\\ConnectedServices\\Oauth\\OauthClient\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/OauthClient.php + - message: '#^Method Model\\ConnectedServices\\Oauth\\OauthClient\:\:getAuthorizationUrl\(\) has parameter \$_session with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/ConnectedServices/Oauth/OauthClient.php + - + message: '#^Method Model\\ConnectedServices\\Oauth\\OauthClient\:\:getInstance\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ConnectedServices/Oauth/OauthClient.php + - message: '#^Property Model\\ConnectedServices\\Oauth\\OauthClient\:\:\$provider \(Model\\ConnectedServices\\Oauth\\AbstractProvider\) does not accept object\.$#' identifier: assign.propertyType @@ -7878,6 +9192,12 @@ parameters: count: 1 path: lib/Model/Conversion/InternalHashPaths.php + - + message: '#^Method Model\\Conversion\\InternalHashPaths\:\:__construct\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Conversion/InternalHashPaths.php + - message: '#^Parameter \#1 \$string of function trim expects string, string\|false given\.$#' identifier: argument.type @@ -7896,6 +9216,12 @@ parameters: count: 1 path: lib/Model/Conversion/MimeTypes/Guesser/FileinfoMimeTypeGuesser.php + - + message: '#^Method Model\\Conversion\\MimeTypes\\Guesser\\SimpleMarkupMimeTypeGuesser\:\:guessMimeType\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Conversion/MimeTypes/Guesser/SimpleMarkupMimeTypeGuesser.php + - message: '#^Parameter \#1 \$haystack of function stripos expects string, string\|false given\.$#' identifier: argument.type @@ -7914,6 +9240,12 @@ parameters: count: 1 path: lib/Model/Conversion/MimeTypes/MimeTypes.php + - + message: '#^Method Model\\Conversion\\MimeTypes\\MimeTypes\:\:guessMimeType\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Conversion/MimeTypes/MimeTypes.php + - message: '#^Property Model\\Conversion\\MimeTypes\\MimeTypes\:\:\$extensions type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -7962,12 +9294,24 @@ parameters: count: 1 path: lib/Model/Conversion/Upload.php + - + message: '#^Method Model\\Conversion\\Upload\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Conversion/Upload.php + - message: '#^Method Model\\Conversion\\Upload\:\:_filesAreTooMuch\(\) has parameter \$filesToUpload with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Conversion/Upload.php + - + message: '#^Method Model\\Conversion\\Upload\:\:fixFileName\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Conversion/Upload.php + - message: '#^Method Model\\Conversion\\Upload\:\:getUniformGlobalFilesStructure\(\) has parameter \$filesToUpload with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -8046,6 +9390,12 @@ parameters: count: 1 path: lib/Model/Conversion/ZipArchiveHandler.php + - + message: '#^Method Model\\Conversion\\ZipArchiveHandler\:\:extractFilesInTmp\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Conversion/ZipArchiveHandler.php + - message: '#^Method Model\\Conversion\\ZipArchiveHandler\:\:prependZipFileName\(\) is unused\.$#' identifier: method.unused @@ -8154,6 +9504,12 @@ parameters: count: 1 path: lib/Model/DataAccess/AbstractDao.php + - + message: '#^Method Model\\DataAccess\\AbstractDao\:\:_cacheSetConnection\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/AbstractDao.php + - message: '#^Method Model\\DataAccess\\AbstractDao\:\:_deleteCacheByKey\(\) should return bool but returns int\.$#' identifier: return.type @@ -8178,12 +9534,30 @@ parameters: count: 1 path: lib/Model/DataAccess/AbstractDao.php + - + message: '#^Method Model\\DataAccess\\AbstractDao\:\:_fetchObjectMap\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/AbstractDao.php + + - + message: '#^Method Model\\DataAccess\\AbstractDao\:\:_fetchObjectMap\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/DataAccess/AbstractDao.php + - message: '#^Method Model\\DataAccess\\AbstractDao\:\:_getStatementForQuery\(\) has parameter \$query with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/DataAccess/AbstractDao.php + - + message: '#^Method Model\\DataAccess\\AbstractDao\:\:_getStatementForQuery\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/AbstractDao.php + - message: '#^Method Model\\DataAccess\\AbstractDao\:\:_sanitizeInputArray\(\) has parameter \$input with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -8382,6 +9756,12 @@ parameters: count: 1 path: lib/Model/DataAccess/AbstractDaoObjectStruct.php + - + message: '#^Method Model\\DataAccess\\AbstractDaoObjectStruct\:\:__construct\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/AbstractDaoObjectStruct.php + - message: '#^Method Model\\DataAccess\\AbstractDaoObjectStruct\:\:__get\(\) has parameter \$name with no type specified\.$#' identifier: missingType.parameter @@ -8412,6 +9792,12 @@ parameters: count: 1 path: lib/Model/DataAccess/AbstractDaoObjectStruct.php + - + message: '#^Method Model\\DataAccess\\AbstractDaoObjectStruct\:\:setTimestamp\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/AbstractDaoObjectStruct.php + - message: '#^Method Model\\DataAccess\\AbstractDaoObjectStruct\:\:toArray\(\) has parameter \$mask with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -8436,6 +9822,12 @@ parameters: count: 1 path: lib/Model/DataAccess/AbstractDaoObjectStruct.php + - + message: '#^Method Model\\DataAccess\\Database\:\:begin\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/Database.php + - message: '#^Method Model\\DataAccess\\Database\:\:buildInsertStatement\(\) has parameter \$attrs with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -8454,6 +9846,18 @@ parameters: count: 1 path: lib/Model/DataAccess/Database.php + - + message: '#^Method Model\\DataAccess\\Database\:\:commit\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/Database.php + + - + message: '#^Method Model\\DataAccess\\Database\:\:getConnection\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/DataAccess/Database.php + - message: '#^Method Model\\DataAccess\\Database\:\:insert\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -8490,12 +9894,30 @@ parameters: count: 1 path: lib/Model/DataAccess/Database.php + - + message: '#^Method Model\\DataAccess\\Database\:\:last_insert\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/Database.php + - message: '#^Method Model\\DataAccess\\Database\:\:nextSequence\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/DataAccess/Database.php + - + message: '#^Method Model\\DataAccess\\Database\:\:nextSequence\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 9 + path: lib/Model/DataAccess/Database.php + + - + message: '#^Method Model\\DataAccess\\Database\:\:rollback\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/Database.php + - message: '#^Method Model\\DataAccess\\Database\:\:update\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -8508,6 +9930,18 @@ parameters: count: 1 path: lib/Model/DataAccess/Database.php + - + message: '#^Method Model\\DataAccess\\Database\:\:update\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/DataAccess/Database.php + + - + message: '#^Method Model\\DataAccess\\Database\:\:useDb\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/DataAccess/Database.php + - message: '#^Parameter \#1 \$server of class Model\\DataAccess\\Database constructor expects string, string\|null given\.$#' identifier: argument.type @@ -8598,6 +10032,30 @@ parameters: count: 1 path: lib/Model/DataAccess/ShapelessConcreteStruct.php + - + message: '#^Method Model\\DataAccess\\ShapelessConcreteStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/ShapelessConcreteStruct.php + + - + message: '#^Method Model\\DataAccess\\ShapelessConcreteStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/ShapelessConcreteStruct.php + + - + message: '#^Method Model\\DataAccess\\ShapelessConcreteStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/DataAccess/ShapelessConcreteStruct.php + + - + message: '#^Method Model\\EditLog\\EditLogSegmentStruct\:\:getSecsPerWord\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/EditLog/EditLogSegmentStruct.php + - message: '#^Loose comparison using \=\= between int and ''NULL'' will always evaluate to false\.$#' identifier: equal.alwaysFalse @@ -8616,6 +10074,24 @@ parameters: count: 1 path: lib/Model/Engines/EngineDAO.php + - + message: '#^Method Model\\Engines\\EngineDAO\:\:create\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Engines/EngineDAO.php + + - + message: '#^Method Model\\Engines\\EngineDAO\:\:disable\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Engines/EngineDAO.php + + - + message: '#^Method Model\\Engines\\EngineDAO\:\:sanitize\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Engines/EngineDAO.php + - message: '#^Negated boolean expression is always false\.$#' identifier: booleanNot.alwaysFalse @@ -8736,6 +10212,18 @@ parameters: count: 1 path: lib/Model/Engines/Structs/EngineStruct.php + - + message: '#^Method Model\\Engines\\Structs\\EngineStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Engines/Structs/EngineStruct.php + + - + message: '#^Method Model\\Engines\\Structs\\EngineStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Engines/Structs/EngineStruct.php + - message: '#^PHPDoc tag @return with type Model\\Engines\\Structs\\EngineStruct is not subtype of native type static\(Model\\Engines\\Structs\\EngineStruct\)\.$#' identifier: return.phpDocType @@ -8970,6 +10458,12 @@ parameters: count: 1 path: lib/Model/FeaturesBase/FeatureSet.php + - + message: '#^Method Model\\FeaturesBase\\FeatureSet\:\:merge\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FeaturesBase/FeatureSet.php + - message: '#^Method Model\\FeaturesBase\\FeatureSet\:\:runOnFeature\(\) has parameter \$args with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -8995,8 +10489,14 @@ parameters: path: lib/Model/FeaturesBase/FeatureSet.php - - message: '#^Method Model\\FeaturesBase\\PluginsLoader\:\:getValidCodes\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Model\\FeaturesBase\\PluginsLoader\:\:getInstance\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FeaturesBase/PluginsLoader.php + + - + message: '#^Method Model\\FeaturesBase\\PluginsLoader\:\:getValidCodes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: lib/Model/FeaturesBase/PluginsLoader.php @@ -9036,12 +10536,36 @@ parameters: count: 1 path: lib/Model/Files/FileDao.php + - + message: '#^Method Model\\Files\\FileDao\:\:deleteFailedProjectFiles\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Files/FileDao.php + + - + message: '#^Method Model\\Files\\FileDao\:\:getById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Files/FileDao.php + - message: '#^Method Model\\Files\\FileDao\:\:getByJobId\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Files/FileDao.php + - + message: '#^Method Model\\Files\\FileDao\:\:getByJobId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Files/FileDao.php + + - + message: '#^Method Model\\Files\\FileDao\:\:getByProjectId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Files/FileDao.php + - message: '#^Method Model\\Files\\FileDao\:\:insertFilesJob\(\) has parameter \$id_file with no type specified\.$#' identifier: missingType.parameter @@ -9054,6 +10578,12 @@ parameters: count: 1 path: lib/Model/Files/FileDao.php + - + message: '#^Method Model\\Files\\FileDao\:\:isFileInProject\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Files/FileDao.php + - message: '#^Method Model\\Files\\FileDao\:\:updateField\(\) has parameter \$field with no type specified\.$#' identifier: missingType.parameter @@ -9072,6 +10602,12 @@ parameters: count: 1 path: lib/Model/Files/FileDao.php + - + message: '#^Method Model\\Files\\FileDao\:\:updateField\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Files/FileDao.php + - message: '#^Property Model\\Files\\FileDao\:\:\$auto_increment_field type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -9138,18 +10674,66 @@ parameters: count: 1 path: lib/Model/Files/FilesInfoUtility.php + - + message: '#^Method Model\\Files\\FilesPartsDao\:\:getByFileId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Files/FilesPartsDao.php + + - + message: '#^Method Model\\Files\\FilesPartsDao\:\:getById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Files/FilesPartsDao.php + + - + message: '#^Method Model\\Files\\FilesPartsDao\:\:getBySegmentId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Files/FilesPartsDao.php + + - + message: '#^Method Model\\Files\\FilesPartsDao\:\:getFirstAndLastSegment\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Files/FilesPartsDao.php + - message: '#^Method Model\\Files\\FilesPartsDao\:\:insert\(\) should return int but returns string\|false\.$#' identifier: return.type count: 1 path: lib/Model/Files/FilesPartsDao.php + - + message: '#^Method Model\\Files\\FilesPartsDao\:\:insert\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Files/FilesPartsDao.php + - message: '#^Method Model\\Files\\MetadataDao\:\:bulkInsert\(\) has parameter \$metadata with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Files/MetadataDao.php + - + message: '#^Method Model\\Files\\MetadataDao\:\:bulkInsert\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Files/MetadataDao.php + + - + message: '#^Method Model\\Files\\MetadataDao\:\:insert\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Files/MetadataDao.php + + - + message: '#^Method Model\\Files\\MetadataDao\:\:update\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Files/MetadataDao.php + - message: '#^Cannot call method format\(\) on DateTime\|false\.$#' identifier: method.nonObject @@ -9168,12 +10752,24 @@ parameters: count: 1 path: lib/Model/FilesStorage/AbstractFilesStorage.php + - + message: '#^Method Model\\FilesStorage\\AbstractFilesStorage\:\:deleteHashFromUploadDir\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/AbstractFilesStorage.php + - message: '#^Method Model\\FilesStorage\\AbstractFilesStorage\:\:getFilesForJob\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/FilesStorage/AbstractFilesStorage.php + - + message: '#^Method Model\\FilesStorage\\AbstractFilesStorage\:\:getFilesForJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/FilesStorage/AbstractFilesStorage.php + - message: '#^Method Model\\FilesStorage\\AbstractFilesStorage\:\:pathinfo_fix\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -9252,24 +10848,66 @@ parameters: count: 2 path: lib/Model/FilesStorage/FsFilesStorage.php + - + message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:cacheZipArchive\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/FilesStorage/FsFilesStorage.php + - message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:getFastAnalysisData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/FilesStorage/FsFilesStorage.php + - + message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:getFastAnalysisData\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/FsFilesStorage.php + - message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:getHashesFromDir\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/FilesStorage/FsFilesStorage.php + - + message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:linkZipToProject\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/FsFilesStorage.php + + - + message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:moveFileFromUploadSessionToQueuePath\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/FsFilesStorage.php + + - + message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:moveFileFromUploadSessionToQueuePath\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/FsFilesStorage.php + + - + message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:moveFromCacheToFileDir\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/FsFilesStorage.php + - message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:storeFastAnalysisFile\(\) has parameter \$segments_metadata with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/FilesStorage/FsFilesStorage.php + - + message: '#^Method Model\\FilesStorage\\FsFilesStorage\:\:storeFastAnalysisFile\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/FsFilesStorage.php + - message: '#^PHPDoc tag @return with type bool\|string is not subtype of native type string\|false\.$#' identifier: return.phpDocType @@ -9366,6 +11004,12 @@ parameters: count: 3 path: lib/Model/FilesStorage/S3FilesStorage.php + - + message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:cacheZipArchive\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/S3FilesStorage.php + - message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:createFileName\(\) has parameter \$file_info with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -9414,6 +11058,12 @@ parameters: count: 1 path: lib/Model/FilesStorage/S3FilesStorage.php + - + message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:getFastAnalysisData\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/S3FilesStorage.php + - message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:getFastAnalysisFileName\(\) has parameter \$id_project with no type specified\.$#' identifier: missingType.parameter @@ -9426,12 +11076,42 @@ parameters: count: 1 path: lib/Model/FilesStorage/S3FilesStorage.php + - + message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:getHashesFromDir\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/S3FilesStorage.php + + - + message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:getStaticS3Client\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/S3FilesStorage.php + + - + message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:moveFileFromUploadSessionToQueuePath\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/FilesStorage/S3FilesStorage.php + + - + message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:moveFileFromUploadSessionToQueuePath\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/S3FilesStorage.php + - message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:storeFastAnalysisFile\(\) has parameter \$segments_metadata with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/FilesStorage/S3FilesStorage.php + - + message: '#^Method Model\\FilesStorage\\S3FilesStorage\:\:storeFastAnalysisFile\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/FilesStorage/S3FilesStorage.php + - message: '#^Offset ''basename'' might not exist on array\|string\.$#' identifier: offsetAccess.notFound @@ -9792,6 +11472,12 @@ parameters: count: 1 path: lib/Model/Filters/DTO/Yaml.php + - + message: '#^Method Model\\Filters\\DTO\\Yaml\:\:setInnerContentType\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Filters/DTO/Yaml.php + - message: '#^Method Model\\Filters\\DTO\\Yaml\:\:setTranslateKeys\(\) has parameter \$translate_keys with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -9822,6 +11508,24 @@ parameters: count: 1 path: lib/Model/Filters/DTO/Yaml.php + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateDao\:\:destroyQueryByIdAndUserCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Filters/FiltersConfigTemplateDao.php + + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateDao\:\:destroyQueryByIdCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Filters/FiltersConfigTemplateDao.php + + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateDao\:\:destroyQueryByUidAndNameCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Filters/FiltersConfigTemplateDao.php + - message: '#^Method Model\\Filters\\FiltersConfigTemplateDao\:\:getAllPaginated\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -9834,6 +11538,24 @@ parameters: count: 1 path: lib/Model/Filters/FiltersConfigTemplateDao.php + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateDao\:\:hydrateTemplateStruct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/Filters/FiltersConfigTemplateDao.php + + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateDao\:\:remove\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Filters/FiltersConfigTemplateDao.php + + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateDao\:\:save\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Filters/FiltersConfigTemplateDao.php + - message: '#^Parameter \#1 \$uid of static method Model\\Filters\\FiltersConfigTemplateDao\:\:destroyQueryPaginated\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -9894,6 +11616,18 @@ parameters: count: 1 path: lib/Model/Filters/FiltersConfigTemplateStruct.php + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateStruct\:\:hydrateFromJSON\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Filters/FiltersConfigTemplateStruct.php + + - + message: '#^Method Model\\Filters\\FiltersConfigTemplateStruct\:\:hydrateFromJSON\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/Filters/FiltersConfigTemplateStruct.php + - message: '#^Parameter \#1 \$date of static method Utils\\Date\\DateTimeUtil\:\:formatIsoDate\(\) expects null, string\|null given\.$#' identifier: argument.type @@ -9984,18 +11718,120 @@ parameters: count: 1 path: lib/Model/Jobs/JobDao.php + - + message: '#^Method Model\\Jobs\\JobDao\:\:createFromStruct\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:deleteOnMerge\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Jobs/JobDao.php + - message: '#^Method Model\\Jobs\\JobDao\:\:destroyCacheByProjectId\(\) has parameter \$project_id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Jobs/JobDao.php + - + message: '#^Method Model\\Jobs\\JobDao\:\:destroyCacheByProjectId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getAllModifiedSegmentsForPee\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getByIdAndPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getByIdProjectAndIdJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getByProjectId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getBySegmentTranslation\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getFirstSegmentOfFilesInJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getOwnerUid\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getPeeStats\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getReviewedWordsCountGroupedByFileParts\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + - message: '#^Method Model\\Jobs\\JobDao\:\:getSegmentTranslationsCount\(\) has parameter \$idJobs with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Jobs/JobDao.php + - + message: '#^Method Model\\Jobs\\JobDao\:\:getSegmentTranslationsCount\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getSegmentsCount\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getSplitData\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:getSplitJobPreparedStatement\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Jobs/JobDao.php + - message: '#^Method Model\\Jobs\\JobDao\:\:getTimeToEdit\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -10008,6 +11844,18 @@ parameters: count: 1 path: lib/Model/Jobs/JobDao.php + - + message: '#^Method Model\\Jobs\\JobDao\:\:getTimeToEdit\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:hasACustomPayableRate\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobDao.php + - message: '#^Method Model\\Jobs\\JobDao\:\:updateAllJobsStatusesByProjectId\(\) has parameter \$id_project with no type specified\.$#' identifier: missingType.parameter @@ -10020,6 +11868,24 @@ parameters: count: 1 path: lib/Model/Jobs/JobDao.php + - + message: '#^Method Model\\Jobs\\JobDao\:\:updateJobWeightedPeeAndTTE\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:updateOwner\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Jobs/JobDao.php + + - + message: '#^Method Model\\Jobs\\JobDao\:\:updateStdWcAndTotalWc\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Jobs/JobDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$res JobStruct\)\: Unexpected token "\$res", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -10074,6 +11940,12 @@ parameters: count: 1 path: lib/Model/Jobs/JobStruct.php + - + message: '#^Method Model\\Jobs\\JobStruct\:\:getClientKeys\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + - message: '#^Method Model\\Jobs\\JobStruct\:\:getOpenThreadsCount\(\) has no return type specified\.$#' identifier: missingType.return @@ -10081,8 +11953,20 @@ parameters: path: lib/Model/Jobs/JobStruct.php - - message: '#^Method Model\\Jobs\\JobStruct\:\:getQualityOverall\(\) has parameter \$chunkReviews with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Model\\Jobs\\JobStruct\:\:getOpenThreadsCount\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + + - + message: '#^Method Model\\Jobs\\JobStruct\:\:getOutsource\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + + - + message: '#^Method Model\\Jobs\\JobStruct\:\:getQualityOverall\(\) has parameter \$chunkReviews with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: lib/Model/Jobs/JobStruct.php @@ -10092,12 +11976,48 @@ parameters: count: 1 path: lib/Model/Jobs/JobStruct.php + - + message: '#^Method Model\\Jobs\\JobStruct\:\:getTranslator\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + + - + message: '#^Method Model\\Jobs\\JobStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + + - + message: '#^Method Model\\Jobs\\JobStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + + - + message: '#^Method Model\\Jobs\\JobStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + + - + message: '#^Method Model\\Jobs\\JobStruct\:\:setIsReview\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + - message: '#^Method Model\\Jobs\\JobStruct\:\:setSourcePage\(\) has parameter \$_revisionNumber with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Jobs/JobStruct.php + - + message: '#^Method Model\\Jobs\\JobStruct\:\:setSourcePage\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Jobs/JobStruct.php + - message: '#^Parameter \#1 \$id_job of method Model\\Jobs\\JobDao\:\:getPeeStats\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -10164,6 +12084,12 @@ parameters: count: 1 path: lib/Model/Jobs/MetadataDao.php + - + message: '#^Method Model\\Jobs\\MetadataDao\:\:bulkSet\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Jobs/MetadataDao.php + - message: '#^Method Model\\Jobs\\MetadataDao\:\:delete\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -10182,12 +12108,24 @@ parameters: count: 1 path: lib/Model/Jobs/MetadataDao.php + - + message: '#^Method Model\\Jobs\\MetadataDao\:\:delete\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Jobs/MetadataDao.php + - message: '#^Method Model\\Jobs\\MetadataDao\:\:getSubfilteringCustomHandlers\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Jobs/MetadataDao.php + - + message: '#^Method Model\\Jobs\\MetadataDao\:\:set\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Jobs/MetadataDao.php + - message: '#^Unsafe access to private property Model\\Jobs\\MetadataDao\:\:\$__transactionStarted through static\:\:\.$#' identifier: staticClassAccess.privateProperty @@ -10206,6 +12144,18 @@ parameters: count: 1 path: lib/Model/LQA/CategoryDao.php + - + message: '#^Method Model\\LQA\\CategoryDao\:\:createRecord\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/CategoryDao.php + + - + message: '#^Method Model\\LQA\\CategoryDao\:\:createRecord\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/CategoryDao.php + - message: '#^Method Model\\LQA\\CategoryDao\:\:extractOptions\(\) has parameter \$json with no type specified\.$#' identifier: missingType.parameter @@ -10236,6 +12186,12 @@ parameters: count: 1 path: lib/Model/LQA/CategoryDao.php + - + message: '#^Method Model\\LQA\\CategoryDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/CategoryDao.php + - message: '#^Method Model\\LQA\\CategoryDao\:\:findByIdModelAndIdParent\(\) has parameter \$id_model with no type specified\.$#' identifier: missingType.parameter @@ -10248,6 +12204,12 @@ parameters: count: 1 path: lib/Model/LQA/CategoryDao.php + - + message: '#^Method Model\\LQA\\CategoryDao\:\:findByIdModelAndIdParent\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/CategoryDao.php + - message: '#^Method Model\\LQA\\CategoryDao\:\:getCategoriesAndSeverities\(\) has parameter \$id_model with no type specified\.$#' identifier: missingType.parameter @@ -10260,6 +12222,18 @@ parameters: count: 1 path: lib/Model/LQA/CategoryDao.php + - + message: '#^Method Model\\LQA\\CategoryDao\:\:getCategoriesAndSeverities\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/CategoryDao.php + + - + message: '#^Method Model\\LQA\\CategoryDao\:\:getCategoriesByModel\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/CategoryDao.php + - message: '#^Offset ''id'' might not exist on array\{subcategories\: list\, label\?\: mixed, id\?\: int, options\?\: array, severities\?\: array\}\.$#' identifier: offsetAccess.notFound @@ -10314,6 +12288,12 @@ parameters: count: 1 path: lib/Model/LQA/ChunkReviewDao.php + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:_findChunkReviews\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/ChunkReviewDao.php + - message: '#^Method Model\\LQA\\ChunkReviewDao\:\:_findChunkReviewsStatement\(\) has parameter \$chunksArray with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -10338,18 +12318,66 @@ parameters: count: 1 path: lib/Model/LQA/ChunkReviewDao.php + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:countTimeToEdit\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ChunkReviewDao.php + - message: '#^Method Model\\LQA\\ChunkReviewDao\:\:createRecord\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/LQA/ChunkReviewDao.php + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:createRecord\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:createRecord\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:deleteByJobId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:exists\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/ChunkReviewDao.php + - message: '#^Method Model\\LQA\\ChunkReviewDao\:\:findByIdJob\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/LQA/ChunkReviewDao.php + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:findByIdJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:findByIdJobAndPasswordAndSourcePage\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/ChunkReviewDao.php + - message: '#^Method Model\\LQA\\ChunkReviewDao\:\:findByProjectId\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -10374,12 +12402,48 @@ parameters: count: 1 path: lib/Model/LQA/ChunkReviewDao.php + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:findLastReviewByJobIdPasswordAndSourcePage\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:getPenaltyPointsForChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:getReviewedWordsCountForSecondPass\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:isTOrR1OrR2\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/ChunkReviewDao.php + - message: '#^Method Model\\LQA\\ChunkReviewDao\:\:passFailCountsAtomicUpdate\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/LQA/ChunkReviewDao.php + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:updatePassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ChunkReviewDao.php + + - + message: '#^Method Model\\LQA\\ChunkReviewDao\:\:updateReviewPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ChunkReviewDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$chunkReview ChunkReviewStruct\)\: Unexpected token "\$chunkReview", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -10434,6 +12498,18 @@ parameters: count: 1 path: lib/Model/LQA/EntryCommentDao.php + - + message: '#^Method Model\\LQA\\EntryCommentDao\:\:createComment\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/LQA/EntryCommentDao.php + + - + message: '#^Method Model\\LQA\\EntryCommentDao\:\:createComment\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/EntryCommentDao.php + - message: '#^Method Model\\LQA\\EntryCommentDao\:\:fetchCommentsGroupedByIssueIds\(\) has parameter \$ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -10446,18 +12522,42 @@ parameters: count: 1 path: lib/Model/LQA/EntryCommentDao.php + - + message: '#^Method Model\\LQA\\EntryCommentDao\:\:fetchCommentsGroupedByIssueIds\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/EntryCommentDao.php + - message: '#^Method Model\\LQA\\EntryCommentDao\:\:findById\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/LQA/EntryCommentDao.php + - + message: '#^Method Model\\LQA\\EntryCommentDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/EntryCommentDao.php + - message: '#^Method Model\\LQA\\EntryCommentDao\:\:findByIssueId\(\) has parameter \$id_issue with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/LQA/EntryCommentDao.php + - + message: '#^Method Model\\LQA\\EntryCommentDao\:\:findByIssueId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/EntryCommentDao.php + + - + message: '#^Method Model\\LQA\\EntryCommentDao\:\:move\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/EntryCommentDao.php + - message: '#^Property Model\\LQA\\EntryCommentStruct\:\:\$id \(int\|null\) does not accept string\|false\.$#' identifier: assign.propertyType @@ -10482,24 +12582,90 @@ parameters: count: 1 path: lib/Model/LQA/EntryDao.php + - + message: '#^Method Model\\LQA\\EntryDao\:\:createEntry\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/EntryDao.php + + - + message: '#^Method Model\\LQA\\EntryDao\:\:createEntry\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/EntryDao.php + + - + message: '#^Method Model\\LQA\\EntryDao\:\:deleteEntry\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/LQA/EntryDao.php + + - + message: '#^Method Model\\LQA\\EntryDao\:\:findAllByChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/EntryDao.php + + - + message: '#^Method Model\\LQA\\EntryDao\:\:findAllByTranslationVersion\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/EntryDao.php + - message: '#^Method Model\\LQA\\EntryDao\:\:findById\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/LQA/EntryDao.php + - + message: '#^Method Model\\LQA\\EntryDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/EntryDao.php + + - + message: '#^Method Model\\LQA\\EntryDao\:\:findByIdSegmentAndSourcePage\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/EntryDao.php + - message: '#^Method Model\\LQA\\EntryDao\:\:getBySegmentIds\(\) has parameter \$ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/LQA/EntryDao.php + - + message: '#^Method Model\\LQA\\EntryDao\:\:getBySegmentIds\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/LQA/EntryDao.php + + - + message: '#^Method Model\\LQA\\EntryDao\:\:getIssuesGroupedByIdFilePart\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/EntryDao.php + + - + message: '#^Method Model\\LQA\\EntryDao\:\:modifyEntry\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/LQA/EntryDao.php + - message: '#^Method Model\\LQA\\EntryDao\:\:updateRepliesCount\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/LQA/EntryDao.php + - + message: '#^Method Model\\LQA\\EntryDao\:\:updateRepliesCount\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/LQA/EntryDao.php + - message: '#^Property Model\\LQA\\EntryStruct\:\:\$id \(int\|null\) does not accept string\|false\.$#' identifier: assign.propertyType @@ -10536,6 +12702,12 @@ parameters: count: 1 path: lib/Model/LQA/EntryStruct.php + - + message: '#^Method Model\\LQA\\EntryStruct\:\:setDefaults\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/LQA/EntryStruct.php + - message: '#^PHPDoc tag @return with type array\|null is not subtype of native type float\|null\.$#' identifier: return.phpDocType @@ -10632,12 +12804,30 @@ parameters: count: 1 path: lib/Model/LQA/ModelDao.php + - + message: '#^Method Model\\LQA\\ModelDao\:\:createRecord\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/LQA/ModelDao.php + + - + message: '#^Method Model\\LQA\\ModelDao\:\:createRecord\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/ModelDao.php + - message: '#^Method Model\\LQA\\ModelDao\:\:decodePassOptions\(\) has parameter \$options with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/LQA/ModelDao.php + - + message: '#^Method Model\\LQA\\ModelDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/ModelDao.php + - message: '#^Method Model\\LQA\\ModelDao\:\:insertCategory\(\) has parameter \$category with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -10800,6 +12990,30 @@ parameters: count: 1 path: lib/Model/LQA/QAModelTemplate/QAModelTemplateDao.php + - + message: '#^Method Model\\LQA\\QAModelTemplate\\QAModelTemplateDao\:\:remove\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/LQA/QAModelTemplate/QAModelTemplateDao.php + + - + message: '#^Method Model\\LQA\\QAModelTemplate\\QAModelTemplateDao\:\:remove\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/LQA/QAModelTemplate/QAModelTemplateDao.php + + - + message: '#^Method Model\\LQA\\QAModelTemplate\\QAModelTemplateDao\:\:save\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 7 + path: lib/Model/LQA/QAModelTemplate/QAModelTemplateDao.php + + - + message: '#^Method Model\\LQA\\QAModelTemplate\\QAModelTemplateDao\:\:update\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/LQA/QAModelTemplate/QAModelTemplateDao.php + - message: '#^Parameter \#1 \$date of static method Utils\\Date\\DateTimeUtil\:\:formatIsoDate\(\) expects null, string given\.$#' identifier: argument.type @@ -10908,6 +13122,12 @@ parameters: count: 1 path: lib/Model/LQA/QAModelTemplate/QAModelTemplateStruct.php + - + message: '#^Method Model\\LQA\\QAModelTemplate\\QAModelTemplateStruct\:\:hydrateFromJSON\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 15 + path: lib/Model/LQA/QAModelTemplate/QAModelTemplateStruct.php + - message: '#^Method Model\\LQA\\QAModelTemplate\\QAModelTemplateStruct\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -10950,6 +13170,18 @@ parameters: count: 1 path: lib/Model/MTQE/PayableRate/MTQEPayableRateStruct.php + - + message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateStruct\:\:hydrateFromJSON\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/MTQE/PayableRate/MTQEPayableRateStruct.php + + - + message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateStruct\:\:hydrateFromJSON\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 7 + path: lib/Model/MTQE/PayableRate/MTQEPayableRateStruct.php + - message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateStruct\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -10962,6 +13194,24 @@ parameters: count: 1 path: lib/Model/MTQE/PayableRate/MTQEPayableRateStruct.php + - + message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateTemplateDao\:\:destroyQueryByIdAndUserCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php + + - + message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateTemplateDao\:\:destroyQueryByIdCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php + + - + message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateTemplateDao\:\:destroyQueryByUidCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php + - message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateTemplateDao\:\:getAllPaginated\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -10987,9 +13237,21 @@ parameters: path: lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php - - message: '#^PHPDoc tag @return with type Model\\MTQE\\PayableRate\\DTO\\MTQEPayableRateBreakdowns\|null is not subtype of native type Model\\MTQE\\PayableRate\\MTQEPayableRateStruct\|null\.$#' - identifier: return.phpDocType - count: 1 + message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateTemplateDao\:\:hydrateTemplateStruct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php + + - + message: '#^Method Model\\MTQE\\PayableRate\\MTQEPayableRateTemplateDao\:\:remove\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php + + - + message: '#^PHPDoc tag @return with type Model\\MTQE\\PayableRate\\DTO\\MTQEPayableRateBreakdowns\|null is not subtype of native type Model\\MTQE\\PayableRate\\MTQEPayableRateStruct\|null\.$#' + identifier: return.phpDocType + count: 1 path: lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php - @@ -11016,6 +13278,24 @@ parameters: count: 1 path: lib/Model/MTQE/Templates/DTO/MTQEWorkflowParams.php + - + message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateDao\:\:destroyQueryByIdAndUserCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateDao.php + + - + message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateDao\:\:destroyQueryByIdCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateDao.php + + - + message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateDao\:\:destroyQueryByUidCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateDao.php + - message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateDao\:\:getAllPaginated\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11040,6 +13320,18 @@ parameters: count: 1 path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateDao.php + - + message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateDao\:\:hydrateTemplateStruct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateDao.php + + - + message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateDao\:\:remove\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateDao.php + - message: '#^Unsafe access to private property Model\\MTQE\\Templates\\MTQEWorkflowTemplateDao\:\:\$instance through static\:\:\.$#' identifier: staticClassAccess.privateProperty @@ -11058,6 +13350,18 @@ parameters: count: 1 path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateStruct.php + - + message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateStruct\:\:hydrateFromJSON\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateStruct.php + + - + message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateStruct\:\:hydrateFromJSON\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/MTQE/Templates/MTQEWorkflowTemplateStruct.php + - message: '#^Method Model\\MTQE\\Templates\\MTQEWorkflowTemplateStruct\:\:hydrateParamsFromDataArray\(\) has parameter \$params with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11094,6 +13398,12 @@ parameters: count: 1 path: lib/Model/Outsource/ConfirmationDao.php + - + message: '#^Method Model\\Outsource\\ConfirmationDao\:\:updatePassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/Outsource/ConfirmationDao.php + - message: '#^Property Model\\Outsource\\ConfirmationDao\:\:\$auto_increment_field type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11172,18 +13482,42 @@ parameters: count: 2 path: lib/Model/OwnerFeatures/OwnerFeatureDao.php + - + message: '#^Method Model\\OwnerFeatures\\OwnerFeatureDao\:\:create\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/OwnerFeatures/OwnerFeatureDao.php + - message: '#^Method Model\\OwnerFeatures\\OwnerFeatureDao\:\:destroyCacheByIdCustomer\(\) has parameter \$id_customer with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/OwnerFeatures/OwnerFeatureDao.php + - + message: '#^Method Model\\OwnerFeatures\\OwnerFeatureDao\:\:getById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/OwnerFeatures/OwnerFeatureDao.php + + - + message: '#^Method Model\\OwnerFeatures\\OwnerFeatureDao\:\:getByIdCustomer\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/OwnerFeatures/OwnerFeatureDao.php + - message: '#^Method Model\\OwnerFeatures\\OwnerFeatureDao\:\:getByUserId\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/OwnerFeatures/OwnerFeatureDao.php + - + message: '#^Method Model\\OwnerFeatures\\OwnerFeatureDao\:\:getByUserId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/OwnerFeatures/OwnerFeatureDao.php + - message: '#^Parameter \#1 \$id of method Model\\OwnerFeatures\\OwnerFeatureDao\:\:getById\(\) expects int, string\|false given\.$#' identifier: argument.type @@ -11208,6 +13542,12 @@ parameters: count: 1 path: lib/Model/OwnerFeatures/OwnerFeatureStruct.php + - + message: '#^Method Model\\Pagination\\Pager\:\:_cacheSetConnection\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Pagination/Pager.php + - message: '#^Method Model\\Pagination\\Pager\:\:_deleteCacheByKey\(\) should return bool but returns int\.$#' identifier: return.type @@ -11232,6 +13572,12 @@ parameters: count: 1 path: lib/Model/Pagination/Pager.php + - + message: '#^Method Model\\Pagination\\Pager\:\:count\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Pagination/Pager.php + - message: '#^Method Model\\Pagination\\Pager\:\:format\(\) has parameter \$items with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11250,6 +13596,24 @@ parameters: count: 1 path: lib/Model/Pagination/Pager.php + - + message: '#^Method Model\\Pagination\\Pager\:\:getPagination\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Pagination/Pager.php + + - + message: '#^Method Model\\Pagination\\Pager\:\:getPagination\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Pagination/Pager.php + + - + message: '#^Method Model\\Pagination\\Pager\:\:getPagination\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Pagination/Pager.php + - message: '#^Parameter \#1 \$key of method Predis\\ClientInterface\:\:get\(\) expects string, int given\.$#' identifier: argument.type @@ -11286,6 +13650,12 @@ parameters: count: 1 path: lib/Model/Pagination/PaginationParameters.php + - + message: '#^Method Model\\Pagination\\PaginationParameters\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Pagination/PaginationParameters.php + - message: '#^Method Model\\Pagination\\PaginationParameters\:\:getBindParams\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11340,6 +13710,24 @@ parameters: count: 1 path: lib/Model/PayableRates/CustomPayableRateDao.php + - + message: '#^Method Model\\PayableRates\\CustomPayableRateDao\:\:assocModelToJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/PayableRates/CustomPayableRateDao.php + + - + message: '#^Method Model\\PayableRates\\CustomPayableRateDao\:\:destroyQueryByIdAndUserCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/PayableRates/CustomPayableRateDao.php + + - + message: '#^Method Model\\PayableRates\\CustomPayableRateDao\:\:destroyQueryByIdCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/PayableRates/CustomPayableRateDao.php + - message: '#^Method Model\\PayableRates\\CustomPayableRateDao\:\:getAllPaginated\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11358,6 +13746,18 @@ parameters: count: 1 path: lib/Model/PayableRates/CustomPayableRateDao.php + - + message: '#^Method Model\\PayableRates\\CustomPayableRateDao\:\:remove\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/PayableRates/CustomPayableRateDao.php + + - + message: '#^Method Model\\PayableRates\\CustomPayableRateDao\:\:save\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/PayableRates/CustomPayableRateDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$result CustomPayableRateStruct\[\]\)\: Unexpected token "\$result", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -11424,12 +13824,24 @@ parameters: count: 1 path: lib/Model/PayableRates/CustomPayableRateStruct.php + - + message: '#^Method Model\\PayableRates\\CustomPayableRateStruct\:\:getBreakdownsArray\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/PayableRates/CustomPayableRateStruct.php + - message: '#^Method Model\\PayableRates\\CustomPayableRateStruct\:\:getPayableRates\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/PayableRates/CustomPayableRateStruct.php + - + message: '#^Method Model\\PayableRates\\CustomPayableRateStruct\:\:hydrateFromJSON\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/PayableRates/CustomPayableRateStruct.php + - message: '#^Method Model\\PayableRates\\CustomPayableRateStruct\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11448,6 +13860,12 @@ parameters: count: 1 path: lib/Model/PayableRates/CustomPayableRateStruct.php + - + message: '#^Method Model\\PayableRates\\CustomPayableRateStruct\:\:validateLanguage\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/PayableRates/CustomPayableRateStruct.php + - message: '#^Parameter \#1 \$date of static method Utils\\Date\\DateTimeUtil\:\:formatIsoDate\(\) expects null, string given\.$#' identifier: argument.type @@ -11466,6 +13884,12 @@ parameters: count: 1 path: lib/Model/PayableRates/CustomPayableRateStruct.php + - + message: '#^Method Model\\ProjectCreation\\JobCreationService\:\:buildTmKeysJson\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/ProjectCreation/JobCreationService.php + - message: '#^Property Model\\ProjectCreation\\ProjectStructure\:\:\$instance_id \(int\) on left side of \?\? is not nullable\.$#' identifier: nullCoalesce.property @@ -11484,12 +13908,24 @@ parameters: count: 1 path: lib/Model/ProjectCreation/SegmentExtractor.php + - + message: '#^Method Model\\ProjectCreation\\SegmentExtractor\:\:persistXliffFileAttributes\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ProjectCreation/SegmentExtractor.php + - message: '#^Result of \|\| is always true\.$#' identifier: booleanOr.alwaysTrue count: 1 path: lib/Model/ProjectCreation/SegmentExtractor.php + - + message: '#^Method Model\\ProjectCreation\\SegmentStorageService\:\:linkSegmentIdsToRelatedData\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ProjectCreation/SegmentStorageService.php + - message: '#^Parameter \#1 \$id_segment of method Model\\ProjectCreation\\SegmentStorageService\:\:insertOriginalDataRecord\(\) expects int, int\|string given\.$#' identifier: argument.type @@ -11502,12 +13938,24 @@ parameters: count: 1 path: lib/Model/ProjectCreation/SegmentStorageService.php + - + message: '#^Method Model\\ProjectCreation\\TmKeyService\:\:setPrivateTMKeys\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ProjectCreation/TmKeyService.php + - message: '#^Method Model\\Projects\\ManageModel\:\:_getProjects\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Projects/ManageModel.php + - + message: '#^Method Model\\Projects\\ManageModel\:\:_getProjects\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ManageModel.php + - message: '#^Method Model\\Projects\\ManageModel\:\:conditionsForProjectsQuery\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11556,6 +14004,12 @@ parameters: count: 1 path: lib/Model/Projects/ManageModel.php + - + message: '#^Method Model\\Projects\\ManageModel\:\:getProjectsNumber\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ManageModel.php + - message: '#^Parameter \#1 \$datetime of class DateTime constructor expects string, string\|null given\.$#' identifier: argument.type @@ -11574,6 +14028,24 @@ parameters: count: 1 path: lib/Model/Projects/MetadataDao.php + - + message: '#^Method Model\\Projects\\MetadataDao\:\:allByProjectId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/MetadataDao.php + + - + message: '#^Method Model\\Projects\\MetadataDao\:\:bulkSet\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Projects/MetadataDao.php + + - + message: '#^Method Model\\Projects\\MetadataDao\:\:delete\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Projects/MetadataDao.php + - message: '#^Method Model\\Projects\\MetadataDao\:\:getProjectStaticSubfilteringCustomHandlers\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11586,6 +14058,12 @@ parameters: count: 1 path: lib/Model/Projects/MetadataDao.php + - + message: '#^Method Model\\Projects\\MetadataDao\:\:set\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/MetadataDao.php + - message: '#^Using nullsafe property access "\?\-\>value" on left side of \?\? is unnecessary\. Use \-\> instead\.$#' identifier: nullsafe.neverNull @@ -11604,12 +14082,24 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:assignToAssignee\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:assignToTeam\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:assignToTeam\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:changeProjectStatus\(\) has parameter \$pid with no type specified\.$#' identifier: missingType.parameter @@ -11622,6 +14112,24 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:deleteFailedProject\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ProjectDao.php + + - + message: '#^Method Model\\Projects\\ProjectDao\:\:destroyCacheById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + + - + message: '#^Method Model\\Projects\\ProjectDao\:\:destroyCacheByIdAndPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:destroyCacheForProjectData\(\) has parameter \$jid with no type specified\.$#' identifier: missingType.parameter @@ -11646,12 +14154,24 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:exists\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:findById\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:findByIdAndPassword\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter @@ -11664,18 +14184,42 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:findByIdAndPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:findByIdCustomer\(\) has parameter \$id_customer with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:findByIdCustomer\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Projects/ProjectDao.php + + - + message: '#^Method Model\\Projects\\ProjectDao\:\:findByJobId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:findByTeamId\(\) has parameter \$filter with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:findByTeamId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:getByIdList\(\) has parameter \$id_list with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -11688,6 +14232,12 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:getByIdList\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:getJobIds\(\) has parameter \$pid with no type specified\.$#' identifier: missingType.parameter @@ -11700,6 +14250,12 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:getJobIds\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:getPasswordsMap\(\) has parameter \$pid with no type specified\.$#' identifier: missingType.parameter @@ -11712,30 +14268,72 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:getPasswordsMap\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:getProjectAndJobData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:getProjectAndJobData\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:getRemoteFileServiceName\(\) has parameter \$project_ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:getRemoteFileServiceName\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:getTotalCountByTeamId\(\) has parameter \$filter with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:getTotalCountByTeamId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:isGDriveProject\(\) has parameter \$id_project with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:isGDriveProject\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Projects/ProjectDao.php + + - + message: '#^Method Model\\Projects\\ProjectDao\:\:massiveSelfAssignment\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ProjectDao.php + + - + message: '#^Method Model\\Projects\\ProjectDao\:\:unassignProjects\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:uncompletedChunksByProjectId\(\) has parameter \$id_project with no type specified\.$#' identifier: missingType.parameter @@ -11766,12 +14364,24 @@ parameters: count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:updateAnalysisStatus\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Projects/ProjectDao.php + - message: '#^Method Model\\Projects\\ProjectDao\:\:updateField\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Projects/ProjectDao.php + - + message: '#^Method Model\\Projects\\ProjectDao\:\:updateField\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectDao.php + - message: '#^PHPDoc tag @return has invalid value \(ProjectStruct\[\]\|IDaoStruct\[\]\|\[\]\)\: Unexpected token "\[", expected type at offset 84 on line 4$#' identifier: phpDoc.parseError @@ -11904,6 +14514,24 @@ parameters: count: 1 path: lib/Model/Projects/ProjectStruct.php + - + message: '#^Method Model\\Projects\\ProjectStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectStruct.php + + - + message: '#^Method Model\\Projects\\ProjectStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectStruct.php + + - + message: '#^Method Model\\Projects\\ProjectStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectStruct.php + - message: '#^Parameter \#1 \$id of method Model\\Projects\\MetadataDao\:\:allByProjectId\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -11935,23 +14563,71 @@ parameters: path: lib/Model/Projects/ProjectStruct.php - - message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:getAllPaginated\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:destroyDefaultTemplateCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException count: 1 path: lib/Model/Projects/ProjectTemplateDao.php - - message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:getDefaultTemplate\(\) has parameter \$uid with no type specified\.$#' + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:destroyQueryByIdAndUserCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectTemplateDao.php + + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:destroyQueryByIdCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectTemplateDao.php + + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:getAllPaginated\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: lib/Model/Projects/ProjectTemplateDao.php + + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:getDefaultTemplate\(\) has parameter \$uid with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Projects/ProjectTemplateDao.php + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:getDefaultTemplate\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/Projects/ProjectTemplateDao.php + - message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:getUserDefaultMt\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Projects/ProjectTemplateDao.php + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:markAsNotDefault\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/Projects/ProjectTemplateDao.php + + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:remove\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ProjectTemplateDao.php + + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:removeSubTemplateByIdAndUser\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Projects/ProjectTemplateDao.php + + - + message: '#^Method Model\\Projects\\ProjectTemplateDao\:\:save\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Projects/ProjectTemplateDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$result ProjectTemplateStruct\[\]\)\: Unexpected token "\$result", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -12156,6 +14832,12 @@ parameters: count: 1 path: lib/Model/Projects/ProjectTemplateStruct.php + - + message: '#^Method Model\\Projects\\ProjectTemplateStruct\:\:hydrateFromJSON\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 24 + path: lib/Model/Projects/ProjectTemplateStruct.php + - message: '#^Method Model\\Projects\\ProjectTemplateStruct\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12276,6 +14958,12 @@ parameters: count: 1 path: lib/Model/QualityReport/QualityReportDao.php + - + message: '#^Method Model\\QualityReport\\QualityReportDao\:\:getAverages\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/QualityReport/QualityReportDao.php + - message: '#^Method Model\\QualityReport\\QualityReportDao\:\:getIssuesBySegments\(\) has parameter \$segments_id with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12288,12 +14976,30 @@ parameters: count: 1 path: lib/Model/QualityReport/QualityReportDao.php + - + message: '#^Method Model\\QualityReport\\QualityReportDao\:\:getIssuesBySegments\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/QualityReport/QualityReportDao.php + + - + message: '#^Method Model\\QualityReport\\QualityReportDao\:\:getReviseIssuesByChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/QualityReport/QualityReportDao.php + - message: '#^Method Model\\QualityReport\\QualityReportDao\:\:getSegmentsForQualityReport\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/QualityReport/QualityReportDao.php + - + message: '#^Method Model\\QualityReport\\QualityReportDao\:\:getSegmentsForQualityReport\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/QualityReport/QualityReportDao.php + - message: '#^Cannot call method fullName\(\) on Model\\Users\\UserStruct\|null\.$#' identifier: method.nonObject @@ -12342,6 +15048,12 @@ parameters: count: 1 path: lib/Model/QualityReport/QualityReportModel.php + - + message: '#^Method Model\\QualityReport\\QualityReportModel\:\:resetScore\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/QualityReport/QualityReportModel.php + - message: '#^Method Model\\QualityReport\\QualityReportModel\:\:structureNestComment\(\) has parameter \$record with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12426,6 +15138,12 @@ parameters: count: 1 path: lib/Model/QualityReport/QualityReportSegmentModel.php + - + message: '#^Method Model\\QualityReport\\QualityReportSegmentModel\:\:_assignComments\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/QualityReport/QualityReportSegmentModel.php + - message: '#^Method Model\\QualityReport\\QualityReportSegmentModel\:\:_assignIssues\(\) has no return type specified\.$#' identifier: missingType.return @@ -12456,6 +15174,24 @@ parameters: count: 1 path: lib/Model/QualityReport/QualityReportSegmentModel.php + - + message: '#^Method Model\\QualityReport\\QualityReportSegmentModel\:\:_commonSegmentAssignments\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/QualityReport/QualityReportSegmentModel.php + + - + message: '#^Method Model\\QualityReport\\QualityReportSegmentModel\:\:_getChunkReviews\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/QualityReport/QualityReportSegmentModel.php + + - + message: '#^Method Model\\QualityReport\\QualityReportSegmentModel\:\:_populateLastTranslationAndRevision\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/QualityReport/QualityReportSegmentModel.php + - message: '#^Method Model\\QualityReport\\QualityReportSegmentModel\:\:getSegmentsForQR\(\) has parameter \$segment_ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12534,6 +15270,12 @@ parameters: count: 1 path: lib/Model/QualityReport/QualityReportSegmentStruct.php + - + message: '#^Method Model\\QualityReport\\QualityReportSegmentStruct\:\:getSecsPerWord\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/QualityReport/QualityReportSegmentStruct.php + - message: '#^Parameter \#1 \$id_job of method Model\\Jobs\\MetadataDao\:\:getSubfilteringCustomHandlers\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -12594,6 +15336,36 @@ parameters: count: 1 path: lib/Model/RemoteFiles/RemoteFileDao.php + - + message: '#^Method Model\\RemoteFiles\\RemoteFileDao\:\:getByFileAndJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/RemoteFiles/RemoteFileDao.php + + - + message: '#^Method Model\\RemoteFiles\\RemoteFileDao\:\:getByFileId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/RemoteFiles/RemoteFileDao.php + + - + message: '#^Method Model\\RemoteFiles\\RemoteFileDao\:\:getByJobId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/RemoteFiles/RemoteFileDao.php + + - + message: '#^Method Model\\RemoteFiles\\RemoteFileDao\:\:getOriginalsByJobId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/RemoteFiles/RemoteFileDao.php + + - + message: '#^Method Model\\RemoteFiles\\RemoteFileDao\:\:jobHasRemoteFiles\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/RemoteFiles/RemoteFileDao.php + - message: '#^Method Model\\ReviseFeedback\\FeedbackDAO\:\:getFeedback\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -12612,18 +15384,66 @@ parameters: count: 1 path: lib/Model/ReviseFeedback/FeedbackDAO.php + - + message: '#^Method Model\\ReviseFeedback\\FeedbackDAO\:\:getFeedback\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/ReviseFeedback/FeedbackDAO.php + + - + message: '#^Method Model\\ReviseFeedback\\FeedbackDAO\:\:insertOrUpdate\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ReviseFeedback/FeedbackDAO.php + + - + message: '#^Method Model\\ReviseFeedback\\FeedbackDAO\:\:updateFeedbackPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/ReviseFeedback/FeedbackDAO.php + - message: '#^Expression on left side of \?\? is not nullable\.$#' identifier: nullCoalesce.expr count: 1 path: lib/Model/Search/MySQLReplaceEventDAO.php + - + message: '#^Method Model\\Search\\MySQLReplaceEventDAO\:\:getEvents\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Search/MySQLReplaceEventDAO.php + + - + message: '#^Method Model\\Search\\MySQLReplaceEventDAO\:\:save\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Search/MySQLReplaceEventDAO.php + + - + message: '#^Method Model\\Search\\MySQLReplaceEventIndexDAO\:\:getActualIndex\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Search/MySQLReplaceEventIndexDAO.php + + - + message: '#^Method Model\\Search\\MySQLReplaceEventIndexDAO\:\:save\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Search/MySQLReplaceEventIndexDAO.php + - message: '#^Call to an undefined method Predis\\Client\:\:hgetAll\(\)\.$#' identifier: method.notFound count: 1 path: lib/Model/Search/RedisReplaceEventDAO.php + - + message: '#^Method Model\\Search\\RedisReplaceEventDAO\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Search/RedisReplaceEventDAO.php + - message: '#^Parameter \#2 \$field of method Predis\\ClientInterface\:\:hset\(\) expects string, int given\.$#' identifier: argument.type @@ -12642,6 +15462,12 @@ parameters: count: 1 path: lib/Model/Search/RedisReplaceEventDAO.php + - + message: '#^Method Model\\Search\\RedisReplaceEventIndexDAO\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Search/RedisReplaceEventIndexDAO.php + - message: '#^PHPDoc tag @return with type mixed is not subtype of native type int\.$#' identifier: return.phpDocType @@ -12660,6 +15486,12 @@ parameters: count: 1 path: lib/Model/Search/SearchModel.php + - + message: '#^Method Model\\Search\\SearchModel\:\:_loadParams\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Search/SearchModel.php + - message: '#^Method Model\\Search\\SearchModel\:\:find\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12756,6 +15588,24 @@ parameters: count: 1 path: lib/Model/Segments/ContextStruct.php + - + message: '#^Method Model\\Segments\\ContextStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/ContextStruct.php + + - + message: '#^Method Model\\Segments\\ContextStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/ContextStruct.php + + - + message: '#^Method Model\\Segments\\ContextStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/ContextStruct.php + - message: '#^Parameter \#1 \$json of function json_decode expects string, array\|string given\.$#' identifier: argument.type @@ -12780,6 +15630,30 @@ parameters: count: 2 path: lib/Model/Segments/SegmentDao.php + - + message: '#^Method Model\\Segments\\SegmentDao\:\:countByFile\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Segments/SegmentDao.php + + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getByChunkId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Segments/SegmentDao.php + + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getByChunkIdAndSegmentId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentDao.php + + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Segments/SegmentDao.php + - message: '#^Method Model\\Segments\\SegmentDao\:\:getContextAndSegmentByIDs\(\) has parameter \$id_list with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12792,18 +15666,48 @@ parameters: count: 1 path: lib/Model/Segments/SegmentDao.php + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getNextSegment\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Segments/SegmentDao.php + - message: '#^Method Model\\Segments\\SegmentDao\:\:getPaginationSegments\(\) has parameter \$options with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Segments/SegmentDao.php + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getPaginationSegments\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentDao.php + - message: '#^Method Model\\Segments\\SegmentDao\:\:getSegmentsDownload\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Segments/SegmentDao.php + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getSegmentsDownload\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Segments/SegmentDao.php + + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getSegmentsForAnalysisFromIdJobAndPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentDao.php + + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getSegmentsForAnalysisFromIdProjectAndPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentDao.php + - message: '#^Method Model\\Segments\\SegmentDao\:\:getSegmentsForQr\(\) has parameter \$job_id with no type specified\.$#' identifier: missingType.parameter @@ -12822,6 +15726,12 @@ parameters: count: 1 path: lib/Model/Segments/SegmentDao.php + - + message: '#^Method Model\\Segments\\SegmentDao\:\:getSegmentsForQr\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Segments/SegmentDao.php + - message: '#^Method Model\\Segments\\SegmentDao\:\:getSegmentsIdForQR\(\) has parameter \$options with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12864,12 +15774,36 @@ parameters: count: 1 path: lib/Model/Segments/SegmentMetadataDao.php + - + message: '#^Method Model\\Segments\\SegmentMetadataDao\:\:get\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentMetadataDao.php + + - + message: '#^Method Model\\Segments\\SegmentMetadataDao\:\:getAll\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentMetadataDao.php + - message: '#^Method Model\\Segments\\SegmentMetadataDao\:\:getBySegmentIds\(\) has parameter \$ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Segments/SegmentMetadataDao.php + - + message: '#^Method Model\\Segments\\SegmentMetadataDao\:\:getBySegmentIds\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentMetadataDao.php + + - + message: '#^Method Model\\Segments\\SegmentMetadataDao\:\:save\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Segments/SegmentMetadataDao.php + - message: '#^Method Model\\Segments\\SegmentNoteDao\:\:_buildResult\(\) has no return type specified\.$#' identifier: missingType.return @@ -12888,18 +15822,54 @@ parameters: count: 1 path: lib/Model/Segments/SegmentNoteDao.php + - + message: '#^Method Model\\Segments\\SegmentNoteDao\:\:getAggregatedBySegmentIdInInterval\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Segments/SegmentNoteDao.php + - message: '#^Method Model\\Segments\\SegmentNoteDao\:\:getAllAggregatedBySegmentIdInInterval\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Segments/SegmentNoteDao.php + - + message: '#^Method Model\\Segments\\SegmentNoteDao\:\:getAllAggregatedBySegmentIdInInterval\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Segments/SegmentNoteDao.php + + - + message: '#^Method Model\\Segments\\SegmentNoteDao\:\:getBySegmentId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentNoteDao.php + - message: '#^Method Model\\Segments\\SegmentNoteDao\:\:getBySegmentIds\(\) has parameter \$ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Segments/SegmentNoteDao.php + - + message: '#^Method Model\\Segments\\SegmentNoteDao\:\:getBySegmentIds\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentNoteDao.php + + - + message: '#^Method Model\\Segments\\SegmentNoteDao\:\:getJsonNotesByRange\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentNoteDao.php + + - + message: '#^Method Model\\Segments\\SegmentOriginalDataDao\:\:getBySegmentId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentOriginalDataDao.php + - message: '#^Method Model\\Segments\\SegmentOriginalDataDao\:\:getSegmentDataRefMap\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12912,6 +15882,12 @@ parameters: count: 1 path: lib/Model/Segments/SegmentOriginalDataDao.php + - + message: '#^Method Model\\Segments\\SegmentOriginalDataDao\:\:insertRecord\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Segments/SegmentOriginalDataDao.php + - message: '#^Parameter \#1 \$string of function trim expects string, string\|null given\.$#' identifier: argument.type @@ -12930,12 +15906,24 @@ parameters: count: 1 path: lib/Model/Segments/SegmentOriginalDataStruct.php + - + message: '#^Method Model\\Segments\\SegmentOriginalDataStruct\:\:getMap\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentOriginalDataStruct.php + - message: '#^Method Model\\Segments\\SegmentOriginalDataStruct\:\:setMap\(\) has parameter \$map with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Segments/SegmentOriginalDataStruct.php + - + message: '#^Method Model\\Segments\\SegmentOriginalDataStruct\:\:setMap\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentOriginalDataStruct.php + - message: '#^Property Model\\Segments\\SegmentOriginalDataStruct\:\:\$decoded_map type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -12954,12 +15942,48 @@ parameters: count: 1 path: lib/Model/Segments/SegmentStruct.php + - + message: '#^Method Model\\Segments\\SegmentStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentStruct.php + + - + message: '#^Method Model\\Segments\\SegmentStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentStruct.php + + - + message: '#^Method Model\\Segments\\SegmentStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentStruct.php + - message: '#^Class Model\\Segments\\SegmentUIStruct implements generic interface ArrayAccess but does not specify its types\: TKey, TValue$#' identifier: missingType.generics count: 1 path: lib/Model/Segments/SegmentUIStruct.php + - + message: '#^Method Model\\Segments\\SegmentUIStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentUIStruct.php + + - + message: '#^Method Model\\Segments\\SegmentUIStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentUIStruct.php + + - + message: '#^Method Model\\Segments\\SegmentUIStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Segments/SegmentUIStruct.php + - message: '#^Property Model\\Segments\\SegmentUIStruct\:\:\$data_ref_map type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -13002,24 +16026,54 @@ parameters: count: 1 path: lib/Model/TMSService/TMSServiceDao.php + - + message: '#^Method Model\\TMSService\\TMSServiceDao\:\:getMTForTMXExport\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/TMSService/TMSServiceDao.php + - message: '#^Method Model\\TMSService\\TMSServiceDao\:\:getTMForTMXExport\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/TMSService/TMSServiceDao.php + - + message: '#^Method Model\\TMSService\\TMSServiceDao\:\:getTMForTMXExport\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/TMSService/TMSServiceDao.php + - message: '#^Method Model\\TMSService\\TMSServiceDao\:\:getTranslationsForTMXExport\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/TMSService/TMSServiceDao.php + - + message: '#^Method Model\\TMSService\\TMSServiceDao\:\:getTranslationsForTMXExport\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/TMSService/TMSServiceDao.php + - message: '#^Method Model\\Teams\\InvitedUser\:\:completeTeamSignUp\(\) has parameter \$invitation with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Teams/InvitedUser.php + - + message: '#^Method Model\\Teams\\InvitedUser\:\:completeTeamSignUp\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Teams/InvitedUser.php + + - + message: '#^Method Model\\Teams\\InvitedUser\:\:hasPendingInvitations\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/InvitedUser.php + - message: '#^Parameter \#1 \$struct of class Model\\Teams\\TeamModel constructor expects Model\\Teams\\TeamStruct, Model\\Teams\\TeamStruct\|null given\.$#' identifier: argument.type @@ -13044,6 +16098,12 @@ parameters: count: 1 path: lib/Model/Teams/MembershipDao.php + - + message: '#^Method Model\\Teams\\MembershipDao\:\:deleteUserFromTeam\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Teams/MembershipDao.php + - message: '#^Method Model\\Teams\\MembershipDao\:\:findById\(\) has no return type specified\.$#' identifier: missingType.return @@ -13056,6 +16116,12 @@ parameters: count: 1 path: lib/Model/Teams/MembershipDao.php + - + message: '#^Method Model\\Teams\\MembershipDao\:\:findById\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Teams/MembershipDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$members MembershipStruct\[\]\)\: Unexpected token "\$members", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -13134,18 +16200,54 @@ parameters: count: 1 path: lib/Model/Teams/PendingInvitations.php + - + message: '#^Method Model\\Teams\\TeamDao\:\:createPersonalTeam\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamDao.php + - message: '#^Method Model\\Teams\\TeamDao\:\:createUserTeam\(\) has parameter \$params with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Teams/TeamDao.php + - + message: '#^Method Model\\Teams\\TeamDao\:\:createUserTeam\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamDao.php + + - + message: '#^Method Model\\Teams\\TeamDao\:\:delete\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Teams/TeamDao.php + + - + message: '#^Method Model\\Teams\\TeamDao\:\:deleteTeam\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Teams/TeamDao.php + + - + message: '#^Method Model\\Teams\\TeamDao\:\:destroyCacheUserCreatedTeams\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamDao.php + - message: '#^Method Model\\Teams\\TeamDao\:\:findById\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Teams/TeamDao.php + - + message: '#^Method Model\\Teams\\TeamDao\:\:updateTeamName\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/Teams/TeamDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$res TeamStruct\)\: Unexpected token "\$res", expected type at offset 9 on line 1$#' identifier: phpDoc.parseError @@ -13194,18 +16296,60 @@ parameters: count: 1 path: lib/Model/Teams/TeamModel.php + - + message: '#^Method Model\\Teams\\TeamModel\:\:_checkAddMembersToPersonalTeam\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamModel.php + + - + message: '#^Method Model\\Teams\\TeamModel\:\:_checkPersonalUnique\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamModel.php + + - + message: '#^Method Model\\Teams\\TeamModel\:\:_checkType\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamModel.php + + - + message: '#^Method Model\\Teams\\TeamModel\:\:_createTeamWithMatecatUsers\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamModel.php + + - + message: '#^Method Model\\Teams\\TeamModel\:\:_createTeamWithMatecatUsers\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Teams/TeamModel.php + - message: '#^Method Model\\Teams\\TeamModel\:\:_getInvitedEmails\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Teams/TeamModel.php + - + message: '#^Method Model\\Teams\\TeamModel\:\:_getInvitedEmails\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamModel.php + - message: '#^Method Model\\Teams\\TeamModel\:\:_getRemovedMembersEmailList\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Teams/TeamModel.php + - + message: '#^Method Model\\Teams\\TeamModel\:\:_setPendingStatuses\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Teams/TeamModel.php + - message: '#^Method Model\\Teams\\TeamModel\:\:addMemberEmails\(\) has parameter \$emails with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -13446,6 +16590,12 @@ parameters: count: 1 path: lib/Model/TmKeyManagement/UserKeysModel.php + - + message: '#^Method Model\\TmKeyManagement\\UserKeysModel\:\:getKeys\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/TmKeyManagement/UserKeysModel.php + - message: '#^PHPDoc tag @var has invalid value \(\$_client_tm_key TmKeyStruct\)\: Unexpected token "\$_client_tm_key", expected type at offset 24 on line 2$#' identifier: phpDoc.parseError @@ -13488,6 +16638,18 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:addTranslation\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/Translations/SegmentTranslationDao.php + + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:findBySegmentAndJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getAllSegmentsByIdListAndJobId\(\) has parameter \$id_list with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -13500,6 +16662,24 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getAllSegmentsByIdListAndJobId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translations/SegmentTranslationDao.php + + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getByFile\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Translations/SegmentTranslationDao.php + + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getByJobId\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getLast10TranslatedSegmentIDsInLastHour\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -13512,6 +16692,12 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getMaxSegmentIdsFromJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getUnchangeableStatus\(\) has parameter \$segments_ids with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -13536,6 +16722,12 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:getWordsPerSecond\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:propagateTranslation\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -13548,12 +16740,24 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:rebuildFromReplaceEvents\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:setAnalysisValue\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:setAnalysisValue\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:updateFirstTimeOpenedContribution\(\) has parameter \$data with no type specified\.$#' identifier: missingType.parameter @@ -13572,6 +16776,12 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:updateLastTranslationDateByIdList\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:updateSuggestionsArray\(\) has parameter \$id_segment with no type specified\.$#' identifier: missingType.parameter @@ -13584,6 +16794,12 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationDao.php + - + message: '#^Method Model\\Translations\\SegmentTranslationDao\:\:updateSuggestionsArray\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Translations/SegmentTranslationDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$result SegmentTranslationStruct\[\]\)\: Unexpected token "\$result", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -13626,6 +16842,24 @@ parameters: count: 1 path: lib/Model/Translations/SegmentTranslationStruct.php + - + message: '#^Method Model\\Translations\\SegmentTranslationStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translations/SegmentTranslationStruct.php + + - + message: '#^Method Model\\Translations\\SegmentTranslationStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translations/SegmentTranslationStruct.php + + - + message: '#^Method Model\\Translations\\SegmentTranslationStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translations/SegmentTranslationStruct.php + - message: '#^PHPDoc tag @return with type array\\|null is not subtype of native type Model\\Jobs\\JobStruct\|null\.$#' identifier: return.phpDocType @@ -13644,6 +16878,12 @@ parameters: count: 1 path: lib/Model/Translations/WarningDao.php + - + message: '#^Method Model\\Translations\\WarningDao\:\:getErrorsByChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Translations/WarningDao.php + - message: '#^Method Model\\Translations\\WarningDao\:\:getWarningsByJobIdAndPassword\(\) has parameter \$jid with no type specified\.$#' identifier: missingType.parameter @@ -13662,6 +16902,12 @@ parameters: count: 1 path: lib/Model/Translations/WarningDao.php + - + message: '#^Method Model\\Translations\\WarningDao\:\:getWarningsByJobIdAndPassword\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translations/WarningDao.php + - message: '#^Method Model\\Translations\\WarningDao\:\:getWarningsByProjectIds\(\) has parameter \$projectIds with no type specified\.$#' identifier: missingType.parameter @@ -13674,6 +16920,12 @@ parameters: count: 1 path: lib/Model/Translations/WarningDao.php + - + message: '#^Method Model\\Translations\\WarningDao\:\:getWarningsByProjectIds\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translations/WarningDao.php + - message: '#^Property Model\\TranslationsSplit\\SegmentSplitStruct\:\:\$source_chunk_lengths type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -13698,6 +16950,12 @@ parameters: count: 1 path: lib/Model/TranslationsSplit/SplitDAO.php + - + message: '#^Method Model\\TranslationsSplit\\SplitDAO\:\:_validatePrimaryKey\(\) has Exception in PHPDoc @throws tag but it''s not thrown\.$#' + identifier: throws.unusedType + count: 1 + path: lib/Model/TranslationsSplit/SplitDAO.php + - message: '#^Property Model\\TranslationsSplit\\SegmentSplitStruct\:\:\$source_chunk_lengths \(array\|string\) does not accept string\|false\|null\.$#' identifier: assign.propertyType @@ -13740,6 +16998,12 @@ parameters: count: 1 path: lib/Model/Translators/TranslatorsModel.php + - + message: '#^Method Model\\Translators\\TranslatorsModel\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Translators/TranslatorsModel.php + - message: '#^Method Model\\Translators\\TranslatorsModel\:\:getTranslator\(\) has no return type specified\.$#' identifier: missingType.return @@ -13752,6 +17016,24 @@ parameters: count: 1 path: lib/Model/Translators/TranslatorsModel.php + - + message: '#^Method Model\\Translators\\TranslatorsModel\:\:saveProfile\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Translators/TranslatorsModel.php + + - + message: '#^Method Model\\Translators\\TranslatorsModel\:\:setDeliveryDate\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Translators/TranslatorsModel.php + + - + message: '#^Method Model\\Translators\\TranslatorsModel\:\:update\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/Translators/TranslatorsModel.php + - message: '#^PHPDoc tag @param for parameter \$job_password with type mixed is not subtype of native type string\.$#' identifier: parameter.phpDocType @@ -13878,6 +17160,12 @@ parameters: count: 1 path: lib/Model/Users/Authentication/OAuthSignInModel.php + - + message: '#^Method Model\\Users\\Authentication\\OAuthSignInModel\:\:_createNewUser\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Users/Authentication/OAuthSignInModel.php + - message: '#^Parameter \#1 \$email of method Model\\Users\\UserDao\:\:getByEmail\(\) expects string, string\|null given\.$#' identifier: argument.type @@ -13908,6 +17196,12 @@ parameters: count: 1 path: lib/Model/Users/Authentication/PasswordResetModel.php + - + message: '#^Method Model\\Users\\Authentication\\PasswordResetModel\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Users/Authentication/PasswordResetModel.php + - message: '#^Parameter \#1 \$datetime of function strtotime expects string, string\|null given\.$#' identifier: argument.type @@ -13938,6 +17232,12 @@ parameters: count: 1 path: lib/Model/Users/Authentication/SignupModel.php + - + message: '#^Method Model\\Users\\Authentication\\SignupModel\:\:processSignup\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Users/Authentication/SignupModel.php + - message: '#^Parameter \#1 \$datetime of function strtotime expects string, string\|null given\.$#' identifier: argument.type @@ -13998,6 +17298,12 @@ parameters: count: 1 path: lib/Model/Users/MetadataDao.php + - + message: '#^Method Model\\Users\\MetadataDao\:\:delete\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Users/MetadataDao.php + - message: '#^Method Model\\Users\\MetadataDao\:\:destroyCacheKey\(\) has parameter \$key with no type specified\.$#' identifier: missingType.parameter @@ -14034,6 +17340,12 @@ parameters: count: 1 path: lib/Model/Users/MetadataDao.php + - + message: '#^Method Model\\Users\\MetadataDao\:\:getAllByUid\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Users/MetadataDao.php + - message: '#^Method Model\\Users\\MetadataDao\:\:getAllByUidList\(\) has parameter \$UIDs with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -14052,6 +17364,12 @@ parameters: count: 1 path: lib/Model/Users/MetadataDao.php + - + message: '#^Method Model\\Users\\MetadataDao\:\:set\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Users/MetadataDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$result MetadataStruct\)\: Unexpected token "\$result", expected type at offset 9 on line 1$#' identifier: phpDoc.parseError @@ -14124,6 +17442,12 @@ parameters: count: 1 path: lib/Model/Users/RedeemableProject.php + - + message: '#^Method Model\\Users\\RedeemableProject\:\:tryToRedeem\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Users/RedeemableProject.php + - message: '#^Parameter \#1 \$project of method Model\\Jobs\\JobDao\:\:updateOwner\(\) expects Model\\Projects\\ProjectStruct, Model\\Projects\\ProjectStruct\|null given\.$#' identifier: argument.type @@ -14154,12 +17478,30 @@ parameters: count: 1 path: lib/Model/Users/UserDao.php + - + message: '#^Method Model\\Users\\UserDao\:\:createUser\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Users/UserDao.php + + - + message: '#^Method Model\\Users\\UserDao\:\:delete\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Users/UserDao.php + - message: '#^Method Model\\Users\\UserDao\:\:destroyCacheByEmail\(\) has parameter \$email with no type specified\.$#' identifier: missingType.parameter count: 1 path: lib/Model/Users/UserDao.php + - + message: '#^Method Model\\Users\\UserDao\:\:destroyCacheByEmail\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Users/UserDao.php + - message: '#^Method Model\\Users\\UserDao\:\:destroyCacheByUid\(\) has parameter \$uid with no type specified\.$#' identifier: missingType.parameter @@ -14172,6 +17514,18 @@ parameters: count: 1 path: lib/Model/Users/UserDao.php + - + message: '#^Method Model\\Users\\UserDao\:\:getByConfirmationToken\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Users/UserDao.php + + - + message: '#^Method Model\\Users\\UserDao\:\:getByEmails\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Users/UserDao.php + - message: '#^Method Model\\Users\\UserDao\:\:getByUid\(\) has parameter \$id with no type specified\.$#' identifier: missingType.parameter @@ -14184,12 +17538,24 @@ parameters: count: 1 path: lib/Model/Users/UserDao.php + - + message: '#^Method Model\\Users\\UserDao\:\:getProjectOwner\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Users/UserDao.php + - message: '#^Method Model\\Users\\UserDao\:\:updateUser\(\) should return Model\\Users\\UserStruct but returns Model\\Users\\UserStruct\|null\.$#' identifier: return.type count: 1 path: lib/Model/Users/UserDao.php + - + message: '#^Method Model\\Users\\UserDao\:\:updateUser\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Users/UserDao.php + - message: '#^PHPDoc tag @var has invalid value \(\$__resultSet UserStruct\[\]\)\: Unexpected token "\$__resultSet", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -14280,6 +17646,24 @@ parameters: count: 1 path: lib/Model/Warnings/GlobalWarningStruct.php + - + message: '#^Method Model\\Warnings\\GlobalWarningStruct\:\:offsetGet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Warnings/GlobalWarningStruct.php + + - + message: '#^Method Model\\Warnings\\GlobalWarningStruct\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Warnings/GlobalWarningStruct.php + + - + message: '#^Method Model\\Warnings\\GlobalWarningStruct\:\:offsetUnset\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Warnings/GlobalWarningStruct.php + - message: '#^Cannot call method getApproved2RawWords\(\) on Model\\WordCount\\WordCountStruct\|null\.$#' identifier: method.nonObject @@ -14370,6 +17754,18 @@ parameters: count: 1 path: lib/Model/WordCount/CounterModel.php + - + message: '#^Method Model\\WordCount\\CounterModel\:\:_verifyStatus\(\) throws checked exception BadMethodCallException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/WordCount/CounterModel.php + + - + message: '#^Method Model\\WordCount\\CounterModel\:\:getUpdatedValues\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/WordCount/CounterModel.php + - message: '#^Method Model\\WordCount\\CounterModel\:\:methodNameForStatusCall\(\) has parameter \$name with no type specified\.$#' identifier: missingType.parameter @@ -14388,6 +17784,12 @@ parameters: count: 1 path: lib/Model/WordCount/WordCountStruct.php + - + message: '#^Method Model\\WordCount\\WordCountStruct\:\:loadFromJob\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/WordCount/WordCountStruct.php + - message: '#^Method Model\\WordCount\\WordCountStruct\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -14406,12 +17808,24 @@ parameters: count: 1 path: lib/Model/WordCount/WordCounterDao.php + - + message: '#^Method Model\\WordCount\\WordCounterDao\:\:getStatsForJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 5 + path: lib/Model/WordCount/WordCounterDao.php + - message: '#^Method Model\\WordCount\\WordCounterDao\:\:initializeWordCount\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: lib/Model/WordCount/WordCounterDao.php + - + message: '#^Method Model\\WordCount\\WordCounterDao\:\:updateWordCount\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/WordCount/WordCounterDao.php + - message: '#^Cannot assign new offset to string\.$#' identifier: offsetAssign.dimType @@ -14460,12 +17874,36 @@ parameters: count: 1 path: lib/Model/Xliff/DTO/AbstractXliffRule.php + - + message: '#^Method Model\\Xliff\\DTO\\AbstractXliffRule\:\:setAnalysis\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/DTO/AbstractXliffRule.php + + - + message: '#^Method Model\\Xliff\\DTO\\AbstractXliffRule\:\:setEditor\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Xliff/DTO/AbstractXliffRule.php + + - + message: '#^Method Model\\Xliff\\DTO\\AbstractXliffRule\:\:setMatchCategory\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Model/Xliff/DTO/AbstractXliffRule.php + - message: '#^Method Model\\Xliff\\DTO\\AbstractXliffRule\:\:setStates\(\) has parameter \$states with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Model/Xliff/DTO/AbstractXliffRule.php + - + message: '#^Method Model\\Xliff\\DTO\\AbstractXliffRule\:\:setStates\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/DTO/AbstractXliffRule.php + - message: '#^Parameter \#1 \.\.\.\$arrays of function array_merge expects array, string given\.$#' identifier: argument.type @@ -14502,6 +17940,18 @@ parameters: count: 1 path: lib/Model/Xliff/DTO/AbstractXliffRule.php + - + message: '#^Method Model\\Xliff\\DTO\\DefaultRule\:\:isTranslated\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Model/Xliff/DTO/DefaultRule.php + + - + message: '#^Method Model\\Xliff\\DTO\\DefaultRule\:\:setAnalysis\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/DTO/DefaultRule.php + - message: '#^Property Model\\Xliff\\DTO\\DefaultRule\:\:\$_STATES type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -14556,6 +18006,12 @@ parameters: count: 1 path: lib/Model/Xliff/DTO/XliffRulesModel.php + - + message: '#^Method Model\\Xliff\\DTO\\XliffRulesModel\:\:getRulesForVersion\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/DTO/XliffRulesModel.php + - message: '#^Method Model\\Xliff\\DTO\\XliffRulesModel\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -14580,6 +18036,24 @@ parameters: count: 1 path: lib/Model/Xliff/DTO/XliffRulesModel.php + - + message: '#^Method Model\\Xliff\\XliffConfigTemplateDao\:\:destroyQueryByIdAndUidCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/XliffConfigTemplateDao.php + + - + message: '#^Method Model\\Xliff\\XliffConfigTemplateDao\:\:destroyQueryByIdCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/XliffConfigTemplateDao.php + + - + message: '#^Method Model\\Xliff\\XliffConfigTemplateDao\:\:destroyQueryByUidCache\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/XliffConfigTemplateDao.php + - message: '#^Method Model\\Xliff\\XliffConfigTemplateDao\:\:getAllPaginated\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -14604,6 +18078,24 @@ parameters: count: 1 path: lib/Model/Xliff/XliffConfigTemplateDao.php + - + message: '#^Method Model\\Xliff\\XliffConfigTemplateDao\:\:hydrateTemplateStruct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/Xliff/XliffConfigTemplateDao.php + + - + message: '#^Method Model\\Xliff\\XliffConfigTemplateDao\:\:remove\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Model/Xliff/XliffConfigTemplateDao.php + + - + message: '#^Method Model\\Xliff\\XliffConfigTemplateDao\:\:save\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Model/Xliff/XliffConfigTemplateDao.php + - message: '#^Property Model\\Xliff\\XliffConfigTemplateStruct\:\:\$id \(int\) does not accept string\|false\.$#' identifier: assign.propertyType @@ -14622,6 +18114,12 @@ parameters: count: 1 path: lib/Model/Xliff/XliffConfigTemplateDao.php + - + message: '#^Method Model\\Xliff\\XliffConfigTemplateStruct\:\:hydrateFromJSON\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Model/Xliff/XliffConfigTemplateStruct.php + - message: '#^Method Model\\Xliff\\XliffConfigTemplateStruct\:\:hydrateRulesFromDataArray\(\) has parameter \$rules with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -14664,6 +18162,12 @@ parameters: count: 1 path: lib/Plugins/Features/AbstractRevisionFeature.php + - + message: '#^Method Plugins\\Features\\AbstractRevisionFeature\:\:alter_chunk_review_struct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Plugins/Features/AbstractRevisionFeature.php + - message: '#^Method Plugins\\Features\\AbstractRevisionFeature\:\:createQaChunkReviewRecords\(\) has parameter \$options with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -14706,6 +18210,12 @@ parameters: count: 1 path: lib/Plugins/Features/AbstractRevisionFeature.php + - + message: '#^Method Plugins\\Features\\AbstractRevisionFeature\:\:postProjectCreate\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/AbstractRevisionFeature.php + - message: '#^Method Plugins\\Features\\AbstractRevisionFeature\:\:project_completion_event_saved\(\) has parameter \$completion_event_id with no type specified\.$#' identifier: missingType.parameter @@ -14892,6 +18402,12 @@ parameters: count: 1 path: lib/Plugins/Features/ProjectCompletion.php + - + message: '#^Method Plugins\\Features\\ProjectCompletion\:\:postAddSegmentTranslation\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Plugins/Features/ProjectCompletion.php + - message: '#^Parameter \#1 \$id_job of method Model\\ChunksCompletion\\ChunkCompletionEventDao\:\:updatePassword\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -14964,6 +18480,12 @@ parameters: count: 1 path: lib/Plugins/Features/ProjectCompletion/Decorator/CatDecorator.php + - + message: '#^Method Plugins\\Features\\ProjectCompletion\\Model\\EventModel\:\:save\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/ProjectCompletion/Model/EventModel.php + - message: '#^Parameter \#1 \$project of method Model\\FeaturesBase\\FeatureSet\:\:loadForProject\(\) expects Model\\Projects\\ProjectStruct, Model\\Projects\\ProjectStruct\|null given\.$#' identifier: argument.type @@ -14988,6 +18510,12 @@ parameters: count: 1 path: lib/Plugins/Features/ProjectCompletion/Model/ProjectCompletionStatusModel.php + - + message: '#^Method Plugins\\Features\\ProjectCompletion\\Model\\ProjectCompletionStatusModel\:\:getStatus\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/ProjectCompletion/Model/ProjectCompletionStatusModel.php + - message: '#^Method Plugins\\Features\\ProjectCompletion\\Model\\ProjectCompletionStatusModel\:\:populateStatus\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15012,12 +18540,24 @@ parameters: count: 1 path: lib/Plugins/Features/ReviewExtended/BatchReviewProcessor.php + - + message: '#^Method Plugins\\Features\\ReviewExtended\\BatchReviewProcessor\:\:getOrCreateChunkReviews\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Plugins/Features/ReviewExtended/BatchReviewProcessor.php + - message: '#^Method Plugins\\Features\\ReviewExtended\\BatchReviewProcessor\:\:setPreparedEvents\(\) has parameter \$prepared_events with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Plugins/Features/ReviewExtended/BatchReviewProcessor.php + - + message: '#^Method Plugins\\Features\\ReviewExtended\\BatchReviewProcessor\:\:updateJobWordCounter\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Plugins/Features/ReviewExtended/BatchReviewProcessor.php + - message: '#^PHPDoc tag @var for property Plugins\\Features\\ReviewExtended\\BatchReviewProcessor\:\:\$chunk with type mixed is not subtype of native type Model\\Jobs\\JobStruct\.$#' identifier: property.phpDocType @@ -15078,6 +18618,12 @@ parameters: count: 1 path: lib/Plugins/Features/ReviewExtended/ChunkReviewModel.php + - + message: '#^Method Plugins\\Features\\ReviewExtended\\ChunkReviewModel\:\:recountAndUpdatePassFailResult\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/ReviewExtended/ChunkReviewModel.php + - message: '#^Parameter \#1 \$chunkReviewID of method Model\\LQA\\ChunkReviewDao\:\:passFailCountsAtomicUpdate\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -15186,6 +18732,12 @@ parameters: count: 1 path: lib/Plugins/Features/ReviewExtended/ReviewUtils.php + - + message: '#^Method Plugins\\Features\\ReviewExtended\\ReviewUtils\:\:validRevisionNumbers\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/ReviewExtended/ReviewUtils.php + - message: '#^Unreachable statement \- code above always terminates\.$#' identifier: deadCode.unreachable @@ -15336,6 +18888,18 @@ parameters: count: 1 path: lib/Plugins/Features/ReviewExtended/TranslationIssueModel.php + - + message: '#^Method Plugins\\Features\\ReviewExtended\\TranslationIssueModel\:\:__construct\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/ReviewExtended/TranslationIssueModel.php + + - + message: '#^Method Plugins\\Features\\ReviewExtended\\TranslationIssueModel\:\:saveDiff\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Plugins/Features/ReviewExtended/TranslationIssueModel.php + - message: '#^Method Plugins\\Features\\ReviewExtended\\TranslationIssueModel\:\:setDiff\(\) has parameter \$diff with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15450,12 +19014,30 @@ parameters: count: 1 path: lib/Plugins/Features/SegmentFilter/Model/SegmentFilterDao.php + - + message: '#^Method Plugins\\Features\\SegmentFilter\\Model\\SegmentFilterDao\:\:__getLimit\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Plugins/Features/SegmentFilter/Model/SegmentFilterDao.php + - message: '#^Method Plugins\\Features\\SegmentFilter\\Model\\SegmentFilterDao\:\:_buildResult\(\) has parameter \$array_result with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Plugins/Features/SegmentFilter/Model/SegmentFilterDao.php + - + message: '#^Method Plugins\\Features\\SegmentFilter\\Model\\SegmentFilterDao\:\:getSqlForRegularIntervals\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/SegmentFilter/Model/SegmentFilterDao.php + + - + message: '#^Method Plugins\\Features\\TranslationEvents\\Model\\TranslationEvent\:\:__construct\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/TranslationEvents/Model/TranslationEvent.php + - message: '#^Parameter \#1 \$id_job of method Model\\Segments\\SegmentDao\:\:getByChunkIdAndSegmentId\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -15486,6 +19068,12 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + - + message: '#^Method Plugins\\Features\\TranslationEvents\\Model\\TranslationEventDao\:\:getAllFinalRevisionsForSegment\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + - message: '#^Method Plugins\\Features\\TranslationEvents\\Model\\TranslationEventDao\:\:getLatestEventForSegment\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -15498,6 +19086,18 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + - + message: '#^Method Plugins\\Features\\TranslationEvents\\Model\\TranslationEventDao\:\:getLatestEventForSegment\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + + - + message: '#^Method Plugins\\Features\\TranslationEvents\\Model\\TranslationEventDao\:\:getLatestEventsInSegmentInterval\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + - message: '#^Method Plugins\\Features\\TranslationEvents\\Model\\TranslationEventDao\:\:getTteForSegments\(\) has parameter \$id_segment_list with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15516,6 +19116,12 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + - + message: '#^Method Plugins\\Features\\TranslationEvents\\Model\\TranslationEventDao\:\:unsetFinalRevisionFlag\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + - message: '#^Property Plugins\\Features\\TranslationEvents\\Model\\TranslationEventDao\:\:\$auto_increment_field type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15534,6 +19140,18 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationEvents/TranslationEventsHandler.php + - + message: '#^Method Plugins\\Features\\TranslationEvents\\TranslationEventsHandler\:\:prepareEventStruct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Plugins/Features/TranslationEvents/TranslationEventsHandler.php + + - + message: '#^Method Plugins\\Features\\TranslationEvents\\TranslationEventsHandler\:\:saveEvent\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Plugins/Features/TranslationEvents/TranslationEventsHandler.php + - message: '#^Property Plugins\\Features\\TranslationEvents\\Model\\TranslationEventStruct\:\:\$final_revision \(int\) does not accept bool\.$#' identifier: assign.propertyType @@ -15570,12 +19188,24 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationVersions/Handlers/DummyTranslationVersionHandler.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Handlers\\TranslationVersionsHandler\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Plugins/Features/TranslationVersions/Handlers/TranslationVersionsHandler.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Handlers\\TranslationVersionsHandler\:\:propagateTranslation\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Plugins/Features/TranslationVersions/Handlers/TranslationVersionsHandler.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Handlers\\TranslationVersionsHandler\:\:saveVersion\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Plugins/Features/TranslationVersions/Handlers/TranslationVersionsHandler.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Handlers\\TranslationVersionsHandler\:\:storeTranslationEvent\(\) has parameter \$params with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15624,6 +19254,12 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getAllRelevantEvents\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getLastRevisionsBySegmentsAndSourcePage\(\) has parameter \$job_id with no type specified\.$#' identifier: missingType.parameter @@ -15642,18 +19278,42 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getLastRevisionsBySegmentsAndSourcePage\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionNumberForTranslation\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForChunk\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForChunk\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForJob\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForJob\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForRevision\(\) has parameter \$id_job with no type specified\.$#' identifier: missingType.parameter @@ -15666,6 +19326,24 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForRevision\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForRevision\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:getVersionsForTranslation\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:insertVersionRecords\(\) has no return type specified\.$#' identifier: missingType.return @@ -15678,18 +19356,42 @@ parameters: count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:insertVersionRecords\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:insertVersionRecords\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:saveVersion\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:saveVersion\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:updateVersion\(\) has no return type specified\.$#' identifier: missingType.return count: 1 path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - + message: '#^Method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:updateVersion\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + - message: '#^Parameter \$segmentsToUpdate of method Plugins\\Features\\TranslationVersions\\Model\\TranslationVersionDao\:\:savePropagationVersions\(\) has invalid type Plugins\\Features\\TranslationVersions\\Model\\Propagation_PropagationTotalStruct\.$#' identifier: class.notFound @@ -15846,6 +19548,18 @@ parameters: count: 1 path: lib/Utils/ActiveMQ/AMQHandler.php + - + message: '#^Method Utils\\ActiveMQ\\AMQHandler\:\:getNewInstanceForDaemons\(\) throws checked exception Stomp\\Exception\\ConnectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/ActiveMQ/AMQHandler.php + + - + message: '#^Method Utils\\ActiveMQ\\AMQHandler\:\:getRedisClient\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/ActiveMQ/AMQHandler.php + - message: '#^Method Utils\\ActiveMQ\\AMQHandler\:\:subscribe\(\) has parameter \$header with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15882,6 +19596,18 @@ parameters: count: 1 path: lib/Utils/ActiveMQ/ClientHelpers/ProjectQueue.php + - + message: '#^Method Utils\\ActiveMQ\\ClientHelpers\\ProjectQueue\:\:getPublishedResults\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/ActiveMQ/ClientHelpers/ProjectQueue.php + + - + message: '#^Method Utils\\ActiveMQ\\ClientHelpers\\ProjectQueue\:\:publishResults\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/ActiveMQ/ClientHelpers/ProjectQueue.php + - message: '#^Method Utils\\ActiveMQ\\WorkerClient\:\:enqueue\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15906,6 +19632,12 @@ parameters: count: 1 path: lib/Utils/ActiveMQ/WorkerClient.php + - + message: '#^Method Utils\\ActiveMQ\\WorkerClient\:\:enqueueWithClient\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/ActiveMQ/WorkerClient.php + - message: '#^Property Utils\\ActiveMQ\\WorkerClient\:\:\$_QUEUES type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -15942,6 +19674,12 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/AIAssistantWorker.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\AIAssistantWorker\:\:alternative_translations\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/AIAssistantWorker.php + - message: '#^Method Utils\\AsyncTasks\\Workers\\AIAssistantWorker\:\:emitErrorMessage\(\) has parameter \$payload with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -16122,6 +19860,12 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:_getLockProjectForVolumeAnalysis\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php + - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:_getSegmentsForFastVolumeAnalysis\(\) has parameter \$pid with no type specified\.$#' identifier: missingType.parameter @@ -16194,12 +19938,24 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:getProjectSegmentsTranslationSummary\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php + - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:main\(\) has parameter \$args with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:main\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php + - message: '#^PHPDoc tag @var has invalid value \(\$myMemory MyMemory\)\: Unexpected token "\$myMemory", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError @@ -16368,6 +20124,12 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/TMAnalysisWorker.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\TMAnalysisWorker\:\:_endQueueCallback\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/Analysis/TMAnalysisWorker.php + - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\TMAnalysisWorker\:\:_getMT\(\) has parameter \$_config with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -16470,6 +20232,12 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/TMAnalysisWorker.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\TMAnalysisWorker\:\:_tryToCloseProject\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/Analysis/TMAnalysisWorker.php + - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\TMAnalysisWorker\:\:getProjectSegmentsTranslationSummary\(\) has parameter \$pid with no type specified\.$#' identifier: missingType.parameter @@ -16482,6 +20250,12 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/TMAnalysisWorker.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\TMAnalysisWorker\:\:getProjectSegmentsTranslationSummary\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/Analysis/TMAnalysisWorker.php + - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\TMAnalysisWorker\:\:initPostProcess\(\) has parameter \$source_lang with no type specified\.$#' identifier: missingType.parameter @@ -17028,6 +20802,18 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/GlossaryWorker.php + - + message: '#^Method Utils\\AsyncTasks\\Workers\\JobsWorker\:\:_recountAvgPee\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/JobsWorker.php + + - + message: '#^Method Utils\\AsyncTasks\\Workers\\JobsWorker\:\:process\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/AsyncTasks/Workers/JobsWorker.php + - message: '#^Parameter \#1 \$queueElement of method Utils\\AsyncTasks\\Workers\\JobsWorker\:\:_checkForReQueueEnd\(\) expects Utils\\TaskRunner\\Commons\\QueueElement, Utils\\TaskRunner\\Commons\\AbstractElement given\.$#' identifier: argument.type @@ -17544,6 +21330,12 @@ parameters: count: 1 path: lib/Utils/Currency/ChangeRatesFetcher.php + - + message: '#^Method Utils\\Currency\\TranslatedChangeRatesFetcher\:\:fetchChangeRates\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Currency/TranslatedChangeRatesFetcher.php + - message: '#^Parameter \#1 \$json of function json_decode expects string, bool\|string given\.$#' identifier: argument.type @@ -17760,6 +21552,12 @@ parameters: count: 1 path: lib/Utils/Email/ProjectAssignedEmail.php + - + message: '#^Method Utils\\Email\\ProjectAssignedEmail\:\:_getTemplateVariables\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Email/ProjectAssignedEmail.php + - message: '#^Parameter \#1 \$id_job of method Model\\WordCount\\WordCountStruct\:\:setIdJob\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -17880,6 +21678,12 @@ parameters: count: 1 path: lib/Utils/Email/WelcomeEmail.php + - + message: '#^Method Utils\\Email\\WelcomeEmail\:\:send\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Email/WelcomeEmail.php + - message: '#^Parameter \#2 \$subject of method Utils\\Email\\AbstractEmail\:\:doSend\(\) expects string, string\|null given\.$#' identifier: argument.type @@ -17910,6 +21714,18 @@ parameters: count: 1 path: lib/Utils/Engines/AbstractEngine.php + - + message: '#^Method Utils\\Engines\\AbstractEngine\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/AbstractEngine.php + + - + message: '#^Method Utils\\Engines\\AbstractEngine\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/AbstractEngine.php + - message: '#^Method Utils\\Engines\\AbstractEngine\:\:__get\(\) has parameter \$key with no type specified\.$#' identifier: missingType.parameter @@ -17928,6 +21744,12 @@ parameters: count: 1 path: lib/Utils/Engines/AbstractEngine.php + - + message: '#^Method Utils\\Engines\\AbstractEngine\:\:__set\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/Engines/AbstractEngine.php + - message: '#^Method Utils\\Engines\\AbstractEngine\:\:_call\(\) has parameter \$curl_options with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -17970,6 +21792,12 @@ parameters: count: 1 path: lib/Utils/Engines/AbstractEngine.php + - + message: '#^Method Utils\\Engines\\AbstractEngine\:\:deleteMemory\(\) has Exception in PHPDoc @throws tag but it''s not thrown\.$#' + identifier: throws.unusedType + count: 1 + path: lib/Utils/Engines/AbstractEngine.php + - message: '#^Method Utils\\Engines\\AbstractEngine\:\:deleteMemory\(\) has parameter \$memoryKey with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18012,6 +21840,12 @@ parameters: count: 1 path: lib/Utils/Engines/AbstractEngine.php + - + message: '#^Method Utils\\Engines\\AbstractEngine\:\:memoryExists\(\) has Exception in PHPDoc @throws tag but it''s not thrown\.$#' + identifier: throws.unusedType + count: 1 + path: lib/Utils/Engines/AbstractEngine.php + - message: '#^Method Utils\\Engines\\AbstractEngine\:\:memoryExists\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18234,6 +22068,12 @@ parameters: count: 1 path: lib/Utils/Engines/DeepL.php + - + message: '#^Method Utils\\Engines\\DeepL\:\:_getClient\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL.php + - message: '#^Method Utils\\Engines\\DeepL\:\:createGlossary\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18246,6 +22086,12 @@ parameters: count: 1 path: lib/Utils/Engines/DeepL.php + - + message: '#^Method Utils\\Engines\\DeepL\:\:delete\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL.php + - message: '#^Method Utils\\Engines\\DeepL\:\:deleteGlossary\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18282,6 +22128,18 @@ parameters: count: 1 path: lib/Utils/Engines/DeepL.php + - + message: '#^Method Utils\\Engines\\DeepL\:\:set\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL.php + + - + message: '#^Method Utils\\Engines\\DeepL\:\:update\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL.php + - message: '#^Using nullsafe property access "\?\-\>value" on left side of \?\? is unnecessary\. Use \-\> instead\.$#' identifier: nullsafe.neverNull @@ -18300,6 +22158,12 @@ parameters: count: 1 path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - + message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:allGlossaries\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:createGlossary\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18312,24 +22176,48 @@ parameters: count: 1 path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - + message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:createGlossary\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:deleteGlossary\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - + message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:deleteGlossary\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:getGlossary\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - + message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:getGlossary\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:getGlossaryEntries\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - + message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:getGlossaryEntries\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:parse\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18354,6 +22242,12 @@ parameters: count: 1 path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - + message: '#^Method Utils\\Engines\\DeepL\\DeepLApiClient\:\:translate\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/DeepL/DeepLApiClient.php + - message: '#^Parameter \#1 \$body of method Utils\\Engines\\DeepL\\DeepLApiClient\:\:parse\(\) expects string, bool\|string\|null given\.$#' identifier: argument.type @@ -18588,6 +22482,12 @@ parameters: count: 1 path: lib/Utils/Engines/Intento.php + - + message: '#^Method Utils\\Engines\\Intento\:\:getProviderList\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Intento.php + - message: '#^Method Utils\\Engines\\Intento\:\:getRoutingList\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18792,6 +22692,12 @@ parameters: count: 1 path: lib/Utils/Engines/Lara.php + - + message: '#^Method Utils\\Engines\\Lara\:\:getMemoryIfMine\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Lara.php + - message: '#^Method Utils\\Engines\\Lara\:\:memoryExists\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -18834,6 +22740,12 @@ parameters: count: 1 path: lib/Utils/Engines/Lara.php + - + message: '#^Method Utils\\Engines\\Lara\:\:validateLaraStyle\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Lara.php + - message: '#^Parameter \#1 \$body of class Stomp\\Transport\\Message constructor expects string, string\|false given\.$#' identifier: argument.type @@ -19032,6 +22944,12 @@ parameters: count: 1 path: lib/Utils/Engines/MMT.php + - + message: '#^Method Utils\\Engines\\MMT\:\:delete\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/MMT.php + - message: '#^Method Utils\\Engines\\MMT\:\:deleteMemory\(\) has parameter \$memoryKey with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -19116,6 +23034,12 @@ parameters: count: 1 path: lib/Utils/Engines/MMT.php + - + message: '#^Method Utils\\Engines\\MMT\:\:getMemoryIfMine\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/MMT.php + - message: '#^Method Utils\\Engines\\MMT\:\:importGlossary\(\) has parameter \$data with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -19818,6 +23742,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/ErrorResponse.php + - + message: '#^Method Utils\\Engines\\Results\\ErrorResponse\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/Engines/Results/ErrorResponse.php + - message: '#^Method Utils\\Engines\\Results\\ErrorResponse\:\:get_as_array\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -19830,6 +23760,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MTResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MTResponse\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/Engines/Results/MTResponse.php + - message: '#^Method Utils\\Engines\\Results\\MTResponse\:\:get_as_array\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -19842,6 +23778,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/AnalyzeResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\AnalyzeResponse\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/AnalyzeResponse.php + - message: '#^Method Utils\\Engines\\Results\\MyMemory\\AuthKeyResponse\:\:__construct\(\) has parameter \$response with no type specified\.$#' identifier: missingType.parameter @@ -19854,6 +23796,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/CheckGlossaryResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\CheckGlossaryResponse\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/CheckGlossaryResponse.php + - message: '#^Property Utils\\Engines\\Results\\MyMemory\\CheckGlossaryResponse\:\:\$matches has no type specified\.$#' identifier: missingType.property @@ -19866,6 +23814,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/CreateUserResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\CreateUserResponse\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/CreateUserResponse.php + - message: '#^Property Utils\\Engines\\Results\\MyMemory\\CreateUserResponse\:\:\$id has no type specified\.$#' identifier: missingType.property @@ -19890,6 +23844,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/DomainsResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\DomainsResponse\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/DomainsResponse.php + - message: '#^Property Utils\\Engines\\Results\\MyMemory\\DomainsResponse\:\:\$entries has no type specified\.$#' identifier: missingType.property @@ -19902,6 +23862,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/ExportResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\ExportResponse\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/ExportResponse.php + - message: '#^Property Utils\\Engines\\Results\\MyMemory\\ExportResponse\:\:\$id has no type specified\.$#' identifier: missingType.property @@ -19920,6 +23886,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/FileImportAndStatusResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\FileImportAndStatusResponse\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/FileImportAndStatusResponse.php + - message: '#^Property Utils\\Engines\\Results\\MyMemory\\FileImportAndStatusResponse\:\:\$id has no type specified\.$#' identifier: missingType.property @@ -19944,6 +23916,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/GetMemoryResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\GetMemoryResponse\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/Engines/Results/MyMemory/GetMemoryResponse.php + - message: '#^Method Utils\\Engines\\Results\\MyMemory\\GetMemoryResponse\:\:buildMyMemoryMatch\(\) has parameter \$match with no type specified\.$#' identifier: missingType.parameter @@ -19974,6 +23952,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/KeysGlossaryResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\KeysGlossaryResponse\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/KeysGlossaryResponse.php + - message: '#^Property Utils\\Engines\\Results\\MyMemory\\KeysGlossaryResponse\:\:\$entries has no type specified\.$#' identifier: missingType.property @@ -20250,6 +24234,12 @@ parameters: count: 1 path: lib/Utils/Engines/Results/MyMemory/SetContributionResponse.php + - + message: '#^Method Utils\\Engines\\Results\\MyMemory\\SetContributionResponse\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Engines/Results/MyMemory/SetContributionResponse.php + - message: '#^Call to an undefined method Matecat\\SubFiltering\\AbstractFilter\:\:fromLayer1ToLayer2\(\)\.$#' identifier: method.notFound @@ -20550,6 +24540,12 @@ parameters: count: 1 path: lib/Utils/Engines/Validators/GoogleTranslateEngineValidator.php + - + message: '#^Method Utils\\Engines\\Validators\\IntentoEngineOptionsValidator\:\:validate\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Utils/Engines/Validators/IntentoEngineOptionsValidator.php + - message: '#^Access to an undefined property Utils\\Engines\\Validators\\Contracts\\EngineValidatorObject\:\:\$engineStruct\.$#' identifier: property.notFound @@ -20652,6 +24648,12 @@ parameters: count: 1 path: lib/Utils/Engines/YandexTranslate.php + - + message: '#^Method Utils\\Files\\CSV\:\:extract\(\) throws checked exception PhpOffice\\PhpSpreadsheet\\Writer\\Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Files/CSV.php + - message: '#^Method Utils\\Files\\CSV\:\:headers\(\) has parameter \$filepath with no type specified\.$#' identifier: missingType.parameter @@ -20856,6 +24858,12 @@ parameters: count: 1 path: lib/Utils/LQA/QA.php + - + message: '#^Method Utils\\LQA\\QA\:\:prepareDOMStructures\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/LQA/QA.php + - message: '#^Parameter \#2 \$subject of function preg_match expects string, string\|false given\.$#' identifier: argument.type @@ -21072,6 +25080,12 @@ parameters: count: 1 path: lib/Utils/LQA/QA/ErrObject.php + - + message: '#^Method Utils\\LQA\\QA\\ErrObject\:\:get\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 4 + path: lib/Utils/LQA/QA/ErrObject.php + - message: '#^Method Utils\\LQA\\QA\\ErrorManager\:\:JSONtoExceptionList\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -21354,6 +25368,12 @@ parameters: count: 11 path: lib/Utils/LQA/SizeRestriction/SizeRestriction.php + - + message: '#^Method Utils\\Logger\\Handlers\\CloudWatchHandlerProvider\:\:getClient\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/Handlers/CloudWatchHandlerProvider.php + - message: '#^Method Utils\\Logger\\Handlers\\CloudWatchHandlerProvider\:\:getHandlerParams\(\) has parameter \$configurationParams with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -21474,36 +25494,72 @@ parameters: count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:alert\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Logger\\MatecatLogger\:\:critical\(\) has parameter \$context with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:critical\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Logger\\MatecatLogger\:\:debug\(\) has parameter \$context with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:debug\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Logger\\MatecatLogger\:\:emergency\(\) has parameter \$context with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:emergency\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Logger\\MatecatLogger\:\:error\(\) has parameter \$context with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:error\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Logger\\MatecatLogger\:\:info\(\) has parameter \$context with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:info\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Logger\\MatecatLogger\:\:log\(\) has parameter \$context with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -21516,12 +25572,24 @@ parameters: count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:notice\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Logger\\MatecatLogger\:\:warning\(\) has parameter \$context with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/Logger/MatecatLogger.php + - + message: '#^Method Utils\\Logger\\MatecatLogger\:\:warning\(\) throws checked exception Psr\\Log\\InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Logger/MatecatLogger.php + - message: '#^Method Utils\\Network\\MultiCurlHandler\:\:_callbackExecute\(\) has parameter \$record with no type specified\.$#' identifier: missingType.parameter @@ -21720,12 +25788,24 @@ parameters: count: 1 path: lib/Utils/OutsourceTo/Translated.php + - + message: '#^Method Utils\\OutsourceTo\\Translated\:\:__addCartElementToCart\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/OutsourceTo/Translated.php + - message: '#^Method Utils\\OutsourceTo\\Translated\:\:__getProjectData\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/OutsourceTo/Translated.php + - + message: '#^Method Utils\\OutsourceTo\\Translated\:\:__getProjectData\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/OutsourceTo/Translated.php + - message: '#^Method Utils\\OutsourceTo\\Translated\:\:__prepareOutsourcedJobCart\(\) has parameter \$apiCallResult with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -21786,6 +25866,12 @@ parameters: count: 1 path: lib/Utils/OutsourceTo/Translated.php + - + message: '#^Method Utils\\OutsourceTo\\Translated\:\:performQuote\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/OutsourceTo/Translated.php + - message: '#^Offset ''currency'' might not exist on Utils\\Shop\\AbstractItem\|null\.$#' identifier: offsetAccess.notFound @@ -21912,6 +25998,12 @@ parameters: count: 1 path: lib/Utils/Redis/RedisHandler.php + - + message: '#^Method Utils\\Redis\\RedisHandler\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Redis/RedisHandler.php + - message: '#^Method Utils\\Redis\\RedisHandler\:\:formatDSN\(\) has parameter \$dsnString with no type specified\.$#' identifier: missingType.parameter @@ -21960,6 +26052,12 @@ parameters: count: 1 path: lib/Utils/Registry/AppConfig.php + - + message: '#^Method Utils\\Registry\\AppConfig\:\:__construct\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Registry/AppConfig.php + - message: '#^Method Utils\\Registry\\AppConfig\:\:init\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -22038,6 +26136,12 @@ parameters: count: 1 path: lib/Utils/Search/ReplaceHistory.php + - + message: '#^Method Utils\\Search\\ReplaceHistoryFactory\:\:_checkDriver\(\) throws checked exception InvalidArgumentException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Search/ReplaceHistoryFactory.php + - message: '#^Method Utils\\Search\\ReplaceHistoryFactory\:\:create\(\) has parameter \$driver with no type specified\.$#' identifier: missingType.parameter @@ -22056,6 +26160,12 @@ parameters: count: 1 path: lib/Utils/Search/ReplaceHistoryFactory.php + - + message: '#^Method Utils\\Search\\ReplaceHistoryFactory\:\:create\(\) throws checked exception ReflectionException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/Search/ReplaceHistoryFactory.php + - message: '#^Method Utils\\ServerCheck\\ServerCheck\:\:getByteValue\(\) has parameter \$value with no type specified\.$#' identifier: missingType.parameter @@ -22086,6 +26196,12 @@ parameters: count: 1 path: lib/Utils/ServerCheck/UploadParams.php + - + message: '#^Method Utils\\ServerCheck\\UploadParams\:\:__set\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/ServerCheck/UploadParams.php + - message: '#^Call to an undefined method object\:\:offsetSet\(\)\.$#' identifier: method.notFound @@ -22116,6 +26232,18 @@ parameters: count: 1 path: lib/Utils/Shop/AbstractItem.php + - + message: '#^Method Utils\\Shop\\AbstractItem\:\:offsetSet\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Shop/AbstractItem.php + + - + message: '#^Method Utils\\Shop\\AbstractItem\:\:offsetSet\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Shop/AbstractItem.php + - message: '#^PHPDoc tag @throws has invalid value \(LogicException/DomainException\)\: Unexpected token "/DomainException", expected TOKEN_HORIZONTAL_WS at offset 438 on line 15$#' identifier: phpDoc.parseError @@ -22128,6 +26256,12 @@ parameters: count: 1 path: lib/Utils/Shop/AbstractItem.php + - + message: '#^Method Utils\\Shop\\Cart\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Shop/Cart.php + - message: '#^Property Utils\\Shop\\Cart\:\:\$cart type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -22176,6 +26310,12 @@ parameters: count: 1 path: lib/Utils/TMS/TMSService.php + - + message: '#^Method Utils\\TMS\\TMSService\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TMS/TMSService.php + - message: '#^Method Utils\\TMS\\TMSService\:\:_fileUploadStatus\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -22212,6 +26352,18 @@ parameters: count: 1 path: lib/Utils/TMS/TMSService.php + - + message: '#^Method Utils\\TMS\\TMSService\:\:exportJobAsCSV\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/TMS/TMSService.php + + - + message: '#^Method Utils\\TMS\\TMSService\:\:getUserAdaptiveMTEngines\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TMS/TMSService.php + - message: '#^Method Utils\\TMS\\TMSService\:\:glossaryUploadStatus\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -22296,6 +26448,12 @@ parameters: count: 1 path: lib/Utils/TaskRunner/Commons/AbstractDaemon.php + - + message: '#^Method Utils\\TaskRunner\\Commons\\AbstractDaemon\:\:installHandler\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TaskRunner/Commons/AbstractDaemon.php + - message: '#^Method Utils\\TaskRunner\\Commons\\AbstractDaemon\:\:main\(\) has parameter \$args with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -22326,6 +26484,12 @@ parameters: count: 1 path: lib/Utils/TaskRunner/Commons/AbstractElement.php + - + message: '#^Method Utils\\TaskRunner\\Commons\\AbstractElement\:\:__set\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TaskRunner/Commons/AbstractElement.php + - message: '#^Method Utils\\TaskRunner\\Commons\\AbstractElement\:\:__toString\(\) should return string but returns string\|false\.$#' identifier: return.type @@ -22392,6 +26556,12 @@ parameters: count: 2 path: lib/Utils/TaskRunner/Commons/AbstractWorker.php + - + message: '#^Method Utils\\TaskRunner\\Commons\\Configuration\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TaskRunner/Commons/Configuration.php + - message: '#^Method Utils\\TaskRunner\\Commons\\Configuration\:\:getRaw\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -22410,6 +26580,12 @@ parameters: count: 1 path: lib/Utils/TaskRunner/Commons/Context.php + - + message: '#^Method Utils\\TaskRunner\\Commons\\Context\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/TaskRunner/Commons/Context.php + - message: '#^Method Utils\\TaskRunner\\Commons\\Context\:\:__toString\(\) should return string but returns string\|false\.$#' identifier: return.type @@ -22488,6 +26664,12 @@ parameters: count: 1 path: lib/Utils/TaskRunner/Executor.php + - + message: '#^Method Utils\\TaskRunner\\Executor\:\:installHandler\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TaskRunner/Executor.php + - message: '#^PHPDoc tag @var has invalid value \(\$msgFrame Frame\)\: Unexpected token "\$msgFrame", expected type at offset 28 on line 2$#' identifier: phpDoc.parseError @@ -22548,6 +26730,12 @@ parameters: count: 1 path: lib/Utils/TaskRunner/TaskManager.php + - + message: '#^Method Utils\\TaskRunner\\TaskManager\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TaskRunner/TaskManager.php + - message: '#^Method Utils\\TaskRunner\\TaskManager\:\:_balanceQueues\(\) has no return type specified\.$#' identifier: missingType.return @@ -22770,12 +26958,30 @@ parameters: count: 1 path: lib/Utils/TmKeyManagement/TmKeyManager.php + - + message: '#^Method Utils\\TmKeyManagement\\TmKeyManager\:\:sanitize\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TmKeyManagement/TmKeyManager.php + + - + message: '#^Method Utils\\TmKeyManagement\\TmKeyManager\:\:sanitize\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 6 + path: lib/Utils/TmKeyManagement/TmKeyManager.php + - message: '#^Method Utils\\TmKeyManagement\\TmKeyManager\:\:shareKey\(\) has parameter \$emailList with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/Utils/TmKeyManagement/TmKeyManager.php + - + message: '#^Method Utils\\TmKeyManagement\\TmKeyManager\:\:shareKey\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 2 + path: lib/Utils/TmKeyManagement/TmKeyManager.php + - message: '#^PHPDoc tag @var has invalid value \(\$_client_tm_key TmKeyStruct\)\: Unexpected token "\$_client_tm_key", expected type at offset 24 on line 2$#' identifier: phpDoc.parseError @@ -22866,6 +27072,12 @@ parameters: count: 1 path: lib/Utils/TmKeyManagement/TmKeyStruct.php + - + message: '#^Method Utils\\TmKeyManagement\\TmKeyStruct\:\:__set\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/TmKeyManagement/TmKeyStruct.php + - message: '#^Method Utils\\TmKeyManagement\\TmKeyStruct\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -22938,6 +27150,12 @@ parameters: count: 1 path: lib/Utils/Tools/CatUtils.php + - + message: '#^Method Utils\\Tools\\CatUtils\:\:_performanceEstimationTime\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Tools/CatUtils.php + - message: '#^Method Utils\\Tools\\CatUtils\:\:clean_raw_string_4_word_count\(\) should return string but returns string\|null\.$#' identifier: return.type @@ -23292,6 +27510,24 @@ parameters: count: 1 path: lib/Utils/Tools/SimpleJWT.php + - + message: '#^Method Utils\\Tools\\SimpleJWT\:\:getInstanceFromString\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Tools/SimpleJWT.php + + - + message: '#^Method Utils\\Tools\\SimpleJWT\:\:getInstanceFromString\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/Utils/Tools/SimpleJWT.php + + - + message: '#^Method Utils\\Tools\\SimpleJWT\:\:getInstanceFromString\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Tools/SimpleJWT.php + - message: '#^Method Utils\\Tools\\SimpleJWT\:\:getPayload\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -23304,6 +27540,12 @@ parameters: count: 1 path: lib/Utils/Tools/SimpleJWT.php + - + message: '#^Method Utils\\Tools\\SimpleJWT\:\:offsetSet\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Tools/SimpleJWT.php + - message: '#^Method Utils\\Tools\\SimpleJWT\:\:parseJWTString\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -23316,6 +27558,12 @@ parameters: count: 1 path: lib/Utils/Tools/SimpleJWT.php + - + message: '#^Method Utils\\Tools\\SimpleJWT\:\:sign\(\) throws checked exception UnexpectedValueException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Tools/SimpleJWT.php + - message: '#^PHPDoc tag @property has invalid value \(int exp\)\: Unexpected token "exp", expected variable at offset 216 on line 10$#' identifier: phpDoc.parseError @@ -23826,6 +28074,18 @@ parameters: count: 1 path: lib/Utils/Validator/JSONSchema/JSONValidator.php + - + message: '#^Method Utils\\Validator\\JSONSchema\\JSONValidator\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Validator/JSONSchema/JSONValidator.php + + - + message: '#^Method Utils\\Validator\\JSONSchema\\JSONValidator\:\:getValidJSONSchema\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/Validator/JSONSchema/JSONValidator.php + - message: '#^Parameter \#1 \$jsonSchema of static method Utils\\Validator\\JSONSchema\\JSONValidator\:\:getValidJSONSchema\(\) expects string, string\|false given\.$#' identifier: argument.type @@ -23844,6 +28104,12 @@ parameters: count: 1 path: lib/Utils/Validator/JSONSchema/JSONValidatorObject.php + - + message: '#^Method Utils\\XliffReplacer\\SilentXliffReplacerCallback\:\:thereAreErrors\(\) has Exception in PHPDoc @throws tag but it''s not thrown\.$#' + identifier: throws.unusedType + count: 1 + path: lib/Utils/XliffReplacer/SilentXliffReplacerCallback.php + - message: '#^Cannot access property \$target on Model\\Jobs\\JobStruct\|null\.$#' identifier: property.nonObject @@ -23862,6 +28128,12 @@ parameters: count: 1 path: lib/Utils/XliffReplacer/XliffReplacerCallback.php + - + message: '#^Method Utils\\XliffReplacer\\XliffReplacerCallback\:\:icuEnabled\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/Utils/XliffReplacer/XliffReplacerCallback.php + - message: '#^Parameter \#1 \$id_job of method Model\\Jobs\\MetadataDao\:\:getSubfilteringCustomHandlers\(\) expects int, int\|null given\.$#' identifier: argument.type @@ -23916,6 +28188,12 @@ parameters: count: 1 path: lib/View/API/App/Json/Analysis/AnalysisChunk.php + - + message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisChunk\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/App/Json/Analysis/AnalysisChunk.php + - message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisChunk\:\:getEngines\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -23988,6 +28266,12 @@ parameters: count: 1 path: lib/View/API/App/Json/Analysis/AnalysisFile.php + - + message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisFile\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 3 + path: lib/View/API/App/Json/Analysis/AnalysisFile.php + - message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisFile\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24018,6 +28302,12 @@ parameters: count: 1 path: lib/View/API/App/Json/Analysis/AnalysisJobSummary.php + - + message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisMatch\:\:__construct\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/App/Json/Analysis/AnalysisMatch.php + - message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisMatch\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24048,6 +28338,12 @@ parameters: count: 1 path: lib/View/API/App/Json/Analysis/AnalysisProjectSummary.php + - + message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisProjectSummary\:\:getEstimatedWorkTime\(\) throws checked exception DivisionByZeroError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/App/Json/Analysis/AnalysisProjectSummary.php + - message: '#^Method View\\API\\App\\Json\\Analysis\\AnalysisProjectSummary\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24060,12 +28356,24 @@ parameters: count: 1 path: lib/View/API/App/Json/ConnectedService.php + - + message: '#^Method View\\API\\App\\Json\\ConnectedService\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/App/Json/ConnectedService.php + - message: '#^Method View\\API\\App\\Json\\ConnectedService\:\:render\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue count: 1 path: lib/View/API/App/Json/ConnectedService.php + - + message: '#^Method View\\API\\App\\Json\\ConnectedService\:\:render\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/App/Json/ConnectedService.php + - message: '#^Method View\\API\\App\\Json\\ConnectedService\:\:renderItem\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24096,6 +28404,12 @@ parameters: count: 1 path: lib/View/API/App/Json/UserProfile.php + - + message: '#^Method View\\API\\App\\Json\\UserProfile\:\:renderItem\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/App/Json/UserProfile.php + - message: '#^Method View\\API\\Commons\\Error\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24132,6 +28446,12 @@ parameters: count: 1 path: lib/View/API/Commons/ZipContentObject.php + - + message: '#^Method View\\API\\Commons\\ZipContentObject\:\:__set\(\) throws checked exception DomainException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/Commons/ZipContentObject.php + - message: '#^Method View\\API\\Commons\\ZipContentObject\:\:build\(\) has parameter \$_array_params with no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24144,6 +28464,18 @@ parameters: count: 1 path: lib/View/API/Commons/ZipContentObject.php + - + message: '#^Method View\\API\\Commons\\ZipContentObject\:\:setDocumentContentFromFileSystem\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/Commons/ZipContentObject.php + + - + message: '#^Method View\\API\\Commons\\ZipContentObject\:\:setDocumentContentFromS3\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/Commons/ZipContentObject.php + - message: '#^Method View\\API\\Commons\\ZipContentObject\:\:toArray\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24300,6 +28632,12 @@ parameters: count: 1 path: lib/View/API/V2/Json/Membership.php + - + message: '#^Method View\\API\\V2\\Json\\Membership\:\:__construct\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/V2/Json/Membership.php + - message: '#^Method View\\API\\V2\\Json\\Membership\:\:render\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24360,6 +28698,12 @@ parameters: count: 1 path: lib/View/API/V2/Json/Project.php + - + message: '#^Method View\\API\\V2\\Json\\Project\:\:render\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/V2/Json/Project.php + - message: '#^Method View\\API\\V2\\Json\\Project\:\:renderItem\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24516,6 +28860,18 @@ parameters: count: 1 path: lib/View/API/V2/Json/SegmentTranslationIssue.php + - + message: '#^Method View\\API\\V2\\Json\\SegmentTranslationIssue\:\:genCSVTmpFile\(\) throws checked exception LogicException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/V2/Json/SegmentTranslationIssue.php + + - + message: '#^Method View\\API\\V2\\Json\\SegmentTranslationIssue\:\:genCSVTmpFile\(\) throws checked exception RuntimeException but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/V2/Json/SegmentTranslationIssue.php + - message: '#^Method View\\API\\V2\\Json\\SegmentTranslationIssue\:\:render\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24546,6 +28902,12 @@ parameters: count: 1 path: lib/View/API/V2/Json/SegmentTranslationMismatches.php + - + message: '#^Method View\\API\\V2\\Json\\SegmentTranslationMismatches\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/V2/Json/SegmentTranslationMismatches.php + - message: '#^Method View\\API\\V2\\Json\\SegmentTranslationMismatches\:\:render\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24576,6 +28938,12 @@ parameters: count: 1 path: lib/View/API/V2/Json/SegmentVersion.php + - + message: '#^Method View\\API\\V2\\Json\\SegmentVersion\:\:__construct\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/API/V2/Json/SegmentVersion.php + - message: '#^Method View\\API\\V2\\Json\\SegmentVersion\:\:render\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -24882,6 +29250,18 @@ parameters: count: 1 path: lib/View/API/V3/Json/QualitySummary.php + - + message: '#^Parameter \#2 \$replace of function str_replace expects array\\|string, string\|null given\.$#' + identifier: argument.type + count: 1 + path: lib/View/APIDoc.php + + - + message: '#^Parameter \#3 \$subject of function str_replace expects array\\|string, string\|false given\.$#' + identifier: argument.type + count: 1 + path: lib/View/APIDoc.php + - message: '#^Method UploadHandler\:\:_isRightExtension\(\) has parameter \$fileUp with no type specified\.$#' identifier: missingType.parameter @@ -24936,6 +29316,12 @@ parameters: count: 1 path: lib/View/fileupload/UploadHandler.php + - + message: '#^Method UploadHandler\:\:normalFileDelete\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/fileupload/UploadHandler.php + - message: '#^Method UploadHandler\:\:set_file_delete_url\(\) has parameter \$file with no type specified\.$#' identifier: missingType.parameter @@ -25002,6 +29388,12 @@ parameters: count: 1 path: lib/View/fileupload/UploadHandler.php + - + message: '#^Method UploadHandler\:\:zipInternalFileDelete\(\) throws checked exception Exception but it''s missing from the PHPDoc @throws tag\.$#' + identifier: missingType.checkedException + count: 1 + path: lib/View/fileupload/UploadHandler.php + - message: '#^Offset ''extension'' might not exist on array\{dirname\?\: string, basename\: string, extension\?\: string, filename\: string\}\.$#' identifier: offsetAccess.notFound diff --git a/phpstan-throws-backlog.txt b/phpstan-throws-backlog.txt new file mode 100644 index 0000000000..43be0eb900 --- /dev/null +++ b/phpstan-throws-backlog.txt @@ -0,0 +1,283 @@ +# PHPStan @throws backlog — files to fix sequentially +# Error types: missingCheckedExceptionInThrows, tooWideThrowType, +# checkTooWideThrowTypesInProtectedAndPublicMethods +# Total files: 275 +# Total baseline entries: 726 +# +# Format: BASELINE_ENTRIES FILE_PATH +# + 2 lib/Bootstrap.php + 6 lib/Controller/API/App/AIAssistantController.php + 3 lib/Controller/API/App/AjaxUtilsController.php + 2 lib/Controller/API/App/Authentication/ForgotPasswordController.php + 9 lib/Controller/API/App/CommentController.php + 8 lib/Controller/API/App/CreateProjectController.php + 3 lib/Controller/API/App/DeleteContributionController.php + 2 lib/Controller/API/App/DownloadAnalysisReportController.php + 2 lib/Controller/API/App/EngineController.php + 1 lib/Controller/API/App/FilesController.php + 4 lib/Controller/API/App/GetContributionController.php + 4 lib/Controller/API/App/GetSearchController.php + 1 lib/Controller/API/App/GetSegmentsController.php + 1 lib/Controller/API/App/GetVolumeAnalysisController.php + 1 lib/Controller/API/App/GetWarningController.php + 1 lib/Controller/API/App/HeartBeat.php + 1 lib/Controller/API/App/IntentoController.php + 2 lib/Controller/API/App/OutsourceToController.php + 1 lib/Controller/API/App/QualityFrameworkController.php + 4 lib/Controller/API/App/SetChunkCompletedController.php + 2 lib/Controller/API/App/SetCurrentSegmentController.php + 9 lib/Controller/API/App/SetTranslationController.php + 1 lib/Controller/API/App/SplitSegmentController.php + 1 lib/Controller/API/App/TmKeyManagementController.php + 5 lib/Controller/API/App/UpdateJobKeysController.php + 1 lib/Controller/API/App/UserKeysController.php + 1 lib/Controller/API/App/XliffToTargetConverterController.php + 1 lib/Controller/API/Commons/Validators/Base.php + 1 lib/Controller/API/Commons/Validators/ChunkPasswordValidator.php + 1 lib/Controller/API/Commons/Validators/ProjectAccessTokenValidator.php + 1 lib/Controller/API/Commons/Validators/ProjectPasswordValidator.php + 2 lib/Controller/API/Commons/Validators/ProjectValidator.php + 1 lib/Controller/API/Commons/Validators/SegmentValidator.php + 1 lib/Controller/API/GDrive/GDriveController.php + 1 lib/Controller/API/GDrive/OAuthController.php + 5 lib/Controller/API/V1/NewController.php + 5 lib/Controller/API/V2/DownloadController.php + 2 lib/Controller/API/V2/DownloadJobTMXController.php + 1 lib/Controller/API/V2/DownloadOriginalController.php + 1 lib/Controller/API/V2/GlossaryFilesController.php + 1 lib/Controller/API/V2/JobsTranslatorsController.php + 1 lib/Controller/API/V2/MemoryKeysController.php + 2 lib/Controller/API/V2/ProjectsController.php + 4 lib/Controller/API/V2/SegmentTranslationIssueController.php + 4 lib/Controller/API/V2/SplitJobController.php + 1 lib/Controller/API/V2/TeamMembersController.php + 1 lib/Controller/API/V2/TeamsController.php + 1 lib/Controller/API/V2/TeamsProjectsController.php + 2 lib/Controller/API/V2/UserController.php + 1 lib/Controller/API/V3/CountWordController.php + 1 lib/Controller/API/V3/DownloadQRController.php + 1 lib/Controller/API/V3/FileInfoController.php + 1 lib/Controller/API/V3/FiltersConfigTemplateController.php + 1 lib/Controller/API/V3/LaraController.php + 1 lib/Controller/API/V3/ModernMTController.php + 1 lib/Controller/API/V3/MyMemoryController.php + 1 lib/Controller/API/V3/PayableRateController.php + 1 lib/Controller/API/V3/QAModelTemplateController.php + 3 lib/Controller/API/V3/QualityReportControllerAPI.php + 1 lib/Controller/API/V3/RevisionFeedbackController.php + 3 lib/Controller/API/V3/SegmentAnalysisController.php + 2 lib/Controller/API/V3/TeamsProjectsController.php + 1 lib/Controller/API/V3/XliffConfigTemplateController.php + 1 lib/Controller/Abstracts/AbstractDownloadController.php + 2 lib/Controller/Abstracts/Authentication/AuthCookie.php + 3 lib/Controller/Abstracts/Authentication/SessionTokenStoreHandler.php + 1 lib/Controller/Abstracts/BaseKleinViewController.php + 2 lib/Controller/Abstracts/KleinController.php + 1 lib/Controller/Traits/KleinResponseFileStream.php + 1 lib/Controller/Views/AnalyzeController.php + 2 lib/Controller/Views/CattoolController.php + 1 lib/Controller/Views/ManageController.php + 1 lib/Controller/Views/OauthResponseHandlerController.php + 2 lib/Controller/Views/OutsourceTo/AbstractController.php + 1 lib/Controller/Views/QualityReportController.php + 1 lib/Controller/Views/TemplateDecorator/AbstractDecorator.php + 1 lib/Controller/Views/TemplateDecorator/DownloadOmegaTOutputDecorator.php + 4 lib/Model/ActivityLog/ActivityLogDao.php + 3 lib/Model/Analysis/AbstractStatus.php + 2 lib/Model/Analysis/AnalysisDao.php + 1 lib/Model/Analysis/XTRFStatus.php + 5 lib/Model/ApiKeys/ApiKeyDao.php + 4 lib/Model/ChunksCompletion/ChunkCompletionEventDao.php + 2 lib/Model/ChunksCompletion/ChunkCompletionUpdateDao.php + 1 lib/Model/Comments/BaseCommentStruct.php + 6 lib/Model/Comments/CommentDao.php + 6 lib/Model/ConnectedServices/ConnectedServiceDao.php + 1 lib/Model/ConnectedServices/GDrive/GDriveUserAuthorizationModel.php + 2 lib/Model/ConnectedServices/GDrive/RemoteFileService.php + 6 lib/Model/ConnectedServices/GDrive/Session.php + 2 lib/Model/ConnectedServices/Oauth/DefuseEncryption.php + 3 lib/Model/ConnectedServices/Oauth/Facebook/FacebookProvider.php + 4 lib/Model/ConnectedServices/Oauth/Github/GithubProvider.php + 1 lib/Model/ConnectedServices/Oauth/Google/GoogleProvider.php + 3 lib/Model/ConnectedServices/Oauth/LinkedIn/LinkedInProvider.php + 4 lib/Model/ConnectedServices/Oauth/Microsoft/MicrosoftProvider.php + 2 lib/Model/ConnectedServices/Oauth/OauthClient.php + 1 lib/Model/Conversion/InternalHashPaths.php + 1 lib/Model/Conversion/MimeTypes/Guesser/SimpleMarkupMimeTypeGuesser.php + 1 lib/Model/Conversion/MimeTypes/MimeTypes.php + 2 lib/Model/Conversion/Upload.php + 1 lib/Model/Conversion/ZipArchiveHandler.php + 4 lib/Model/DataAccess/AbstractDao.php + 2 lib/Model/DataAccess/AbstractDaoObjectStruct.php + 8 lib/Model/DataAccess/Database.php + 3 lib/Model/DataAccess/ShapelessConcreteStruct.php + 1 lib/Model/EditLog/EditLogSegmentStruct.php + 3 lib/Model/Engines/EngineDAO.php + 2 lib/Model/Engines/Structs/EngineStruct.php + 1 lib/Model/FeaturesBase/FeatureSet.php + 1 lib/Model/FeaturesBase/PluginsLoader.php + 6 lib/Model/Files/FileDao.php + 5 lib/Model/Files/FilesPartsDao.php + 3 lib/Model/Files/MetadataDao.php + 2 lib/Model/FilesStorage/AbstractFilesStorage.php + 7 lib/Model/FilesStorage/FsFilesStorage.php + 7 lib/Model/FilesStorage/S3FilesStorage.php + 1 lib/Model/Filters/DTO/Yaml.php + 6 lib/Model/Filters/FiltersConfigTemplateDao.php + 2 lib/Model/Filters/FiltersConfigTemplateStruct.php + 22 lib/Model/Jobs/JobDao.php + 9 lib/Model/Jobs/JobStruct.php + 3 lib/Model/Jobs/MetadataDao.php + 6 lib/Model/LQA/CategoryDao.php + 15 lib/Model/LQA/ChunkReviewDao.php + 6 lib/Model/LQA/EntryCommentDao.php + 11 lib/Model/LQA/EntryDao.php + 1 lib/Model/LQA/EntryStruct.php + 3 lib/Model/LQA/ModelDao.php + 4 lib/Model/LQA/QAModelTemplate/QAModelTemplateDao.php + 1 lib/Model/LQA/QAModelTemplate/QAModelTemplateStruct.php + 2 lib/Model/MTQE/PayableRate/MTQEPayableRateStruct.php + 5 lib/Model/MTQE/PayableRate/MTQEPayableRateTemplateDao.php + 5 lib/Model/MTQE/Templates/MTQEWorkflowTemplateDao.php + 2 lib/Model/MTQE/Templates/MTQEWorkflowTemplateStruct.php + 1 lib/Model/Outsource/ConfirmationDao.php + 4 lib/Model/OwnerFeatures/OwnerFeatureDao.php + 5 lib/Model/Pagination/Pager.php + 1 lib/Model/Pagination/PaginationParameters.php + 5 lib/Model/PayableRates/CustomPayableRateDao.php + 3 lib/Model/PayableRates/CustomPayableRateStruct.php + 1 lib/Model/ProjectCreation/JobCreationService.php + 1 lib/Model/ProjectCreation/SegmentExtractor.php + 1 lib/Model/ProjectCreation/SegmentStorageService.php + 1 lib/Model/ProjectCreation/TmKeyService.php + 2 lib/Model/Projects/ManageModel.php + 4 lib/Model/Projects/MetadataDao.php + 22 lib/Model/Projects/ProjectDao.php + 3 lib/Model/Projects/ProjectStruct.php + 8 lib/Model/Projects/ProjectTemplateDao.php + 1 lib/Model/Projects/ProjectTemplateStruct.php + 4 lib/Model/QualityReport/QualityReportDao.php + 1 lib/Model/QualityReport/QualityReportModel.php + 4 lib/Model/QualityReport/QualityReportSegmentModel.php + 1 lib/Model/QualityReport/QualityReportSegmentStruct.php + 5 lib/Model/RemoteFiles/RemoteFileDao.php + 3 lib/Model/ReviseFeedback/FeedbackDAO.php + 2 lib/Model/Search/MySQLReplaceEventDAO.php + 2 lib/Model/Search/MySQLReplaceEventIndexDAO.php + 1 lib/Model/Search/RedisReplaceEventDAO.php + 1 lib/Model/Search/RedisReplaceEventIndexDAO.php + 1 lib/Model/Search/SearchModel.php + 3 lib/Model/Segments/ContextStruct.php + 10 lib/Model/Segments/SegmentDao.php + 4 lib/Model/Segments/SegmentMetadataDao.php + 5 lib/Model/Segments/SegmentNoteDao.php + 2 lib/Model/Segments/SegmentOriginalDataDao.php + 2 lib/Model/Segments/SegmentOriginalDataStruct.php + 3 lib/Model/Segments/SegmentStruct.php + 3 lib/Model/Segments/SegmentUIStruct.php + 3 lib/Model/TMSService/TMSServiceDao.php + 2 lib/Model/Teams/InvitedUser.php + 2 lib/Model/Teams/MembershipDao.php + 6 lib/Model/Teams/TeamDao.php + 7 lib/Model/Teams/TeamModel.php + 1 lib/Model/TmKeyManagement/UserKeysModel.php + 11 lib/Model/Translations/SegmentTranslationDao.php + 3 lib/Model/Translations/SegmentTranslationStruct.php + 3 lib/Model/Translations/WarningDao.php + 4 lib/Model/Translators/TranslatorsModel.php + 1 lib/Model/Users/Authentication/OAuthSignInModel.php + 1 lib/Model/Users/Authentication/PasswordResetModel.php + 1 lib/Model/Users/Authentication/SignupModel.php + 3 lib/Model/Users/MetadataDao.php + 1 lib/Model/Users/RedeemableProject.php + 7 lib/Model/Users/UserDao.php + 3 lib/Model/Warnings/GlobalWarningStruct.php + 2 lib/Model/WordCount/CounterModel.php + 1 lib/Model/WordCount/WordCountStruct.php + 2 lib/Model/WordCount/WordCounterDao.php + 4 lib/Model/Xliff/DTO/AbstractXliffRule.php + 2 lib/Model/Xliff/DTO/DefaultRule.php + 1 lib/Model/Xliff/DTO/XliffRulesModel.php + 6 lib/Model/Xliff/XliffConfigTemplateDao.php + 1 lib/Model/Xliff/XliffConfigTemplateStruct.php + 2 lib/Plugins/Features/AbstractRevisionFeature.php + 1 lib/Plugins/Features/ProjectCompletion.php + 1 lib/Plugins/Features/ProjectCompletion/Model/EventModel.php + 1 lib/Plugins/Features/ProjectCompletion/Model/ProjectCompletionStatusModel.php + 2 lib/Plugins/Features/ReviewExtended/BatchReviewProcessor.php + 1 lib/Plugins/Features/ReviewExtended/ChunkReviewModel.php + 1 lib/Plugins/Features/ReviewExtended/ReviewUtils.php + 2 lib/Plugins/Features/ReviewExtended/TranslationIssueModel.php + 2 lib/Plugins/Features/SegmentFilter/Model/SegmentFilterDao.php + 1 lib/Plugins/Features/TranslationEvents/Model/TranslationEvent.php + 4 lib/Plugins/Features/TranslationEvents/Model/TranslationEventDao.php + 2 lib/Plugins/Features/TranslationEvents/TranslationEventsHandler.php + 2 lib/Plugins/Features/TranslationVersions/Handlers/TranslationVersionsHandler.php + 12 lib/Plugins/Features/TranslationVersions/Model/TranslationVersionDao.php + 2 lib/Utils/ActiveMQ/AMQHandler.php + 2 lib/Utils/ActiveMQ/ClientHelpers/ProjectQueue.php + 1 lib/Utils/ActiveMQ/WorkerClient.php + 1 lib/Utils/AsyncTasks/Workers/AIAssistantWorker.php + 3 lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php + 3 lib/Utils/AsyncTasks/Workers/Analysis/TMAnalysisWorker.php + 2 lib/Utils/AsyncTasks/Workers/JobsWorker.php + 1 lib/Utils/Currency/TranslatedChangeRatesFetcher.php + 1 lib/Utils/Email/ProjectAssignedEmail.php + 1 lib/Utils/Email/WelcomeEmail.php + 3 lib/Utils/Engines/AbstractEngine.php + 4 lib/Utils/Engines/DeepL.php + 6 lib/Utils/Engines/DeepL/DeepLApiClient.php + 1 lib/Utils/Engines/Intento.php + 2 lib/Utils/Engines/Lara.php + 2 lib/Utils/Engines/MMT.php + 1 lib/Utils/Engines/Results/ErrorResponse.php + 1 lib/Utils/Engines/Results/MTResponse.php + 1 lib/Utils/Engines/Results/MyMemory/AnalyzeResponse.php + 1 lib/Utils/Engines/Results/MyMemory/CheckGlossaryResponse.php + 1 lib/Utils/Engines/Results/MyMemory/CreateUserResponse.php + 1 lib/Utils/Engines/Results/MyMemory/DomainsResponse.php + 1 lib/Utils/Engines/Results/MyMemory/ExportResponse.php + 1 lib/Utils/Engines/Results/MyMemory/FileImportAndStatusResponse.php + 1 lib/Utils/Engines/Results/MyMemory/GetMemoryResponse.php + 1 lib/Utils/Engines/Results/MyMemory/KeysGlossaryResponse.php + 1 lib/Utils/Engines/Results/MyMemory/SetContributionResponse.php + 1 lib/Utils/Engines/Validators/IntentoEngineOptionsValidator.php + 1 lib/Utils/Files/CSV.php + 1 lib/Utils/LQA/QA.php + 1 lib/Utils/LQA/QA/ErrObject.php + 1 lib/Utils/Logger/Handlers/CloudWatchHandlerProvider.php + 8 lib/Utils/Logger/MatecatLogger.php + 3 lib/Utils/OutsourceTo/Translated.php + 1 lib/Utils/Redis/RedisHandler.php + 1 lib/Utils/Registry/AppConfig.php + 2 lib/Utils/Search/ReplaceHistoryFactory.php + 1 lib/Utils/ServerCheck/UploadParams.php + 2 lib/Utils/Shop/AbstractItem.php + 1 lib/Utils/Shop/Cart.php + 3 lib/Utils/TMS/TMSService.php + 1 lib/Utils/TaskRunner/Commons/AbstractDaemon.php + 1 lib/Utils/TaskRunner/Commons/AbstractElement.php + 1 lib/Utils/TaskRunner/Commons/Configuration.php + 1 lib/Utils/TaskRunner/Commons/Context.php + 1 lib/Utils/TaskRunner/Executor.php + 1 lib/Utils/TaskRunner/TaskManager.php + 3 lib/Utils/TmKeyManagement/TmKeyManager.php + 1 lib/Utils/TmKeyManagement/TmKeyStruct.php + 1 lib/Utils/Tools/CatUtils.php + 5 lib/Utils/Tools/SimpleJWT.php + 2 lib/Utils/Validator/JSONSchema/JSONValidator.php + 1 lib/Utils/XliffReplacer/XliffReplacerCallback.php + 1 lib/View/API/App/Json/Analysis/AnalysisChunk.php + 1 lib/View/API/App/Json/Analysis/AnalysisFile.php + 1 lib/View/API/App/Json/Analysis/AnalysisMatch.php + 1 lib/View/API/App/Json/Analysis/AnalysisProjectSummary.php + 2 lib/View/API/App/Json/ConnectedService.php + 1 lib/View/API/App/Json/UserProfile.php + 3 lib/View/API/Commons/ZipContentObject.php + 1 lib/View/API/V2/Json/Membership.php + 1 lib/View/API/V2/Json/Project.php + 2 lib/View/API/V2/Json/SegmentTranslationIssue.php + 1 lib/View/API/V2/Json/SegmentTranslationMismatches.php + 1 lib/View/API/V2/Json/SegmentVersion.php + 2 lib/View/fileupload/UploadHandler.php From 8fe8839bd6b4b73477f5aec2e1247161121ffbc6 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 17:22:41 +0200 Subject: [PATCH 05/22] =?UTF-8?q?=F0=9F=93=9D=20docs:=20add=20PR=20readine?= =?UTF-8?q?ss=20checklist=20template=20and=20GitHub=20Actions=20validator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - create `.github/PULL_REQUEST_TEMPLATE.md` to standardize pull request descriptions - add `.github/workflows/pr-readiness-check.yml` GitHub Action to validate mandatory checklist - implement checklist validation logic in `.github/scripts/pr-readiness-check.js` - include comprehensive unit tests in `.github/scripts/pr-readiness-check.test.js` Signed-off-by: domenico --- .github/PULL_REQUEST_TEMPLATE.md | 66 ++++ .github/scripts/pr-readiness-check.js | 209 +++++++++++ .github/scripts/pr-readiness-check.test.js | 388 +++++++++++++++++++++ .github/workflows/pr-readiness-check.yml | 75 ++++ 4 files changed, 738 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/scripts/pr-readiness-check.js create mode 100644 .github/scripts/pr-readiness-check.test.js create mode 100644 .github/workflows/pr-readiness-check.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..b0fbcfc71f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,66 @@ +## Summary + + + +## Type + + + +- [ ] `feat` — new user-facing feature +- [ ] `fix` — bug fix +- [ ] `refactor` — restructure without behavior change +- [ ] `chore` — build, deps, config, docs +- [ ] `perf` — performance improvement +- [ ] `test` — test coverage + +## Changes + + + +| File | Change | +|------|--------| +| | | + +## Migration Notes + + + +- [ ] Migration file added in `migrations/` directory +- [ ] Backward-compatible with current production schema +- [ ] NOT backward-compatible — breaking changes documented in Notes section +- [ ] Tested on a fresh database and on an existing one + +## Testing + + + +- [ ] `vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage` passes +- [ ] `./vendor/bin/phpstan` passes (0 errors, with baseline) +- [ ] Manual testing performed (describe below) +- [ ] New tests added for changed behavior +- [ ] Regression tests added for bug fixes + + + +## AI Disclosure + + + +- [ ] No AI tools were used in this PR +- [ ] AI tools were used — details below + + + +## Notes + + diff --git a/.github/scripts/pr-readiness-check.js b/.github/scripts/pr-readiness-check.js new file mode 100644 index 0000000000..8cbf55502d --- /dev/null +++ b/.github/scripts/pr-readiness-check.js @@ -0,0 +1,209 @@ +'use strict'; + +// ── Helpers ─────────────────────────────────────────────────── + +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +function getChecked(items, body) { + return items.filter((item) => { + return new RegExp(`-\\s*\\[[xX]\\]\\s*${escapeRegex(item)}`).test(body); + }); +} + +function getUnchecked(items, body) { + return items.filter((item) => { + return !new RegExp(`-\\s*\\[[xX]\\]\\s*${escapeRegex(item)}`).test(body); + }); +} + +function isChecked(item, body) { + return new RegExp(`-\\s*\\[[xX]\\]\\s*${escapeRegex(item)}`).test(body); +} + +// ── Section validators ──────────────────────────────────────── + +function validateExactlyOne(items, body, {none, multiple}) { + const checked = getChecked(items, body); + if (checked.length === 0) return none; + if (checked.length > 1) return multiple; + return null; +} + +function validateAtLeastOne(items, body, {none}) { + if (getChecked(items, body).length === 0) return none; + return null; +} + +function validateAll(items, body, {prefix}) { + const unchecked = getUnchecked(items, body); + if (unchecked.length === 0) return null; + return [prefix, ...unchecked.map((m) => ` - ${m}`)].join('\n'); +} + +function hasNonEmptySection(sectionHeader, body) { + const re = new RegExp(`##\\s*${escapeRegex(sectionHeader)}\\s*\\n([\\s\\S]*?)(?=\\n##\\s|$)`); + const match = body.match(re); + if (!match) return false; + const content = match[1] + .replace(//g, '') + .trim(); + return content.length > 0; +} + +// ── Checklist items ─────────────────────────────────────────── + +const TYPE_ITEMS = [ + '`feat` — new user-facing feature', + '`fix` — bug fix', + '`refactor` — restructure without behavior change', + '`chore` — build, deps, config, docs', + '`perf` — performance improvement', + '`test` — test coverage', +]; + +const TYPE_FIX = '`fix` — bug fix'; +const TYPE_FEAT = '`feat` — new user-facing feature'; + +const TESTING_ITEMS = [ + '`vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage` passes', + '`./vendor/bin/phpstan` passes (0 errors, with baseline)', + 'Manual testing performed (describe below)', + 'New tests added for changed behavior', + 'Regression tests added for bug fixes', +]; + +const REGRESSION_ITEM = 'Regression tests added for bug fixes'; + +const AI_ITEMS = [ + 'No AI tools were used in this PR', + 'AI tools were used — details below', +]; + +const MIGRATION_REQUIRED_ITEMS = [ + 'Migration file added in `migrations/` directory', + 'Tested on a fresh database and on an existing one', +]; + +const MIGRATION_COMPAT_ITEMS = [ + 'Backward-compatible with current production schema', + 'NOT backward-compatible — breaking changes documented in Notes section', +]; + +const NOT_BACKWARD_COMPATIBLE = 'NOT backward-compatible — breaking changes documented in Notes section'; + +// ── Main validator ──────────────────────────────────────────── + +/** + * @param {string} body - PR body markdown text + * @param {object} files + * @param {string[]} files.migrationFilenames - filenames under migrations/ from the PR diff + * @param {string[]} files.testFilesWithAdditions - test filenames (under tests/) that have additions > 0 + * @returns {string[]} error messages (empty = all checks pass) + */ +function validatePrChecklist(body, {migrationFilenames = [], testFilesWithAdditions = []} = {}) { + const errors = []; + + // ── Type: exactly one ──────────────────────────────────── + const typeErr = validateExactlyOne(TYPE_ITEMS, body, { + none: 'No PR type selected. Check exactly one item under **Type**.', + multiple: 'Multiple PR types selected. Check exactly one item under **Type**.', + }); + if (typeErr) errors.push(typeErr); + + const isFix = isChecked(TYPE_FIX, body); + const isFeat = isChecked(TYPE_FEAT, body); + + // ── Testing: at least one ──────────────────────────────── + const testErr = validateAtLeastOne(TESTING_ITEMS, body, { + none: 'No testing items checked. Check at least one item under **Testing**.', + }); + if (testErr) errors.push(testErr); + + // ── fix → regression tests checkbox must be checked ────── + if (isFix && !isChecked(REGRESSION_ITEM, body)) { + errors.push( + 'PR type is `fix` but "Regression tests added for bug fixes" is not checked.\n' + + 'Bug fixes must include regression tests.', + ); + } + + // ── feat/fix → test files must be present with additions ─ + if ((isFeat || isFix) && testFilesWithAdditions.length === 0) { + errors.push( + `PR type is \`${isFix ? 'fix' : 'feat'}\` but no test files with added lines found in the diff.\n` + + 'Features and bug fixes must include new or updated tests (under tests/).', + ); + } + + // ── AI Disclosure: exactly one ─────────────────────────── + const aiErr = validateExactlyOne(AI_ITEMS, body, { + none: 'AI disclosure not filled. Check one item under **AI Disclosure**.', + multiple: 'Both AI disclosure options checked. Select only one.', + }); + if (aiErr) errors.push(aiErr); + + // ── Migration: bidirectional enforcement ────────────────── + const hasMigrationSection = /## Migration Notes/.test(body); + const hasMigrationFiles = migrationFilenames.length > 0; + + if (hasMigrationSection && !hasMigrationFiles) { + errors.push( + 'Migration Notes section is present but no migration file found in migrations/ directory.\n' + + 'Either add a migration file (migrations/YYYYMMDDHHMMSS_description.php)\n' + + 'or delete the Migration Notes section if no migration is needed.', + ); + } + + if (hasMigrationFiles && !hasMigrationSection) { + errors.push( + 'PR contains migration files but the Migration Notes section is missing:\n' + + migrationFilenames.map((f) => ` - ${f}`).join('\n') + '\n\n' + + 'Add the Migration Notes section from the PR template and complete all checklist items.', + ); + } + + if (hasMigrationSection && hasMigrationFiles) { + const migErr = validateAll(MIGRATION_REQUIRED_ITEMS, body, { + prefix: 'Migration section present but not all items checked:', + }); + if (migErr) errors.push(migErr); + + const compatErr = validateExactlyOne(MIGRATION_COMPAT_ITEMS, body, { + none: 'Migration compatibility not specified. Check exactly one: backward-compatible OR not backward-compatible.', + multiple: 'Both migration compatibility options checked. Select only one.', + }); + if (compatErr) errors.push(compatErr); + + // ── NOT backward-compatible → Notes section must have content + if (isChecked(NOT_BACKWARD_COMPATIBLE, body) && !hasNonEmptySection('Notes', body)) { + errors.push( + 'Migration is marked as NOT backward-compatible but the Notes section is empty.\n' + + 'Document breaking changes, migration impact, and deployment steps in the Notes section.', + ); + } + } + + return errors; +} + +module.exports = { + validatePrChecklist, + getChecked, + getUnchecked, + isChecked, + validateExactlyOne, + validateAtLeastOne, + validateAll, + hasNonEmptySection, + TYPE_ITEMS, + TYPE_FIX, + TYPE_FEAT, + TESTING_ITEMS, + REGRESSION_ITEM, + AI_ITEMS, + MIGRATION_REQUIRED_ITEMS, + MIGRATION_COMPAT_ITEMS, + NOT_BACKWARD_COMPATIBLE, +}; diff --git a/.github/scripts/pr-readiness-check.test.js b/.github/scripts/pr-readiness-check.test.js new file mode 100644 index 0000000000..a9a14de166 --- /dev/null +++ b/.github/scripts/pr-readiness-check.test.js @@ -0,0 +1,388 @@ +'use strict'; + +const {describe, it} = require('node:test'); +const assert = require('node:assert/strict'); +const { + validatePrChecklist, + getChecked, + getUnchecked, + hasNonEmptySection, +} = require('./pr-readiness-check.js'); + +// ── Test fixtures ───────────────────────────────────────────── + +function validBody({ + type = '`fix` — bug fix', + testing = '`vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage` passes', + regression = true, + ai = 'No AI tools were used in this PR', + migrationSection = false, + migrationChecked = false, + compat = null, + notes = '', + } = {}) { + let body = `## Summary\n\nFix something.\n\n## Type\n\n- [x] ${type}\n\n`; + body += `## Testing\n\n- [x] ${testing}\n`; + if (regression) { + body += '- [x] Regression tests added for bug fixes\n'; + } + body += '\n'; + body += `## AI Disclosure\n\n- [x] ${ai}\n\n`; + + if (migrationSection) { + body += '## Migration Notes\n\n'; + if (migrationChecked) { + body += '- [x] Migration file added in `migrations/` directory\n'; + body += '- [x] Tested on a fresh database and on an existing one\n'; + } else { + body += '- [ ] Migration file added in `migrations/` directory\n'; + body += '- [ ] Tested on a fresh database and on an existing one\n'; + } + if (compat === 'backward') { + body += '- [x] Backward-compatible with current production schema\n'; + body += '- [ ] NOT backward-compatible — breaking changes documented in Notes section\n'; + } else if (compat === 'breaking') { + body += '- [ ] Backward-compatible with current production schema\n'; + body += '- [x] NOT backward-compatible — breaking changes documented in Notes section\n'; + } else if (compat === 'both') { + body += '- [x] Backward-compatible with current production schema\n'; + body += '- [x] NOT backward-compatible — breaking changes documented in Notes section\n'; + } else { + body += '- [ ] Backward-compatible with current production schema\n'; + body += '- [ ] NOT backward-compatible — breaking changes documented in Notes section\n'; + } + } + + body += `## Notes\n\n${notes}\n`; + + return body; +} + +const TEST_FILES = ['tests/unit/SomeTest.php']; + +// ── Helper tests ────────────────────────────────────────────── + +describe('getChecked', () => { + it('finds checked items with [x]', () => { + const body = '- [x] alpha\n- [ ] beta\n- [X] gamma'; + assert.deepEqual(getChecked(['alpha', 'beta', 'gamma'], body), ['alpha', 'gamma']); + }); + + it('returns empty when nothing is checked', () => { + const body = '- [ ] alpha\n- [ ] beta'; + assert.deepEqual(getChecked(['alpha', 'beta'], body), []); + }); + + it('handles regex special characters in item text', () => { + const body = '- [x] `vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage` passes'; + const result = getChecked( + ['`vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage` passes'], + body, + ); + assert.equal(result.length, 1); + }); +}); + +describe('getUnchecked', () => { + it('finds unchecked items', () => { + const body = '- [x] alpha\n- [ ] beta'; + assert.deepEqual(getUnchecked(['alpha', 'beta'], body), ['beta']); + }); +}); + +describe('hasNonEmptySection', () => { + it('returns true when section has content', () => { + const body = '## Notes\n\nBreaking changes: removed column X.\n'; + assert.equal(hasNonEmptySection('Notes', body), true); + }); + + it('returns false when section is empty', () => { + const body = '## Notes\n\n'; + assert.equal(hasNonEmptySection('Notes', body), false); + }); + + it('returns false when section only has HTML comments', () => { + const body = '## Notes\n\n\n'; + assert.equal(hasNonEmptySection('Notes', body), false); + }); + + it('returns false when section is missing', () => { + assert.equal(hasNonEmptySection('Notes', '## Summary\n\nHello\n'), false); + }); + + it('returns true when section has content after a comment', () => { + const body = '## Notes\n\n\nActual breaking change here.\n'; + assert.equal(hasNonEmptySection('Notes', body), true); + }); +}); + +// ── validatePrChecklist ─────────────────────────────────────── + +describe('validatePrChecklist', () => { + describe('valid PRs', () => { + it('passes with all required sections filled (fix)', () => { + const errors = validatePrChecklist(validBody(), {testFilesWithAdditions: TEST_FILES}); + assert.deepEqual(errors, []); + }); + + it('passes with feat type and test files', () => { + const body = validBody({type: '`feat` — new user-facing feature', regression: false}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: TEST_FILES}); + assert.deepEqual(errors, []); + }); + + it('passes with refactor type and no test files', () => { + const body = validBody({type: '`refactor` — restructure without behavior change', regression: false}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: []}); + assert.deepEqual(errors, []); + }); + + it('passes with AI tools used', () => { + const body = validBody({ai: 'AI tools were used — details below'}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: TEST_FILES}); + assert.deepEqual(errors, []); + }); + }); + + describe('Type section', () => { + it('fails when no type is selected', () => { + const body = '## Summary\n\n## Testing\n\n- [x] Manual testing performed (describe below)\n\n## AI Disclosure\n\n- [x] No AI tools were used in this PR\n## Notes\n\n'; + const errors = validatePrChecklist(body, {}); + assert.ok(errors.some((e) => e.includes('No PR type selected'))); + }); + + it('fails when multiple types are selected', () => { + let body = validBody(); + body = body.replace('## Type\n\n- [x] `fix` — bug fix', '## Type\n\n- [x] `fix` — bug fix\n- [x] `feat` — new user-facing feature'); + const errors = validatePrChecklist(body, {testFilesWithAdditions: TEST_FILES}); + assert.ok(errors.some((e) => e.includes('Multiple PR types selected'))); + }); + }); + + describe('Testing section', () => { + it('fails when no testing item is checked', () => { + const body = '## Summary\n\n## Type\n\n- [x] `chore` — build, deps, config, docs\n\n## Testing\n\n- [ ] Manual testing performed (describe below)\n\n## AI Disclosure\n\n- [x] No AI tools were used in this PR\n## Notes\n\n'; + const errors = validatePrChecklist(body, {}); + assert.ok(errors.some((e) => e.includes('No testing items checked'))); + }); + }); + + describe('fix → regression tests mandatory', () => { + it('fails when type is fix but regression checkbox not checked', () => { + const body = validBody({regression: false}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: TEST_FILES}); + assert.ok(errors.some((e) => e.includes('Regression tests added for bug fixes'))); + }); + + it('passes when type is fix and regression checkbox is checked', () => { + const errors = validatePrChecklist(validBody(), {testFilesWithAdditions: TEST_FILES}); + assert.deepEqual(errors, []); + }); + + it('does not require regression checkbox for non-fix types', () => { + const body = validBody({type: '`feat` — new user-facing feature', regression: false}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: TEST_FILES}); + assert.ok(!errors.some((e) => e.includes('Regression tests'))); + }); + }); + + describe('feat/fix → test files must be in diff', () => { + it('fails when type is fix but no test files with additions', () => { + const body = validBody(); + const errors = validatePrChecklist(body, {testFilesWithAdditions: []}); + assert.ok(errors.some((e) => e.includes('no test files with added lines'))); + }); + + it('fails when type is feat but no test files with additions', () => { + const body = validBody({type: '`feat` — new user-facing feature', regression: false}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: []}); + assert.ok(errors.some((e) => e.includes('no test files with added lines'))); + }); + + it('passes when type is fix and test files have additions', () => { + const errors = validatePrChecklist(validBody(), {testFilesWithAdditions: ['tests/unit/FooTest.php']}); + assert.deepEqual(errors, []); + }); + + it('does not require test files for chore type', () => { + const body = validBody({type: '`chore` — build, deps, config, docs', regression: false}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: []}); + assert.ok(!errors.some((e) => e.includes('no test files'))); + }); + + it('does not require test files for refactor type', () => { + const body = validBody({type: '`refactor` — restructure without behavior change', regression: false}); + const errors = validatePrChecklist(body, {testFilesWithAdditions: []}); + assert.ok(!errors.some((e) => e.includes('no test files'))); + }); + }); + + describe('AI Disclosure section', () => { + it('fails when no AI option is selected', () => { + const body = '## Summary\n\n## Type\n\n- [x] `chore` — build, deps, config, docs\n\n## Testing\n\n- [x] Manual testing performed (describe below)\n\n## AI Disclosure\n\n- [ ] No AI tools were used in this PR\n- [ ] AI tools were used — details below\n## Notes\n\n'; + const errors = validatePrChecklist(body, {}); + assert.ok(errors.some((e) => e.includes('AI disclosure not filled'))); + }); + + it('fails when both AI options are selected', () => { + const body = '## Summary\n\n## Type\n\n- [x] `chore` — build, deps, config, docs\n\n## Testing\n\n- [x] Manual testing performed (describe below)\n\n## AI Disclosure\n\n- [x] No AI tools were used in this PR\n- [x] AI tools were used — details below\n## Notes\n\n'; + const errors = validatePrChecklist(body, {}); + assert.ok(errors.some((e) => e.includes('Both AI disclosure options'))); + }); + }); + + describe('Migration — bidirectional enforcement', () => { + it('fails when section present but no migration files in diff', () => { + const body = validBody({migrationSection: true, migrationChecked: true, compat: 'backward'}); + const errors = validatePrChecklist(body, {migrationFilenames: [], testFilesWithAdditions: TEST_FILES}); + assert.ok(errors.some((e) => e.includes('no migration file found'))); + }); + + it('fails when migration files in diff but no section in body', () => { + const body = validBody(); + const errors = validatePrChecklist(body, { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES, + }); + assert.ok(errors.some((e) => e.includes('Migration Notes section is missing'))); + }); + + it('lists the migration filenames when section is missing', () => { + const body = validBody(); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php', 'migrations/20260420130000_add_index.php'], + testFilesWithAdditions: TEST_FILES, + }; + const errors = validatePrChecklist(body, files); + const migError = errors.find((e) => e.includes('Migration Notes section is missing')); + assert.ok(migError.includes('20260420120000_add_column.php')); + assert.ok(migError.includes('20260420130000_add_index.php')); + }); + + it('passes when no section and no migration files', () => { + const errors = validatePrChecklist(validBody(), {testFilesWithAdditions: TEST_FILES}); + assert.deepEqual(errors, []); + }); + }); + + describe('Migration — checklist completeness', () => { + it('fails when required items are unchecked', () => { + const body = validBody({migrationSection: true, migrationChecked: false, compat: 'backward'}); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.ok(errors.some((e) => e.includes('not all items checked'))); + }); + + it('passes when all items checked + backward-compatible', () => { + const body = validBody({migrationSection: true, migrationChecked: true, compat: 'backward'}); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.deepEqual(errors, []); + }); + + it('passes when all items checked + NOT backward-compatible + notes filled', () => { + const body = validBody({ + migrationSection: true, + migrationChecked: true, + compat: 'breaking', + notes: 'Column X removed. Run migration before deploying.' + }); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.deepEqual(errors, []); + }); + }); + + describe('Migration — compatibility selection', () => { + it('fails when no compat option is selected', () => { + const body = validBody({migrationSection: true, migrationChecked: true, compat: null}); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.ok(errors.some((e) => e.includes('Migration compatibility not specified'))); + }); + + it('fails when both compat options are selected', () => { + const body = validBody({migrationSection: true, migrationChecked: true, compat: 'both'}); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.ok(errors.some((e) => e.includes('Both migration compatibility'))); + }); + }); + + describe('NOT backward-compatible → Notes must have content', () => { + it('fails when breaking compat selected but Notes section is empty', () => { + const body = validBody({migrationSection: true, migrationChecked: true, compat: 'breaking', notes: ''}); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.ok(errors.some((e) => e.includes('Notes section is empty'))); + }); + + it('fails when breaking compat selected but Notes has only HTML comments', () => { + const body = validBody({ + migrationSection: true, + migrationChecked: true, + compat: 'breaking', + notes: '' + }); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.ok(errors.some((e) => e.includes('Notes section is empty'))); + }); + + it('passes when breaking compat selected and Notes has content', () => { + const body = validBody({ + migrationSection: true, + migrationChecked: true, + compat: 'breaking', + notes: 'Column removed. Deploy migration first.' + }); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.deepEqual(errors, []); + }); + + it('does not require Notes content when backward-compatible', () => { + const body = validBody({migrationSection: true, migrationChecked: true, compat: 'backward', notes: ''}); + const files = { + migrationFilenames: ['migrations/20260420120000_add_column.php'], + testFilesWithAdditions: TEST_FILES + }; + const errors = validatePrChecklist(body, files); + assert.deepEqual(errors, []); + }); + }); + + describe('empty body', () => { + it('fails with errors for type, testing, and AI', () => { + const errors = validatePrChecklist('', {}); + assert.equal(errors.length, 3); + assert.ok(errors.some((e) => e.includes('No PR type selected'))); + assert.ok(errors.some((e) => e.includes('No testing items checked'))); + assert.ok(errors.some((e) => e.includes('AI disclosure not filled'))); + }); + }); +}); diff --git a/.github/workflows/pr-readiness-check.yml b/.github/workflows/pr-readiness-check.yml new file mode 100644 index 0000000000..9d179b0e7a --- /dev/null +++ b/.github/workflows/pr-readiness-check.yml @@ -0,0 +1,75 @@ +name: PR Readiness Checklist + +on: + pull_request: + types: [ opened, edited, reopened, synchronize, ready_for_review ] + +permissions: + contents: read + pull-requests: read + +jobs: + readiness-checklist: + name: Validate mandatory PR checklist + runs-on: ubuntu-latest + if: github.event.pull_request.draft == false + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate checklist + uses: actions/github-script@v7 + with: + script: | + const { validatePrChecklist } = require('./.github/scripts/pr-readiness-check.js'); + const pr = context.payload.pull_request; + + const labels = (pr.labels || []).map((l) => l.name); + if (labels.includes('checklist-exception')) { + core.notice('Bypassing checklist — PR has label: checklist-exception'); + return; + } + + const files = await github.paginate(github.rest.pulls.listFiles, { + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pr.number, + per_page: 100, + }); + + const migrationFilenames = files + .map((f) => f.filename) + .filter((name) => name.startsWith('migrations/') && name !== 'migrations/AbstractMatecatMigration.php'); + + const testFilesWithAdditions = files + .filter((f) => f.filename.startsWith('tests/') && f.additions > 0) + .map((f) => f.filename); + + const errors = validatePrChecklist(pr.body || '', { migrationFilenames, testFilesWithAdditions }); + + if (errors.length > 0) { + core.setFailed( + [ + 'PR readiness checklist incomplete:', + '', + ...errors, + '', + 'Update the PR body checklist. To bypass, apply label: checklist-exception', + ].join('\n'), + ); + } + + readiness-tests: + name: PR checklist script tests + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '24' + + - name: Run tests + run: node --test .github/scripts/pr-readiness-check.test.js From d513920bb871dd8a6cf5ddcac9e56f38315b42e4 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 17:33:30 +0200 Subject: [PATCH 06/22] =?UTF-8?q?=F0=9F=93=9D=20docs(pr-template):=20simpl?= =?UTF-8?q?ify=20AI=20usage=20disclosure=20instructions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - update instructions to only require naming the AI agent/tool used - adjust example to remove implementation + test generation details 🐛 fix(pr-checks): ensure comments are fully removed in section validation - implement loop to repeatedly strip nested HTML comments in `pr-readiness-check.js` 🔧 chore(tests): exclude `.github/scripts` from jest transformations - update `jest.config.js` to add `.github/scripts/` to `transformIgnorePatterns` Signed-off-by: domenico --- .github/PULL_REQUEST_TEMPLATE.md | 4 ++-- .github/scripts/pr-readiness-check.js | 11 +++++++---- jest.config.js | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b0fbcfc71f..829c4f50f0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -57,8 +57,8 @@ - [ ] No AI tools were used in this PR - [ ] AI tools were used — details below - + ## Notes diff --git a/.github/scripts/pr-readiness-check.js b/.github/scripts/pr-readiness-check.js index 8cbf55502d..5007679d2d 100644 --- a/.github/scripts/pr-readiness-check.js +++ b/.github/scripts/pr-readiness-check.js @@ -46,10 +46,13 @@ function hasNonEmptySection(sectionHeader, body) { const re = new RegExp(`##\\s*${escapeRegex(sectionHeader)}\\s*\\n([\\s\\S]*?)(?=\\n##\\s|$)`); const match = body.match(re); if (!match) return false; - const content = match[1] - .replace(//g, '') - .trim(); - return content.length > 0; + let cleaned = match[1]; + let prev; + do { + prev = cleaned; + cleaned = cleaned.replace(//g, ''); + } while (cleaned !== prev); + return cleaned.trim().length > 0; } // ── Checklist items ─────────────────────────────────────────── diff --git a/jest.config.js b/jest.config.js index 08f262730c..01096f3e40 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,7 +11,7 @@ module.exports = { '!/public/api/**', '!/public/**/*.min.js', ], - transformIgnorePatterns: ['node_modules/(?!@bundled-es-modules)/'], + transformIgnorePatterns: ['node_modules/(?!@bundled-es-modules)/', '.github/scripts/'], transform: { '^.+\\.js$': 'babel-jest', '.+\\.(css|styl|less|sass|scss)$': 'jest-transform-css', From f9823a18e68fc7b80d68d474bccb60800ff2bbb7 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 17:46:57 +0200 Subject: [PATCH 07/22] =?UTF-8?q?=F0=9F=94=A7=20chore(jest):=20exclude=20.?= =?UTF-8?q?github/=20from=20Jest=20test=20discovery?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add testPathIgnorePatterns to jest.config.js so Jest does not pick up CI validation scripts that use Node built-in test runner --- jest.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/jest.config.js b/jest.config.js index 01096f3e40..d8f345fd30 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,6 +11,7 @@ module.exports = { '!/public/api/**', '!/public/**/*.min.js', ], + testPathIgnorePatterns: ['/node_modules/', '/.github/'], transformIgnorePatterns: ['node_modules/(?!@bundled-es-modules)/', '.github/scripts/'], transform: { '^.+\\.js$': 'babel-jest', From 36d6e873c2f478aa3925f99ffb86c814ca82c822 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 17:59:17 +0200 Subject: [PATCH 08/22] =?UTF-8?q?=F0=9F=94=A7=20chore(phpstan):=20exclude?= =?UTF-8?q?=20APIDoc=20build=20artifacts=20from=20analysis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add lib/View/APIDoc.php and lib/View/templates/_APIDoc.php to excludePaths in phpstan.neon (webpack build artifacts) - remove 5 stale baseline entries referencing excluded files --- phpstan-baseline.neon | 30 ------------------------------ phpstan.neon | 16 +++++++++++++++- 2 files changed, 15 insertions(+), 31 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 9fbb95c4c8..3e5217a972 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -29250,18 +29250,6 @@ parameters: count: 1 path: lib/View/API/V3/Json/QualitySummary.php - - - message: '#^Parameter \#2 \$replace of function str_replace expects array\\|string, string\|null given\.$#' - identifier: argument.type - count: 1 - path: lib/View/APIDoc.php - - - - message: '#^Parameter \#3 \$subject of function str_replace expects array\\|string, string\|false given\.$#' - identifier: argument.type - count: 1 - path: lib/View/APIDoc.php - - message: '#^Method UploadHandler\:\:_isRightExtension\(\) has parameter \$fileUp with no type specified\.$#' identifier: missingType.parameter @@ -29471,21 +29459,3 @@ parameters: identifier: missingType.iterableValue count: 1 path: lib/View/fileupload/UploadHandler.php - - - - message: '#^Parameter \#2 \$replace of function str_replace expects array\\|string, string\|null given\.$#' - identifier: argument.type - count: 1 - path: lib/View/templates/_APIDoc.php - - - - message: '#^Parameter \#3 \$subject of function str_replace expects array\\|string, string\|false given\.$#' - identifier: argument.type - count: 1 - path: lib/View/templates/_APIDoc.php - - - - message: '#^Path in require_once\(\) "\.\./\.\./lib/Bootstrap\.php" is not a file or it does not exist\.$#' - identifier: requireOnce.fileNotFound - count: 1 - path: lib/View/templates/_APIDoc.php diff --git a/phpstan.neon b/phpstan.neon index 830c5f69c9..6c861e7c72 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,4 +4,18 @@ includes: parameters: level: 8 paths: - - lib \ No newline at end of file + - lib + excludePaths: + - lib/View/APIDoc.php + - lib/View/templates/_APIDoc.php + # Flag @throws \Exception on public/protected methods when only + # a narrower exception (e.g. \InvalidArgumentException) is thrown + checkTooWideThrowTypesInProtectedAndPublicMethods: true + exceptions: + check: + # Report when code throws an exception that has no + # matching @throws tag in the method's PHPDoc + missingCheckedExceptionInThrows: true + # Report when @throws declares a broader type than + # what is actually thrown (applies to all methods) + tooWideThrowType: true \ No newline at end of file From 41e46fc589da53482d6d65e4b38f986118172184 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 18:07:25 +0200 Subject: [PATCH 09/22] =?UTF-8?q?=F0=9F=94=A7=20chore(phpstan):=20mark=20A?= =?UTF-8?q?PIDoc.php=20exclude=20path=20as=20optional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - APIDoc.php is a webpack build artifact that may not exist in CI - append (?) to its excludePaths entry so PHPStan tolerates absence --- phpstan.neon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpstan.neon b/phpstan.neon index 6c861e7c72..7f883ee9e6 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -6,7 +6,7 @@ parameters: paths: - lib excludePaths: - - lib/View/APIDoc.php + - lib/View/APIDoc.php (?) - lib/View/templates/_APIDoc.php # Flag @throws \Exception on public/protected methods when only # a narrower exception (e.g. \InvalidArgumentException) is thrown From 78c6b8910dc210c001bd1c23c3f9628e88ac05b3 Mon Sep 17 00:00:00 2001 From: Domenico Lupinetti <8008416+Ostico@users.noreply.github.com> Date: Mon, 20 Apr 2026 18:08:38 +0200 Subject: [PATCH 10/22] Update .github/workflows/pr-readiness-check.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/pr-readiness-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-readiness-check.yml b/.github/workflows/pr-readiness-check.yml index 9d179b0e7a..d65af01026 100644 --- a/.github/workflows/pr-readiness-check.yml +++ b/.github/workflows/pr-readiness-check.yml @@ -2,7 +2,7 @@ name: PR Readiness Checklist on: pull_request: - types: [ opened, edited, reopened, synchronize, ready_for_review ] + types: [ opened, edited, reopened, synchronize, ready_for_review, labeled, unlabeled ] permissions: contents: read From cd0350371fa464d30244f35026bdfead23225c0d Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 18:35:40 +0200 Subject: [PATCH 11/22] =?UTF-8?q?=F0=9F=91=B7=20ci:=20add=20conventional-c?= =?UTF-8?q?ommit=20message=20enforcement=20workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - validate PR title (required gate) and commit messages (hygiene gate) against emoji-prefixed conventional-commit spec - add commit-message-check.js with emoji↔type map, VS16 normalization, format/length/case/period validation, merge-commit skip - add 35 unit tests covering all 12 types, edge cases, and error collection - bypass via `commit-message-exception` label --- .github/scripts/commit-message-check.js | 166 +++++++++++++ .github/scripts/commit-message-check.test.js | 239 +++++++++++++++++++ .github/workflows/commit-message-check.yml | 112 +++++++++ 3 files changed, 517 insertions(+) create mode 100644 .github/scripts/commit-message-check.js create mode 100644 .github/scripts/commit-message-check.test.js create mode 100644 .github/workflows/commit-message-check.yml diff --git a/.github/scripts/commit-message-check.js b/.github/scripts/commit-message-check.js new file mode 100644 index 0000000000..299a10d78f --- /dev/null +++ b/.github/scripts/commit-message-check.js @@ -0,0 +1,166 @@ +'use strict'; + +// ── Canonical emoji ↔ type map (from conventional-commit.prompt.md) ── + +const EMOJI_TYPE_MAP = { + '\u{1F3D7}\uFE0F': 'build', // 🏗️ + '\u{1F527}': 'chore', // 🔧 + '\u{1F477}': 'ci', // 👷 + '\u{1F4DD}': 'docs', // 📝 + '\u2728': 'feat', // ✨ + '\u{1F41B}': 'fix', // 🐛 + '\u26A1\uFE0F': 'perf', // ⚡️ + '\u267B\uFE0F': 'refactor', // ♻️ + '\u23EA\uFE0F': 'revert', // ⏪️ + '\u{1F484}': 'style', // 💄 + '\u2705': 'test', // ✅ + '\u{1F310}': 'i18n', // 🌐 +}; + +const TYPE_EMOJI_MAP = Object.fromEntries( + Object.entries(EMOJI_TYPE_MAP).map(([emoji, type]) => [type, emoji]), +); + +const VALID_TYPES = Object.values(EMOJI_TYPE_MAP); + +const MAX_SUBJECT_LENGTH = 100; + +// ── Helpers ────────────────────────────────────────────────────────── + +/** + * Strip Unicode variation selector 16 (U+FE0F) for comparison. + * Some editors/terminals include it, others don't. + */ +function stripVS16(str) { + return str.replace(/\uFE0F/g, ''); +} + +/** + * Find the conventional type for a given emoji. + * Matches with or without the trailing VS16 character. + */ +function findTypeForEmoji(emoji) { + const normalized = stripVS16(emoji); + for (const [key, type] of Object.entries(EMOJI_TYPE_MAP)) { + if (stripVS16(key) === normalized) { + return type; + } + } + return null; +} + +/** + * Return true when the subject line is an auto-generated merge commit + * that should be exempt from conventional-commit rules. + */ +function isAutoGenerated(subject) { + return /^Merge /.test(subject); +} + +// ── Core validation ────────────────────────────────────────────────── + +/** + * Validate a commit message (or PR title) against the project's + * conventional-commit spec with emoji prefixes. + * + * Only the first line (subject) is validated. + * + * @param {string} message Full commit message or PR title + * @returns {{ valid: boolean, errors: string[], skipped: boolean }} + */ +function validateCommitMessage(message) { + const errors = []; + + if (!message || typeof message !== 'string') { + return {valid: false, errors: ['Empty or invalid commit message'], skipped: false}; + } + + const subject = message.split('\n')[0].trim(); + + if (!subject) { + return {valid: false, errors: ['Empty subject line'], skipped: false}; + } + + // Auto-generated merge commits are exempt + if (isAutoGenerated(subject)) { + return {valid: true, errors: [], skipped: true}; + } + + // ── Length ──────────────────────────────────────────────────── + if (subject.length > MAX_SUBJECT_LENGTH) { + errors.push( + `Subject exceeds ${MAX_SUBJECT_LENGTH} characters (${subject.length})`, + ); + } + + // ── Split emoji from rest ──────────────────────────────────── + const firstSpace = subject.indexOf(' '); + if (firstSpace === -1) { + errors.push( + 'Subject must start with an emoji followed by a space', + ); + return {valid: false, errors, skipped: false}; + } + + const emoji = subject.slice(0, firstSpace); + const rest = subject.slice(firstSpace + 1); + + // ── Emoji lookup ───────────────────────────────────────────── + const emojiType = findTypeForEmoji(emoji); + if (!emojiType) { + const validList = Object.entries(EMOJI_TYPE_MAP) + .map(([e, t]) => `${e} ${t}`) + .join(', '); + errors.push(`Unknown emoji "${emoji}". Valid: ${validList}`); + } + + // ── Parse: [()][!]: ─────────────── + const restMatch = rest.match(/^(\w+)(?:\(([^)]+)\))?(!)?: (.+)$/); + if (!restMatch) { + errors.push( + 'Format after emoji must be: [()][!]: ', + ); + return {valid: false, errors, skipped: false}; + } + + const [, type, , , description] = restMatch; + + // ── Type enum ──────────────────────────────────────────────── + if (!VALID_TYPES.includes(type)) { + errors.push( + `Invalid type "${type}". Valid: ${VALID_TYPES.join(', ')}`, + ); + } + + // ── Emoji ↔ type consistency ───────────────────────────────── + if (emojiType && VALID_TYPES.includes(type) && emojiType !== type) { + const correctEmoji = TYPE_EMOJI_MAP[type] || '?'; + errors.push( + `Emoji ${emoji} is for "${emojiType}", not "${type}". ` + + `Use ${correctEmoji} for "${type}"`, + ); + } + + // ── No capitalization ──────────────────────────────────────── + if (description && /^[A-Z]/.test(description)) { + errors.push('Description must start with a lowercase letter'); + } + + // ── No trailing period ─────────────────────────────────────── + if (description && description.endsWith('.')) { + errors.push('Description must not end with a period'); + } + + return {valid: errors.length === 0, errors, skipped: false}; +} + +module.exports = { + EMOJI_TYPE_MAP, + TYPE_EMOJI_MAP, + VALID_TYPES, + MAX_SUBJECT_LENGTH, + validateCommitMessage, + findTypeForEmoji, + isAutoGenerated, + stripVS16, +}; diff --git a/.github/scripts/commit-message-check.test.js b/.github/scripts/commit-message-check.test.js new file mode 100644 index 0000000000..93c69678ca --- /dev/null +++ b/.github/scripts/commit-message-check.test.js @@ -0,0 +1,239 @@ +'use strict'; + +const {describe, it} = require('node:test'); +const assert = require('node:assert/strict'); +const { + EMOJI_TYPE_MAP, + TYPE_EMOJI_MAP, + VALID_TYPES, + MAX_SUBJECT_LENGTH, + validateCommitMessage, + findTypeForEmoji, + isAutoGenerated, + stripVS16, +} = require('./commit-message-check.js'); + +// ── stripVS16 ───────────────────────────────────────────────── + +describe('stripVS16', () => { + it('removes VS16 from string', () => { + assert.equal(stripVS16('\u26A1\uFE0F'), '\u26A1'); + }); + + it('leaves strings without VS16 unchanged', () => { + assert.equal(stripVS16('\u2728'), '\u2728'); + }); + + it('removes multiple VS16 characters', () => { + assert.equal(stripVS16('\uFE0Fa\uFE0Fb\uFE0F'), 'ab'); + }); +}); + +// ── findTypeForEmoji ────────────────────────────────────────── + +describe('findTypeForEmoji', () => { + it('finds type for each canonical emoji', () => { + for (const [emoji, type] of Object.entries(EMOJI_TYPE_MAP)) { + assert.equal(findTypeForEmoji(emoji), type, `${emoji} should map to ${type}`); + } + }); + + it('finds type when VS16 is stripped from input', () => { + assert.equal(findTypeForEmoji('\u26A1'), 'perf'); + }); + + it('finds type when VS16 is added to input', () => { + assert.equal(findTypeForEmoji('\u2728\uFE0F'), 'feat'); + }); + + it('returns null for unknown emoji', () => { + assert.equal(findTypeForEmoji('\u{1F600}'), null); + }); +}); + +// ── isAutoGenerated ─────────────────────────────────────────── + +describe('isAutoGenerated', () => { + it('detects merge commit', () => { + assert.equal(isAutoGenerated('Merge branch \'main\' into feature'), true); + }); + + it('detects merge pull request', () => { + assert.equal(isAutoGenerated('Merge pull request #42 from org/branch'), true); + }); + + it('rejects normal message', () => { + assert.equal(isAutoGenerated('\u2728 feat: add login'), false); + }); +}); + +// ── EMOJI_TYPE_MAP / TYPE_EMOJI_MAP consistency ─────────────── + +describe('map consistency', () => { + it('TYPE_EMOJI_MAP is the reverse of EMOJI_TYPE_MAP', () => { + for (const [emoji, type] of Object.entries(EMOJI_TYPE_MAP)) { + assert.equal(TYPE_EMOJI_MAP[type], emoji); + } + }); + + it('VALID_TYPES contains all map values', () => { + const fromMap = Object.values(EMOJI_TYPE_MAP).sort(); + assert.deepEqual([...VALID_TYPES].sort(), fromMap); + }); + + it('has 12 type entries', () => { + assert.equal(VALID_TYPES.length, 12); + }); +}); + +// ── validateCommitMessage – valid messages ──────────────────── + +describe('validateCommitMessage – valid', () => { + it('simple feat', () => { + const r = validateCommitMessage('\u2728 feat: add user login'); + assert.equal(r.valid, true); + assert.equal(r.errors.length, 0); + assert.equal(r.skipped, false); + }); + + it('fix with scope', () => { + const r = validateCommitMessage('\u{1F41B} fix(auth): handle expired token'); + assert.equal(r.valid, true); + }); + + it('breaking change with !', () => { + const r = validateCommitMessage('\u2728 feat(api)!: remove legacy endpoint'); + assert.equal(r.valid, true); + }); + + it('all 12 types accepted', () => { + const messages = [ + ['\u{1F3D7}\uFE0F', 'build'], + ['\u{1F527}', 'chore'], + ['\u{1F477}', 'ci'], + ['\u{1F4DD}', 'docs'], + ['\u2728', 'feat'], + ['\u{1F41B}', 'fix'], + ['\u26A1\uFE0F', 'perf'], + ['\u267B\uFE0F', 'refactor'], + ['\u23EA\uFE0F', 'revert'], + ['\u{1F484}', 'style'], + ['\u2705', 'test'], + ['\u{1F310}', 'i18n'], + ]; + for (const [emoji, type] of messages) { + const r = validateCommitMessage(`${emoji} ${type}: do something`); + assert.equal(r.valid, true, `${emoji} ${type} should be valid`); + } + }); + + it('merge commit is skipped', () => { + const r = validateCommitMessage('Merge branch \'main\' into feature'); + assert.equal(r.valid, true); + assert.equal(r.skipped, true); + assert.equal(r.errors.length, 0); + }); + + it('multi-line message validates only subject', () => { + const r = validateCommitMessage('\u{1F41B} fix: resolve crash\n\nDetailed body here.'); + assert.equal(r.valid, true); + }); + + it('exactly 100 characters is valid', () => { + const desc = 'a'.repeat(100 - '\u2728 feat: '.length); + const r = validateCommitMessage(`\u2728 feat: ${desc}`); + assert.equal(r.valid, true); + }); + + it('emoji without VS16 matches type with VS16 in map', () => { + const r = validateCommitMessage('\u26A1 perf: optimize query'); + assert.equal(r.valid, true); + }); + + it('emoji with VS16 matches type without VS16 in map', () => { + const r = validateCommitMessage('\u2728\uFE0F feat: add feature'); + assert.equal(r.valid, true); + }); +}); + +// ── validateCommitMessage – invalid messages ────────────────── + +describe('validateCommitMessage – invalid', () => { + it('empty message', () => { + const r = validateCommitMessage(''); + assert.equal(r.valid, false); + assert.ok(r.errors[0].includes('Empty')); + }); + + it('null message', () => { + const r = validateCommitMessage(null); + assert.equal(r.valid, false); + }); + + it('undefined message', () => { + const r = validateCommitMessage(undefined); + assert.equal(r.valid, false); + }); + + it('no space after emoji', () => { + const r = validateCommitMessage('\u2728feat: add login'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('Format after emoji'))); + }); + + it('unknown emoji', () => { + const r = validateCommitMessage('\u{1F600} feat: add smile'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('Unknown emoji'))); + }); + + it('invalid type', () => { + const r = validateCommitMessage('\u2728 feature: add login'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('Invalid type'))); + }); + + it('emoji-type mismatch', () => { + const r = validateCommitMessage('\u{1F41B} feat: add login'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('not "feat"'))); + }); + + it('capitalized description', () => { + const r = validateCommitMessage('\u2728 feat: Add user login'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('lowercase'))); + }); + + it('trailing period', () => { + const r = validateCommitMessage('\u2728 feat: add user login.'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('period'))); + }); + + it('exceeds 100 characters', () => { + const desc = 'a'.repeat(101 - '\u2728 feat: '.length); + const r = validateCommitMessage(`\u2728 feat: ${desc}`); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('exceeds'))); + }); + + it('missing colon after type', () => { + const r = validateCommitMessage('\u2728 feat add login'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('Format'))); + }); + + it('emoji only, no rest', () => { + const r = validateCommitMessage('\u2728'); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('space'))); + }); + + it('collects multiple errors', () => { + const desc = 'A'.repeat(95); + const r = validateCommitMessage(`\u{1F41B} feat: ${desc}.`); + assert.equal(r.valid, false); + assert.ok(r.errors.length >= 3, `expected >= 3 errors, got ${r.errors.length}: ${r.errors.join('; ')}`); + }); +}); diff --git a/.github/workflows/commit-message-check.yml b/.github/workflows/commit-message-check.yml new file mode 100644 index 0000000000..532bc6dd53 --- /dev/null +++ b/.github/workflows/commit-message-check.yml @@ -0,0 +1,112 @@ +name: Commit Message Check + +on: + pull_request: + types: [opened, edited, reopened, synchronize] + +permissions: + contents: read + pull-requests: read + +jobs: + pr-title: + name: Validate PR title (required) + runs-on: ubuntu-latest + if: github.event.pull_request.draft == false + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate PR title + uses: actions/github-script@v7 + with: + script: | + const { validateCommitMessage } = require('./.github/scripts/commit-message-check.js'); + const pr = context.payload.pull_request; + + const labels = (pr.labels || []).map((l) => l.name); + if (labels.includes('commit-message-exception')) { + core.notice('Bypassing PR title check — label: commit-message-exception'); + return; + } + + const result = validateCommitMessage(pr.title); + if (!result.valid) { + const lines = [ + '## PR title does not follow conventional-commit format', + '', + 'Expected: ` [()][!]: `', + '', + '**Errors:**', + ...result.errors.map((e) => `- ${e}`), + '', + 'See `.github/prompts/conventional-commit.prompt.md` for the full spec.', + ]; + core.setFailed(lines.join('\n')); + } + + commit-messages: + name: Validate commit messages (hygiene) + runs-on: ubuntu-latest + if: github.event.pull_request.draft == false + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate commits + uses: actions/github-script@v7 + with: + script: | + const { validateCommitMessage } = require('./.github/scripts/commit-message-check.js'); + const pr = context.payload.pull_request; + + const labels = (pr.labels || []).map((l) => l.name); + if (labels.includes('commit-message-exception')) { + core.notice('Bypassing commit message check — label: commit-message-exception'); + return; + } + + const commits = await github.paginate(github.rest.pulls.listCommits, { + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pr.number, + per_page: 100, + }); + + const failures = []; + for (const c of commits) { + const msg = c.commit.message; + const result = validateCommitMessage(msg); + if (result.skipped) continue; + if (!result.valid) { + const sha = c.sha.slice(0, 7); + failures.push(`\`${sha}\`: ${result.errors.join('; ')}`); + } + } + + if (failures.length > 0) { + const lines = [ + `## ${failures.length} commit message(s) violate conventional-commit format`, + '', + ...failures.map((f) => `- ${f}`), + '', + '> This is a hygiene gate. Fix via interactive rebase or amend.', + '> Add label `commit-message-exception` to bypass.', + ]; + core.setFailed(lines.join('\n')); + } + + commit-message-tests: + name: Unit tests for commit-message-check + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '24' + + - name: Run tests + run: node --test .github/scripts/commit-message-check.test.js From b67d10537cf2afb634eb9e7440dd1052cd64b676 Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 20 Apr 2026 18:49:23 +0200 Subject: [PATCH 12/22] =?UTF-8?q?=F0=9F=90=9B=20fix(ci):=20relax=20commit?= =?UTF-8?q?=20message=20check=20for=20Copilot=20and=20GitHub=20web=20edits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add requireEmoji option (default true) to validateCommitMessage so PR title stays strict while commit messages accept emoji-less conventional-commit format (e.g. "docs(qa): ...") - auto-skip GitHub web UI patterns (Update/Create/Delete/Rename) in relaxed mode - update workflow to pass requireEmoji: false for commit-messages job - add 18 new tests for relaxed mode and isGitHubWebEdit (53 total) --- .github/scripts/commit-message-check.js | 62 +++++------ .github/scripts/commit-message-check.test.js | 106 ++++++++++++++++++- .github/workflows/commit-message-check.yml | 2 +- 3 files changed, 134 insertions(+), 36 deletions(-) diff --git a/.github/scripts/commit-message-check.js b/.github/scripts/commit-message-check.js index 299a10d78f..1023a7559f 100644 --- a/.github/scripts/commit-message-check.js +++ b/.github/scripts/commit-message-check.js @@ -49,26 +49,17 @@ function findTypeForEmoji(emoji) { return null; } -/** - * Return true when the subject line is an auto-generated merge commit - * that should be exempt from conventional-commit rules. - */ function isAutoGenerated(subject) { return /^Merge /.test(subject); } +function isGitHubWebEdit(subject) { + return /^(Update|Create|Delete|Rename) .+/.test(subject); +} + // ── Core validation ────────────────────────────────────────────────── -/** - * Validate a commit message (or PR title) against the project's - * conventional-commit spec with emoji prefixes. - * - * Only the first line (subject) is validated. - * - * @param {string} message Full commit message or PR title - * @returns {{ valid: boolean, errors: string[], skipped: boolean }} - */ -function validateCommitMessage(message) { +function validateCommitMessage(message, {requireEmoji = true} = {}) { const errors = []; if (!message || typeof message !== 'string') { @@ -81,72 +72,74 @@ function validateCommitMessage(message) { return {valid: false, errors: ['Empty subject line'], skipped: false}; } - // Auto-generated merge commits are exempt if (isAutoGenerated(subject)) { return {valid: true, errors: [], skipped: true}; } - // ── Length ──────────────────────────────────────────────────── + if (!requireEmoji && isGitHubWebEdit(subject)) { + return {valid: true, errors: [], skipped: true}; + } + if (subject.length > MAX_SUBJECT_LENGTH) { errors.push( `Subject exceeds ${MAX_SUBJECT_LENGTH} characters (${subject.length})`, ); } - // ── Split emoji from rest ──────────────────────────────────── const firstSpace = subject.indexOf(' '); if (firstSpace === -1) { errors.push( - 'Subject must start with an emoji followed by a space', + requireEmoji + ? 'Subject must start with an emoji followed by a space' + : 'Subject must contain a space', ); return {valid: false, errors, skipped: false}; } - const emoji = subject.slice(0, firstSpace); + const firstToken = subject.slice(0, firstSpace); const rest = subject.slice(firstSpace + 1); - // ── Emoji lookup ───────────────────────────────────────────── - const emojiType = findTypeForEmoji(emoji); - if (!emojiType) { + const emojiType = findTypeForEmoji(firstToken); + const hasEmoji = emojiType !== null; + + if (requireEmoji && !hasEmoji) { const validList = Object.entries(EMOJI_TYPE_MAP) .map(([e, t]) => `${e} ${t}`) .join(', '); - errors.push(`Unknown emoji "${emoji}". Valid: ${validList}`); + errors.push(`Unknown emoji "${firstToken}". Valid: ${validList}`); } - // ── Parse: [()][!]: ─────────────── - const restMatch = rest.match(/^(\w+)(?:\(([^)]+)\))?(!)?: (.+)$/); - if (!restMatch) { + const textToParse = hasEmoji ? rest : subject; + const formatMatch = textToParse.match(/^(\w+)(?:\(([^)]+)\))?(!)?: (.+)$/); + if (!formatMatch) { errors.push( - 'Format after emoji must be: [()][!]: ', + hasEmoji + ? 'Format after emoji must be: [()][!]: ' + : 'Format must be: [()][!]: ', ); return {valid: false, errors, skipped: false}; } - const [, type, , , description] = restMatch; + const [, type, , , description] = formatMatch; - // ── Type enum ──────────────────────────────────────────────── if (!VALID_TYPES.includes(type)) { errors.push( `Invalid type "${type}". Valid: ${VALID_TYPES.join(', ')}`, ); } - // ── Emoji ↔ type consistency ───────────────────────────────── - if (emojiType && VALID_TYPES.includes(type) && emojiType !== type) { + if (hasEmoji && emojiType && VALID_TYPES.includes(type) && emojiType !== type) { const correctEmoji = TYPE_EMOJI_MAP[type] || '?'; errors.push( - `Emoji ${emoji} is for "${emojiType}", not "${type}". ` + + `Emoji ${firstToken} is for "${emojiType}", not "${type}". ` + `Use ${correctEmoji} for "${type}"`, ); } - // ── No capitalization ──────────────────────────────────────── if (description && /^[A-Z]/.test(description)) { errors.push('Description must start with a lowercase letter'); } - // ── No trailing period ─────────────────────────────────────── if (description && description.endsWith('.')) { errors.push('Description must not end with a period'); } @@ -162,5 +155,6 @@ module.exports = { validateCommitMessage, findTypeForEmoji, isAutoGenerated, + isGitHubWebEdit, stripVS16, }; diff --git a/.github/scripts/commit-message-check.test.js b/.github/scripts/commit-message-check.test.js index 93c69678ca..6128c8170b 100644 --- a/.github/scripts/commit-message-check.test.js +++ b/.github/scripts/commit-message-check.test.js @@ -10,6 +10,7 @@ const { validateCommitMessage, findTypeForEmoji, isAutoGenerated, + isGitHubWebEdit, stripVS16, } = require('./commit-message-check.js'); @@ -178,7 +179,7 @@ describe('validateCommitMessage – invalid', () => { it('no space after emoji', () => { const r = validateCommitMessage('\u2728feat: add login'); assert.equal(r.valid, false); - assert.ok(r.errors.some(e => e.includes('Format after emoji'))); + assert.ok(r.errors.some(e => e.includes('Format'))); }); it('unknown emoji', () => { @@ -237,3 +238,106 @@ describe('validateCommitMessage – invalid', () => { assert.ok(r.errors.length >= 3, `expected >= 3 errors, got ${r.errors.length}: ${r.errors.join('; ')}`); }); }); + +// ── isGitHubWebEdit ─────────────────────────────────────────── + +describe('isGitHubWebEdit', () => { + it('detects Update pattern', () => { + assert.equal(isGitHubWebEdit('Update pr-readiness-check.yml'), true); + }); + + it('detects Create pattern', () => { + assert.equal(isGitHubWebEdit('Create new-file.md'), true); + }); + + it('detects Delete pattern', () => { + assert.equal(isGitHubWebEdit('Delete old-file.js'), true); + }); + + it('detects Rename pattern', () => { + assert.equal(isGitHubWebEdit('Rename foo.js to bar.js'), true); + }); + + it('rejects normal commit', () => { + assert.equal(isGitHubWebEdit('fix: update login flow'), false); + }); + + it('rejects partial match at wrong position', () => { + assert.equal(isGitHubWebEdit('Please Update the file'), false); + }); +}); + +// ── validateCommitMessage – relaxed mode (requireEmoji: false) ─ + +describe('validateCommitMessage – relaxed mode', () => { + const relaxed = {requireEmoji: false}; + + it('accepts emoji-less conventional commit', () => { + const r = validateCommitMessage('docs(qa): add full phpdoc for shared ICU detector', relaxed); + assert.equal(r.valid, true); + assert.equal(r.skipped, false); + }); + + it('accepts emoji-less commit with scope and !', () => { + const r = validateCommitMessage('feat(api)!: remove legacy endpoint', relaxed); + assert.equal(r.valid, true); + }); + + it('accepts emoji-less commit without scope', () => { + const r = validateCommitMessage('refactor: share ICU source detection logic across LQA flows', relaxed); + assert.equal(r.valid, true); + }); + + it('still accepts emoji commits in relaxed mode', () => { + const r = validateCommitMessage('\u2728 feat: add user login', relaxed); + assert.equal(r.valid, true); + }); + + it('still validates emoji-type consistency in relaxed mode', () => { + const r = validateCommitMessage('\u{1F41B} feat: wrong emoji', relaxed); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('not "feat"'))); + }); + + it('skips GitHub web edit in relaxed mode', () => { + const r = validateCommitMessage('Update .github/workflows/pr-readiness-check.yml', relaxed); + assert.equal(r.valid, true); + assert.equal(r.skipped, true); + }); + + it('does NOT skip GitHub web edit in strict mode', () => { + const r = validateCommitMessage('Update .github/workflows/pr-readiness-check.yml'); + assert.equal(r.valid, false); + }); + + it('still rejects invalid type in relaxed mode', () => { + const r = validateCommitMessage('feature: add login', relaxed); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('Invalid type'))); + }); + + it('still rejects capitalized description in relaxed mode', () => { + const r = validateCommitMessage('fix: Update broken thing', relaxed); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('lowercase'))); + }); + + it('still rejects trailing period in relaxed mode', () => { + const r = validateCommitMessage('fix: update broken thing.', relaxed); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('period'))); + }); + + it('still rejects over-length in relaxed mode', () => { + const desc = 'a'.repeat(96); + const r = validateCommitMessage(`fix: ${desc}`, relaxed); + assert.equal(r.valid, false); + assert.ok(r.errors.some(e => e.includes('exceeds'))); + }); + + it('skips merge commits in relaxed mode', () => { + const r = validateCommitMessage('Merge branch \'main\' into feature', relaxed); + assert.equal(r.valid, true); + assert.equal(r.skipped, true); + }); +}); diff --git a/.github/workflows/commit-message-check.yml b/.github/workflows/commit-message-check.yml index 532bc6dd53..2f39758ac7 100644 --- a/.github/workflows/commit-message-check.yml +++ b/.github/workflows/commit-message-check.yml @@ -76,7 +76,7 @@ jobs: const failures = []; for (const c of commits) { const msg = c.commit.message; - const result = validateCommitMessage(msg); + const result = validateCommitMessage(msg, {requireEmoji: false}); if (result.skipped) continue; if (!result.valid) { const sha = c.sha.slice(0, 7); From 8c40af62555b968c5b356d2c84a83c591c98f27a Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 16:01:48 +0200 Subject: [PATCH 13/22] =?UTF-8?q?=F0=9F=94=A7=20chore(phpstan):=20add=20@t?= =?UTF-8?q?hrows=20\Throwable=20to=20FastAnalysis=20transaction=20callers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Declare checked exceptions on all methods using Database::transaction(), which re-throws \Throwable on rollback. Remove 2 stale baseline entries now covered by the broader @throws declaration. --- lib/Model/DataAccess/Database.php | 2 ++ .../AsyncTasks/Workers/Analysis/FastAnalysis.php | 8 ++++---- phpstan-baseline.neon | 12 ------------ 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/lib/Model/DataAccess/Database.php b/lib/Model/DataAccess/Database.php index b302f129bd..9537be4e64 100644 --- a/lib/Model/DataAccess/Database.php +++ b/lib/Model/DataAccess/Database.php @@ -185,6 +185,8 @@ public function rollback(): void /** * @Override * {@inheritdoc} + * + * @throws \Throwable Re-throws the original exception after rollback */ public function transaction(callable $callback): mixed { diff --git a/lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php b/lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php index c2f2f7d181..0d2b614db8 100644 --- a/lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php +++ b/lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php @@ -137,7 +137,7 @@ protected function __construct(string $configFile, ?string $contextIndex = null) * @param array|null $args * * @return void - * @throws Exception + * @throws \Throwable */ public function main(array $args = null): void { @@ -410,7 +410,7 @@ public function cleanShutDown(): void } /** - * @throws ReflectionException + * @throws \Throwable */ protected function _updateProject($pid, $status): void { @@ -476,7 +476,7 @@ protected function _executeInsert($tuple_list, $bind_values): void * @param array|null $subfiltering_handlers * @param bool $icu_enabled * @return int - * @throws Exception + * @throws \Throwable */ protected function _insertFastAnalysis( ProjectStruct $projectStruct, @@ -888,7 +888,7 @@ protected function _getQueueAddressesByPriority(int $queueLen, int $id_mt_engine * @param int $limit * * @return array - * @throws ReflectionException + * @throws \Throwable */ protected function _getLockProjectForVolumeAnalysis(int $limit = 1): array { diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 10bd3f0c85..91274019ba 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -19818,12 +19818,6 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php - - - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:_getLockProjectForVolumeAnalysis\(\) throws checked exception PDOException but it''s missing from the PHPDoc @throws tag\.$#' - identifier: missingType.checkedException - count: 4 - path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php - - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:_getSegmentsForFastVolumeAnalysis\(\) has parameter \$pid with no type specified\.$#' identifier: missingType.parameter @@ -19908,12 +19902,6 @@ parameters: count: 1 path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php - - - message: '#^Method Utils\\AsyncTasks\\Workers\\Analysis\\FastAnalysis\:\:main\(\) throws checked exception TypeError but it''s missing from the PHPDoc @throws tag\.$#' - identifier: missingType.checkedException - count: 1 - path: lib/Utils/AsyncTasks/Workers/Analysis/FastAnalysis.php - - message: '#^PHPDoc tag @var has invalid value \(\$myMemory MyMemory\)\: Unexpected token "\$myMemory", expected type at offset 20 on line 2$#' identifier: phpDoc.parseError From 9f8cde0d488233a7b1f31c2182ed8a1050f80fa4 Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 16:17:19 +0200 Subject: [PATCH 14/22] =?UTF-8?q?=F0=9F=91=B7=20ci(test-guard):=20add=20te?= =?UTF-8?q?st=20adequacy=20gate=20workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - run PHPUnit with Xdebug coverage on pull requests - invoke ostico/test-guard@v1.0.1 with 80% coverage threshold - enable AI-powered test adequacy analysis --- .github/workflows/test-guard.yml | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/workflows/test-guard.yml diff --git a/.github/workflows/test-guard.yml b/.github/workflows/test-guard.yml new file mode 100644 index 0000000000..b262ca4355 --- /dev/null +++ b/.github/workflows/test-guard.yml @@ -0,0 +1,47 @@ +name: Test Guard + +on: + pull_request: + types: [ opened, synchronize ] + +permissions: + contents: read + pull-requests: write + statuses: write + +jobs: + test-guard: + name: Test adequacy gate + runs-on: ubuntu-latest + if: github.event.pull_request.draft == false + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: '${{ secrets.CI_USER_TOKEN_MATECATBOT || github.token }}' + submodules: recursive + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + extensions: curl, gd, intl, mbstring, readline, xml, zip, json, redis + coverage: xdebug + tools: composer + + - name: Install dependencies + run: composer install --no-interaction --prefer-dist + + - name: Run PHPUnit with coverage + run: | + vendor/bin/phpunit \ + --exclude-group=ExternalServices \ + --coverage-clover=coverage.xml + + - name: Test Guard + uses: ostico/test-guard@v1.0.1 + with: + coverage-file: coverage.xml + coverage-threshold: '80' + ai-enabled: 'true' From aaef9ffe81d35d0d123ec4ffe6ff912355f06a94 Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 16:42:48 +0200 Subject: [PATCH 15/22] =?UTF-8?q?=F0=9F=91=B7=20ci(test-guard):=20integrat?= =?UTF-8?q?e=20test-guard=20into=20CI/CD=20pipeline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - move test-guard from standalone workflow into _ci-cd.yml as a PR-only job that consumes coverage from the tests job - extract coverage.xml from test container via docker cp and upload as "coverage-report" artifact - add pull-requests:write and statuses:write permissions to aws_dev.yml and aws_prod.yml callers - set per-job permissions in _ci-cd.yml (test-guard needs write access, other jobs only need contents:read) - update docker submodule (php-pcov + --coverage-clover) --- .github/workflows/_ci-cd.yml | 55 ++++++++++++++++++++++++++++++-- .github/workflows/aws_dev.yml | 2 ++ .github/workflows/aws_prod.yml | 2 ++ .github/workflows/test-guard.yml | 47 --------------------------- docker | 2 +- 5 files changed, 58 insertions(+), 50 deletions(-) delete mode 100644 .github/workflows/test-guard.yml diff --git a/.github/workflows/_ci-cd.yml b/.github/workflows/_ci-cd.yml index 690e4e674e..b7c3b69590 100644 --- a/.github/workflows/_ci-cd.yml +++ b/.github/workflows/_ci-cd.yml @@ -33,8 +33,9 @@ env: # Opt into Node.js 24 for all JavaScript-based actions (checkout@v4, etc.) # Remove once actions/checkout@v5 is released with native Node 24 support. FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true -permissions: - contents: read +# Permissions are set per-job (not workflow-level) because test-guard +# requires pull-requests:write while other jobs only need contents:read. +# The calling workflow (aws_dev.yml / aws_prod.yml) sets the ceiling. jobs: # ─────────────────────────────────────────────────────────────────────────── # JOB 1 – tests @@ -46,6 +47,8 @@ jobs: name: Run tests runs-on: ubuntu-24.04 environment: ci_test + permissions: + contents: read steps: # Checkout the repo including all git submodules. # Falls back to the built-in github.token for fork PRs where @@ -74,6 +77,19 @@ jobs: docker compose -f docker/docker-compose-ci.yml build test-node > /dev/null 2>&1 # Run tests — exit code propagated to the workflow step docker compose -f docker/docker-compose-ci.yml up test-node --exit-code-from test-node || exit 1 + + # ── Coverage artifact (consumed by test-guard job) ────────────────── + - name: Extract coverage report from test container + run: | + CONTAINER_ID=$(docker compose -f docker/docker-compose-ci.yml ps -aq test-node | head -1) + docker cp "$CONTAINER_ID":/var/www/matecat/coverage.xml ./coverage.xml + + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: coverage.xml + retention-days: 7 # ─────────────────────────────────────────────────────────────────────────── # JOB 2 – deploy (only when should_deploy is true) # @@ -89,6 +105,8 @@ jobs: name: Deploy to ${{ inputs.deploy_environment }} runs-on: ubuntu-24.04 environment: ${{ inputs.deploy_environment }} + permissions: + contents: read if: ${{ inputs.should_deploy }} needs: - tests @@ -163,3 +181,36 @@ jobs: # ── :latest aliases together ────────────────────────────────────── docker push $WEB_REPO:latest docker push $DAEMONS_REPO:latest + + # ─────────────────────────────────────────────────────────────────────────── + # JOB – test-guard (PR only) + # + # Downloads the "coverage-report" artifact produced by the tests job and + # runs ostico/test-guard to evaluate test adequacy on changed files. + # ─────────────────────────────────────────────────────────────────────────── + test-guard: + name: Test adequacy gate + runs-on: ubuntu-latest + needs: tests + if: github.event_name == 'pull_request' + permissions: + contents: read + pull-requests: write + statuses: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Download coverage artifact + uses: actions/download-artifact@v4 + with: + name: coverage-report + + - name: Test Guard + uses: ostico/test-guard@v1.0.1 + with: + coverage-file: coverage.xml + coverage-threshold: '80' + ai-enabled: 'true' diff --git a/.github/workflows/aws_dev.yml b/.github/workflows/aws_dev.yml index 907bd9b7b8..9820c8f367 100644 --- a/.github/workflows/aws_dev.yml +++ b/.github/workflows/aws_dev.yml @@ -9,6 +9,8 @@ on: branches: [ "develop" ] permissions: contents: read + pull-requests: write + statuses: write jobs: ci-cd: uses: ./.github/workflows/_ci-cd.yml diff --git a/.github/workflows/aws_prod.yml b/.github/workflows/aws_prod.yml index 6fbe2d5550..d843f4c153 100644 --- a/.github/workflows/aws_prod.yml +++ b/.github/workflows/aws_prod.yml @@ -15,6 +15,8 @@ on: branches: [ "master" ] permissions: contents: read + pull-requests: write + statuses: write jobs: ci-cd: uses: ./.github/workflows/_ci-cd.yml diff --git a/.github/workflows/test-guard.yml b/.github/workflows/test-guard.yml deleted file mode 100644 index b262ca4355..0000000000 --- a/.github/workflows/test-guard.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Test Guard - -on: - pull_request: - types: [ opened, synchronize ] - -permissions: - contents: read - pull-requests: write - statuses: write - -jobs: - test-guard: - name: Test adequacy gate - runs-on: ubuntu-latest - if: github.event.pull_request.draft == false - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - token: '${{ secrets.CI_USER_TOKEN_MATECATBOT || github.token }}' - submodules: recursive - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.3' - extensions: curl, gd, intl, mbstring, readline, xml, zip, json, redis - coverage: xdebug - tools: composer - - - name: Install dependencies - run: composer install --no-interaction --prefer-dist - - - name: Run PHPUnit with coverage - run: | - vendor/bin/phpunit \ - --exclude-group=ExternalServices \ - --coverage-clover=coverage.xml - - - name: Test Guard - uses: ostico/test-guard@v1.0.1 - with: - coverage-file: coverage.xml - coverage-threshold: '80' - ai-enabled: 'true' diff --git a/docker b/docker index c8ac253cd2..f67c79dde7 160000 --- a/docker +++ b/docker @@ -1 +1 @@ -Subproject commit c8ac253cd2993e88088ea23777f05bae0fabe6b6 +Subproject commit f67c79dde7d8a9b0778daa414afea2410795c3a2 From cb738f304399e25f27df09f13a735b8c690a6266 Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 16:50:56 +0200 Subject: [PATCH 16/22] =?UTF-8?q?=F0=9F=91=B7=20ci(test-guard):=20bump=20o?= =?UTF-8?q?stico/test-guard=20to=20v1.0.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/_ci-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_ci-cd.yml b/.github/workflows/_ci-cd.yml index b7c3b69590..4523a60739 100644 --- a/.github/workflows/_ci-cd.yml +++ b/.github/workflows/_ci-cd.yml @@ -209,7 +209,7 @@ jobs: name: coverage-report - name: Test Guard - uses: ostico/test-guard@v1.0.1 + uses: ostico/test-guard@v1.0.3 with: coverage-file: coverage.xml coverage-threshold: '80' From 1025eaca95490b40ece0c13cebc3e3cb79da5791 Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 18:07:17 +0200 Subject: [PATCH 17/22] =?UTF-8?q?=F0=9F=91=B7=20ci(test-guard):=20bump=20o?= =?UTF-8?q?stico/test-guard=20to=20v1.0.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/_ci-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_ci-cd.yml b/.github/workflows/_ci-cd.yml index 4523a60739..615684a3cf 100644 --- a/.github/workflows/_ci-cd.yml +++ b/.github/workflows/_ci-cd.yml @@ -209,7 +209,7 @@ jobs: name: coverage-report - name: Test Guard - uses: ostico/test-guard@v1.0.3 + uses: ostico/test-guard@v1.0.5 with: coverage-file: coverage.xml coverage-threshold: '80' From 7e832f5d5a4d2e4ec9304aadb0d1be7e4d0ccfce Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 18:39:21 +0200 Subject: [PATCH 18/22] =?UTF-8?q?=F0=9F=91=B7=20ci:=20add=20models:read=20?= =?UTF-8?q?permission=20to=20=5Fci-cd.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - grant models:read permission in PR workflows for repository access Signed-off-by: domenico --- .github/workflows/_ci-cd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/_ci-cd.yml b/.github/workflows/_ci-cd.yml index 615684a3cf..27d5c9bc90 100644 --- a/.github/workflows/_ci-cd.yml +++ b/.github/workflows/_ci-cd.yml @@ -197,6 +197,7 @@ jobs: contents: read pull-requests: write statuses: write + models: read steps: - name: Checkout repository uses: actions/checkout@v4 From d749bd89f7e22325dba690ba8d54c6dad3d292e6 Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 18:47:21 +0200 Subject: [PATCH 19/22] =?UTF-8?q?=F0=9F=90=9B=20fix(ci):=20add=20models:re?= =?UTF-8?q?ad=20permission=20for=20test-guard=20AI=20analysis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/aws_dev.yml | 1 + .github/workflows/aws_prod.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/aws_dev.yml b/.github/workflows/aws_dev.yml index 9820c8f367..e46798bbf6 100644 --- a/.github/workflows/aws_dev.yml +++ b/.github/workflows/aws_dev.yml @@ -11,6 +11,7 @@ permissions: contents: read pull-requests: write statuses: write + models: read jobs: ci-cd: uses: ./.github/workflows/_ci-cd.yml diff --git a/.github/workflows/aws_prod.yml b/.github/workflows/aws_prod.yml index d843f4c153..f56e0fc0db 100644 --- a/.github/workflows/aws_prod.yml +++ b/.github/workflows/aws_prod.yml @@ -17,6 +17,7 @@ permissions: contents: read pull-requests: write statuses: write + models: read jobs: ci-cd: uses: ./.github/workflows/_ci-cd.yml From fc04829ac5c32b51df8c4a585f68de54b005c5d7 Mon Sep 17 00:00:00 2001 From: domenico Date: Tue, 21 Apr 2026 18:52:29 +0200 Subject: [PATCH 20/22] =?UTF-8?q?=F0=9F=91=B7=20ci(test-guard):=20switch?= =?UTF-8?q?=20to=20floating=20tag=20ostico/test-guard@v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/_ci-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_ci-cd.yml b/.github/workflows/_ci-cd.yml index 27d5c9bc90..9e8b103a60 100644 --- a/.github/workflows/_ci-cd.yml +++ b/.github/workflows/_ci-cd.yml @@ -210,7 +210,7 @@ jobs: name: coverage-report - name: Test Guard - uses: ostico/test-guard@v1.0.5 + uses: ostico/test-guard@v1 with: coverage-file: coverage.xml coverage-threshold: '80' From e24019a82911714405577b64050776ec3c94adc2 Mon Sep 17 00:00:00 2001 From: domenico Date: Wed, 22 Apr 2026 10:35:57 +0200 Subject: [PATCH 21/22] =?UTF-8?q?=F0=9F=91=B7=20ci(permissions):=20replace?= =?UTF-8?q?=20statuses:write=20with=20checks:write=20in=20workflows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - update permissions in _ci-cd.yml, aws_prod.yml, and aws_dev.yml - align with GitHub's recommended permissions model Signed-off-by: domenico --- .github/workflows/_ci-cd.yml | 2 +- .github/workflows/aws_dev.yml | 2 +- .github/workflows/aws_prod.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/_ci-cd.yml b/.github/workflows/_ci-cd.yml index 9e8b103a60..b0e9e7ee3a 100644 --- a/.github/workflows/_ci-cd.yml +++ b/.github/workflows/_ci-cd.yml @@ -196,7 +196,7 @@ jobs: permissions: contents: read pull-requests: write - statuses: write + checks: write models: read steps: - name: Checkout repository diff --git a/.github/workflows/aws_dev.yml b/.github/workflows/aws_dev.yml index e46798bbf6..5eea011722 100644 --- a/.github/workflows/aws_dev.yml +++ b/.github/workflows/aws_dev.yml @@ -10,7 +10,7 @@ on: permissions: contents: read pull-requests: write - statuses: write + checks: write models: read jobs: ci-cd: diff --git a/.github/workflows/aws_prod.yml b/.github/workflows/aws_prod.yml index f56e0fc0db..7ad9fc4661 100644 --- a/.github/workflows/aws_prod.yml +++ b/.github/workflows/aws_prod.yml @@ -16,7 +16,7 @@ on: permissions: contents: read pull-requests: write - statuses: write + checks: write models: read jobs: ci-cd: From 99c9db474ff04863201e0aa84806957633f99271 Mon Sep 17 00:00:00 2001 From: domenico Date: Thu, 23 Apr 2026 13:49:56 +0200 Subject: [PATCH 22/22] =?UTF-8?q?=F0=9F=91=B7=20ci(coverage):=20add=20JS?= =?UTF-8?q?=20coverage=20report=20to=20test-guard=20pipeline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add Clover reporter to Jest so it writes js-coverage/clover.xml - Extract both PHP and JS coverage from test container - Pass both files to test-guard via YAML block scalar --- .github/workflows/_ci-cd.yml | 17 +++++++++++------ docker | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/_ci-cd.yml b/.github/workflows/_ci-cd.yml index b0e9e7ee3a..7530d7c80d 100644 --- a/.github/workflows/_ci-cd.yml +++ b/.github/workflows/_ci-cd.yml @@ -78,17 +78,20 @@ jobs: # Run tests — exit code propagated to the workflow step docker compose -f docker/docker-compose-ci.yml up test-node --exit-code-from test-node || exit 1 - # ── Coverage artifact (consumed by test-guard job) ────────────────── - - name: Extract coverage report from test container + # ── Coverage artifacts (consumed by test-guard job) ───────────────── + - name: Extract coverage reports from test container run: | CONTAINER_ID=$(docker compose -f docker/docker-compose-ci.yml ps -aq test-node | head -1) - docker cp "$CONTAINER_ID":/var/www/matecat/coverage.xml ./coverage.xml + docker cp "$CONTAINER_ID":/var/www/matecat/coverage.xml ./php-coverage.xml + docker cp "$CONTAINER_ID":/var/www/matecat/js-coverage/clover.xml ./js-coverage.xml - - name: Upload coverage artifact + - name: Upload coverage artifacts uses: actions/upload-artifact@v4 with: name: coverage-report - path: coverage.xml + path: | + php-coverage.xml + js-coverage.xml retention-days: 7 # ─────────────────────────────────────────────────────────────────────────── # JOB 2 – deploy (only when should_deploy is true) @@ -212,6 +215,8 @@ jobs: - name: Test Guard uses: ostico/test-guard@v1 with: - coverage-file: coverage.xml + coverage-file: | + php-coverage.xml + js-coverage.xml coverage-threshold: '80' ai-enabled: 'true' diff --git a/docker b/docker index f67c79dde7..b0553a128b 160000 --- a/docker +++ b/docker @@ -1 +1 @@ -Subproject commit f67c79dde7d8a9b0778daa414afea2410795c3a2 +Subproject commit b0553a128b136e615216d555e49ba0d7882f5b8b