technik: Statische Analyse wieder aussagekräftig machen

phpstan lief mit 390 Meldungen außerhalb der Baseline, der größte Teil davon
Falschmeldungen. Ursache: Larastan löste keinen einzigen Cast auf, weil alle
Models ihre Casts über die casts()-METHODE deklarieren (Laravel-11-Stil).
Laravel führt die erst zur Laufzeit mit $casts zusammen, Larastan instanziiert
Models aber ohne Konstruktor — $pressRelease->status galt deshalb als string
und jeder Enum-Vergleich als "immer falsch". Dafür gibt es den Schalter
parseModelCastsMethod, dessen Larastan-Default false ist.

Zweite Sammelursache waren fehlende Generics an den Relations-Methoden: Ohne
sie landete phpstan auf Illuminate\Database\Eloquent\Model und meldete jede
Modell-Eigenschaft und jeden eigenen Scope als unbekannt. Alle 102
Relationen tragen jetzt ihr @return <Related, $this>; das verbessert
nebenbei die Vervollständigung in der IDE.

Zusammen fällt die Zahl von 390 auf 169. Die neu erzeugte Baseline umfasst 166
Einträge, überwiegend Closure-Parameter, die als blankes Builder typisiert
sind, sowie zwei nachgeprüfte Falschmeldungs-Gruppen: die Concerns unter
app/Livewire werden ausschließlich aus Volt-Komponenten eingebunden, die
phpstan nicht analysiert, und Cashier typisiert findBillable() gegen den TRAIT
Billable, was phpstan nicht mit User vereinbaren kann — die Laufzeitprüfung
dort ist richtig und bleibt.

Was die Analyse an echten toten Zweigen zutage gefördert hat, ist mit
entfernt: eine doppelte Null-Prüfung im Nachweis-PDF, Prüfungen gegen
NOT-NULL-Spalten in der Rechnungsstellung und im Vorschau-Controller, eine
immer wahre Bedingung im Logo-Pfad und in RetireAgencyCompanyType, ein
überflüssiges ?? [] auf einer Symfony-Methode, die immer ein Array liefert,
sowie der unerreichbare null-Arm in publicPortalLinks(). MigrateLegacyMedia
deklariert seine Medientypen jetzt als Literal-Union, womit das match ohne
default nachweislich vollständig ist statt nur faktisch.

Damit das nicht wieder abdriftet — die Baseline stand seit Mai unverändert —
läuft die Analyse ab jetzt als eigener Schritt in der Test-Pipeline.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-01 11:07:51 +00:00
parent eb1eba4533
commit e746deda4f
48 changed files with 780 additions and 228 deletions

View file

@ -1,11 +1,29 @@
parameters:
ignoreErrors:
-
message: '#^Instanceof between App\\Models\\User and Illuminate\\Contracts\\Auth\\MustVerifyEmail will always evaluate to true\.$#'
identifier: instanceof.alwaysTrue
count: 1
path: app/Actions/Fortify/UpdateUserProfileInformation.php
-
message: '#^Expression on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.expr
count: 1
path: app/Console/Commands/FixLegacyTimestamps.php
-
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Console/Commands/MigrateLegacyAgencyNames.php
-
message: '#^Offset ''priority'' on array\{path\: string, priority\: 0\|10\|20\|30\|40\|50\} on left side of \?\? always exists and is not nullable\.$#'
identifier: nullCoalesce.offset
count: 1
path: app/Console/Commands/MigrateLegacyMedia.php
-
message: '#^Call to static method chunk\(\) on an unknown class App\\Models\\Legacy\\Presseecho\\Article\.$#'
identifier: class.notFound
@ -43,88 +61,94 @@ parameters:
path: app/Console/Commands/MigratePresseData.php
-
message: '#^Call to function is_array\(\) with string\|null will always evaluate to false\.$#'
identifier: function.impossibleType
message: '#^Access to an undefined property App\\Models\\Company\:\:\$has_contacts\.$#'
identifier: property.notFound
count: 1
path: app/Console/Commands/SyncPressReleaseImages.php
path: app/Console/Commands/RetireAgencyCompanyType.php
-
message: '#^Result of \|\| is always true\.$#'
identifier: booleanOr.alwaysTrue
message: '#^Access to an undefined property App\\Models\\Company\:\:\$has_payment_option_links\.$#'
identifier: property.notFound
count: 2
path: app/Console/Commands/RetireAgencyCompanyType.php
-
message: '#^Access to an undefined property App\\Models\\Company\:\:\$has_press_releases\.$#'
identifier: property.notFound
count: 1
path: app/Console/Commands/SyncPressReleaseImages.php
path: app/Console/Commands/RetireAgencyCompanyType.php
-
message: '#^Strict comparison using \=\=\= between \*NEVER\* and array\{\} will always evaluate to false\.$#'
identifier: identical.alwaysFalse
message: '#^Access to an undefined property App\\Models\\Company\:\:\$has_third_party_members\.$#'
identifier: property.notFound
count: 2
path: app/Console/Commands/RetireAgencyCompanyType.php
-
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Console/Commands/SyncPressReleaseImages.php
path: app/Console/Commands/RetireAgencyCompanyType.php
-
message: '#^Cannot access property \$value on string\.$#'
identifier: property.nonObject
message: '#^Using nullsafe property access "\?\-\>legacy_id" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Http/Controllers/Api/V1/NewsletterSubscriptionController.php
path: app/Console/Commands/SeedLegacyApiTestdata.php
-
message: '#^Cannot access property \$value on string\.$#'
identifier: property.nonObject
count: 5
path: app/Http/Controllers/Api/V1/PressReleaseController.php
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Http/Controllers/Api/Legacy/LegacyContactController.php
-
message: '#^Instanceof between string and App\\Enums\\PressReleaseStatus will always evaluate to false\.$#'
identifier: instanceof.alwaysFalse
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Http/Controllers/Api/Legacy/LegacyPressReleaseController.php
-
message: '#^Instanceof between App\\Enums\\PressReleaseStatus and App\\Enums\\PressReleaseStatus will always evaluate to true\.$#'
identifier: instanceof.alwaysTrue
count: 1
path: app/Http/Controllers/Api/V1/PressReleaseImageController.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$is_active\.$#'
message: '#^Method App\\Http\\Controllers\\Auth\\GoogleController\:\:redirect\(\) should return Illuminate\\Http\\RedirectResponse but returns Symfony\\Component\\HttpFoundation\\RedirectResponse\.$#'
identifier: return.type
count: 1
path: app/Http/Controllers/Auth/GoogleController.php
-
message: '#^Access to an undefined property Laravel\\Cashier\\Payment\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Http/Controllers/Auth/MagicLinkConsumeController.php
path: app/Http/Controllers/CheckoutController.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Model\:\:canAccessAdmin\(\)\.$#'
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Http/Controllers/LegalRequestController.php
-
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Http/Controllers/Web/PressReleaseReportController.php
-
message: '#^Using nullsafe property access "\?\-\>value" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Http/Controllers/Web/ReportFormController.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\<Illuminate\\Database\\Eloquent\\Model\>\:\:visibleInArchive\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Controllers/Auth/MagicLinkConsumeController.php
-
message: '#^Cannot call method isPast\(\) on string\.$#'
identifier: method.nonObject
count: 1
path: app/Http/Controllers/Auth/MagicLinkConsumeController.php
-
message: '#^Cannot call method isPast\(\) on string\.$#'
identifier: method.nonObject
count: 1
path: app/Http/Controllers/PressReleasePreviewController.php
-
message: '#^Negated boolean expression is always true\.$#'
identifier: booleanNot.alwaysTrue
count: 1
path: app/Http/Controllers/PressReleasePreviewController.php
-
message: '#^Offset ''press_release_id'' on string\|null on left side of \?\? does not exist\.$#'
identifier: nullCoalesce.offset
count: 1
path: app/Http/Controllers/PressReleasePreviewController.php
-
message: '#^Ternary operator condition is always false\.$#'
identifier: ternary.alwaysFalse
count: 1
path: app/Http/Controllers/PressReleasePreviewController.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 1
path: app/Http/Controllers/PressReleasePreviewController.php
path: app/Http/Controllers/Web/SitemapController.php
-
message: '#^Call to function method_exists\(\) with Laravel\\Sanctum\\PersonalAccessToken and ''getKey'' will always evaluate to true\.$#'
@ -348,6 +372,12 @@ parameters:
count: 2
path: app/Http/Resources/PressReleaseImageResource.php
-
message: '#^Call to an undefined method App\\Http\\Resources\\PressReleaseImageResource\:\:variantUrl\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Http/Resources/PressReleaseImageResource.php
-
message: '#^Access to an undefined property App\\Http\\Resources\\PressReleaseResource\:\:\$backlink_url\.$#'
identifier: property.notFound
@ -469,10 +499,142 @@ parameters:
path: app/Http/Responses/RoleAwareLoginResponse.php
-
message: '#^Cannot access property \$value on string\.$#'
identifier: property.nonObject
message: '#^Instanceof between Laravel\\Cashier\\Billable\|null and App\\Models\\User will always evaluate to false\.$#'
identifier: instanceof.alwaysFalse
count: 3
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Method App\\Listeners\\ProcessStripeWebhook\:\:localSubscription\(\) is unused\.$#'
identifier: method.unused
count: 1
path: app/Models/Company.php
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Method App\\Listeners\\ProcessStripeWebhook\:\:snapshotAddress\(\) is unused\.$#'
identifier: method.unused
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Property App\\Listeners\\ProcessStripeWebhook\:\:\$activityLog is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Property App\\Listeners\\ProcessStripeWebhook\:\:\$numbers is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 3
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Using nullsafe property access "\?\-\>address1" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Using nullsafe property access "\?\-\>city" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Using nullsafe property access "\?\-\>country_code" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Using nullsafe property access "\?\-\>name" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Using nullsafe property access "\?\-\>postal_code" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Listeners/ProcessStripeWebhook.php
-
message: '#^Using nullsafe property access "\?\-\>name" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Listeners/RecordMailActivity.php
-
message: '#^Trait App\\Livewire\\Concerns\\HandlesAdminPressReleaseActions is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/HandlesAdminPressReleaseActions.php
-
message: '#^Trait App\\Livewire\\Concerns\\HasFullTextSearch is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/HasFullTextSearch.php
-
message: '#^Trait App\\Livewire\\Concerns\\HasSortableTable is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/HasSortableTable.php
-
message: '#^Trait App\\Livewire\\Concerns\\InteractsWithAiDeclaration is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/InteractsWithAiDeclaration.php
-
message: '#^Trait App\\Livewire\\Concerns\\InteractsWithPressReleaseContacts is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/InteractsWithPressReleaseContacts.php
-
message: '#^Trait App\\Livewire\\Concerns\\InteractsWithPressReleaseScheduling is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/InteractsWithPressReleaseScheduling.php
-
message: '#^Trait App\\Livewire\\Concerns\\InteractsWithPressReleaseTags is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/InteractsWithPressReleaseTags.php
-
message: '#^Trait App\\Livewire\\Concerns\\ProvidesPressReleaseFormRules is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/ProvidesPressReleaseFormRules.php
-
message: '#^Trait App\\Livewire\\Concerns\\ProvidesPressReleasePresubmitChecks is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/ProvidesPressReleasePresubmitChecks.php
-
message: '#^Trait App\\Livewire\\Concerns\\ProvidesUserFormRules is used zero times and is not analysed\.$#'
identifier: trait.unused
count: 1
path: app/Livewire/Concerns/ProvidesUserFormRules.php
-
message: '#^Using nullsafe property access "\?\-\>name" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Models/Category.php
-
message: '#^PHPDoc tag @var with type Illuminate\\Database\\Eloquent\\Model is not subtype of native type \$this\(App\\Models\\Company\)\.$#'
@ -481,11 +643,47 @@ parameters:
path: app/Models/Company.php
-
message: '#^Using nullsafe property access on non\-nullable type string\. Use \-\> instead\.$#'
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Models/Company.php
-
message: '#^Using nullsafe property access "\?\-\>version" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Models/LegalDocument.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:forPlacement\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Models/PressRelease.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:published\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Models/PressRelease.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\<Illuminate\\Database\\Eloquent\\Model\>\:\:active\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Models/PressRelease.php
-
message: '#^Method App\\Models\\PressRelease\:\:embargoAtLocal\(\) should return Illuminate\\Support\\Carbon\|null but returns Carbon\\Carbon\|null\.$#'
identifier: return.type
count: 1
path: app/Models/PressRelease.php
-
message: '#^Method App\\Models\\PressRelease\:\:scheduledAtLocal\(\) should return Illuminate\\Support\\Carbon\|null but returns Carbon\\Carbon\|null\.$#'
identifier: return.type
count: 1
path: app/Models/PressRelease.php
-
message: '#^PHPDoc tag @var with type Illuminate\\Database\\Eloquent\\Model is not subtype of native type \$this\(App\\Models\\PressRelease\)\.$#'
identifier: varTag.nativeType
@ -493,64 +691,28 @@ parameters:
path: app/Models/PressRelease.php
-
message: '#^Call to function is_string\(\) with null will always evaluate to false\.$#'
identifier: function.impossibleType
count: 1
path: app/Models/PressReleaseImage.php
message: '#^Using nullsafe method call on non\-nullable type Illuminate\\Database\\Eloquent\\Collection\<int, App\\Models\\PressReleaseImage\>\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 2
path: app/Models/PressRelease.php
-
message: '#^Call to function method_exists\(\) with Illuminate\\Filesystem\\FilesystemAdapter and ''url'' will always evaluate to true\.$#'
identifier: function.alreadyNarrowedType
message: '#^Using nullsafe property access "\?\-\>balance_credits" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Models/PressReleaseImage.php
path: app/Models/User.php
-
message: '#^Offset string on string\|null on left side of \?\? does not exist\.$#'
identifier: nullCoalesce.offset
count: 1
path: app/Models/PressReleaseImage.php
message: '#^Using nullsafe property access "\?\-\>press_release_quota" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 2
path: app/Models/User.php
-
message: '#^Result of \|\| is always true\.$#'
identifier: booleanOr.alwaysTrue
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:grandfatheredNow\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Models/PressReleaseImage.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 1
path: app/Models/PressReleaseImage.php
-
message: '#^Call to function in_array\(\) with arguments string, array\{App\\Enums\\PressReleaseStatus\:\:Draft, App\\Enums\\PressReleaseStatus\:\:Rejected, App\\Enums\\PressReleaseStatus\:\:Review\} and true will always evaluate to false\.$#'
identifier: function.impossibleType
count: 1
path: app/Policies/PressReleasePolicy.php
-
message: '#^Call to function in_array\(\) with arguments string, array\{App\\Enums\\PressReleaseStatus\:\:Draft, App\\Enums\\PressReleaseStatus\:\:Rejected\} and true will always evaluate to false\.$#'
identifier: function.impossibleType
count: 1
path: app/Policies/PressReleasePolicy.php
-
message: '#^Result of && is always false\.$#'
identifier: booleanAnd.alwaysFalse
count: 1
path: app/Policies/PressReleasePolicy.php
-
message: '#^Strict comparison using \!\=\= between string and App\\Enums\\PressReleaseStatus\:\:Published will always evaluate to true\.$#'
identifier: notIdentical.alwaysTrue
count: 1
path: app/Policies/PressReleasePolicy.php
-
message: '#^Called ''env'' outside of the config directory which returns null when the config is cached, use ''config''\.$#'
identifier: larastan.noEnvCallsOutsideOfConfig
count: 1
path: app/Providers/ThemeServiceProvider.php
path: app/Models/UserPaymentOption.php
-
message: '#^Method App\\Services\\Admin\\AdminSlowRequestReporter\:\:entries\(\) should return Illuminate\\Support\\Collection\<int, array\<string, mixed\>\> but returns Illuminate\\Support\\Collection\<int, non\-empty\-array\<string, mixed\>\>\.$#'
@ -558,12 +720,6 @@ parameters:
count: 1
path: app/Services/Admin/AdminSlowRequestReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$status\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/ApiAccessEligibilityService.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$requests\.$#'
identifier: property.notFound
@ -577,13 +733,7 @@ parameters:
path: app/Services/Api/ApiUsageReporter.php
-
message: '#^Cannot call method toIso8601String\(\) on string\.$#'
identifier: method.nonObject
count: 1
path: app/Services/Api/ApiUsageReporter.php
-
message: '#^Using nullsafe method call on non\-nullable type string\. Use \-\> instead\.$#'
message: '#^Using nullsafe method call on non\-nullable type Carbon\\Carbon\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Api/ApiUsageReporter.php
@ -595,76 +745,22 @@ parameters:
path: app/Services/Api/LegacyApiAccessLogAnalyzer.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$invoice_date\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$legacy_id\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$legacy_portal\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$number\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$paid_at\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$status\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$total_cents\.$#'
identifier: property.notFound
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Cannot access property \$value on string\.$#'
identifier: property.nonObject
count: 2
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Cannot call method toDateTimeString\(\) on string\.$#'
identifier: method.nonObject
count: 1
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Using nullsafe property access on non\-nullable type string\. Use \-\> instead\.$#'
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 2
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Method App\\Services\\Auth\\MagicLinkGenerator\:\:createLoginLink\(\) should return array\{magic_link\: App\\Models\\MagicLink, plain_token\: string, expires_at\: Illuminate\\Support\\Carbon\} but returns array\{magic_link\: Illuminate\\Database\\Eloquent\\Model, plain_token\: string, expires_at\: Illuminate\\Support\\Carbon\}\.$#'
identifier: return.type
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\RegistrationType\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Auth/MagicLinkGenerator.php
path: app/Services/Api/LegacyApiCustomerReporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Relations\\Pivot\:\:\$role\.$#'
identifier: property.notFound
count: 1
path: app/Services/Auth/ContactAccessService.php
-
message: '#^Using nullsafe property access "\?\-\>id" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
@ -673,28 +769,40 @@ parameters:
path: app/Services/Auth/MagicLinkGenerator.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$profile\.$#'
identifier: property.notFound
message: '#^Using nullsafe property access "\?\-\>currency" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Billing/LegacyInvoicePdfRenderer.php
path: app/Services/Billing/ManualInvoiceService.php
-
message: '#^Cannot call method betweenIncluded\(\) on string\.$#'
identifier: method.nonObject
message: '#^Using nullsafe property access "\?\-\>price_cents" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Billing/LegacyInvoicePdfRenderer.php
path: app/Services/Billing/ManualInvoiceService.php
-
message: '#^Cannot call method format\(\) on string\.$#'
identifier: method.nonObject
count: 4
path: app/Services/Billing/LegacyInvoicePdfRenderer.php
message: '#^Access to property \$id on an unknown class Laravel\\Cashier\\Concerns\\Stripe\\TaxId\.$#'
identifier: class.notFound
count: 1
path: app/Services/Billing/StripeCheckoutService.php
-
message: '#^Cannot call method label\(\) on string\.$#'
identifier: method.nonObject
count: 3
path: app/Services/Billing/LegacyInvoicePdfRenderer.php
message: '#^Access to property \$type on an unknown class Laravel\\Cashier\\Concerns\\Stripe\\TaxId\.$#'
identifier: class.notFound
count: 1
path: app/Services/Billing/StripeCheckoutService.php
-
message: '#^Access to property \$value on an unknown class Laravel\\Cashier\\Concerns\\Stripe\\TaxId\.$#'
identifier: class.notFound
count: 1
path: app/Services/Billing/StripeCheckoutService.php
-
message: '#^Using nullsafe property access "\?\-\>timestamp" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Billing/SubscriptionPeriodResolver.php
-
message: '#^Unsafe access to private property App\\Services\\CurrentPortalContext\:\:\$portal through static\:\:\.$#'
@ -702,6 +810,12 @@ parameters:
count: 4
path: app/Services/CurrentPortalContext.php
-
message: '#^Using nullsafe property access "\?\-\>role" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Customer/CustomerCompanyContext.php
-
message: '#^Offset ''filename'' on array\{dirname\?\: string, basename\: string, extension\?\: string, filename\: string\} on left side of \?\? always exists and is not nullable\.$#'
identifier: nullCoalesce.offset
@ -715,40 +829,160 @@ parameters:
path: app/Services/Import/PressReleaseImporter.php
-
message: '#^Access to an undefined property Illuminate\\Database\\Eloquent\\Model\:\:\$email\.$#'
message: '#^Using nullsafe property access "\?\-\>uuid" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Import/PressReleaseImporter.php
-
message: '#^Using nullsafe property access "\?\-\>translations" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 2
path: app/Services/PressRelease/BoostService.php
-
message: '#^Using nullsafe property access on non\-nullable type App\\Enums\\Portal\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/PressRelease/CorrectionService.php
-
message: '#^Instanceof between App\\Enums\\PressReleaseStatus and App\\Enums\\PressReleaseStatus will always evaluate to true\.$#'
identifier: instanceof.alwaysTrue
count: 1
path: app/Services/PressRelease/PressReleaseService.php
-
message: '#^Method App\\Services\\PressRelease\\PressReleaseService\:\:resolvePublishedAt\(\) should return Illuminate\\Support\\Carbon but returns Carbon\\Carbon\.$#'
identifier: return.type
count: 3
path: app/Services/PressRelease/PressReleaseService.php
-
message: '#^Using nullsafe property access "\?\-\>name" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/PressRelease/PressReleaseService.php
-
message: '#^Comparison operation "\<" between int\<1, max\> and 1 is always false\.$#'
identifier: smaller.alwaysFalse
count: 2
path: app/Services/PressRelease/ProofPdfRenderer.php
-
message: '#^Instanceof between App\\Enums\\Portal and App\\Enums\\Portal will always evaluate to true\.$#'
identifier: instanceof.alwaysTrue
count: 1
path: app/Services/PressRelease/ProofPdfRenderer.php
-
message: '#^Result of \|\| is always false\.$#'
identifier: booleanOr.alwaysFalse
count: 1
path: app/Services/PressRelease/ProofPdfRenderer.php
-
message: '#^Access to an undefined property App\\Models\\Company\:\:\$recent_releases_count\.$#'
identifier: property.notFound
count: 1
path: app/Services/PressRelease/PressReleaseService.php
path: app/Services/Web/CategoryPageData.php
-
message: '#^Call to function in_array\(\) with arguments string, array\<App\\Enums\\PressReleaseStatus\> and true will always evaluate to false\.$#'
identifier: function.impossibleType
message: '#^Access to an undefined property App\\Models\\Company\:\:\$today_releases_count\.$#'
identifier: property.notFound
count: 1
path: app/Services/PressRelease/PressReleaseService.php
path: app/Services/Web/CategoryPageData.php
-
message: '#^Instanceof between string and App\\Enums\\PressReleaseStatus will always evaluate to false\.$#'
identifier: instanceof.alwaysFalse
count: 1
path: app/Services/PressRelease/PressReleaseService.php
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:forPortalValues\(\)\.$#'
identifier: method.notFound
count: 2
path: app/Services/Web/CategoryPageData.php
-
message: '#^Strict comparison using \!\=\= between string and App\\Enums\\PressReleaseStatus will always evaluate to true\.$#'
identifier: notIdentical.alwaysTrue
message: '#^Access to an undefined property App\\Models\\Company\:\:\$recent_releases_count\.$#'
identifier: property.notFound
count: 1
path: app/Services/PressRelease/PressReleaseService.php
path: app/Services/Web/HomePageData.php
-
message: '#^Strict comparison using \=\=\= between string and App\\Enums\\PressReleaseStatus\:\:Published will always evaluate to false\.$#'
identifier: identical.alwaysFalse
message: '#^Access to an undefined property App\\Models\\Company\:\:\$today_releases_count\.$#'
identifier: property.notFound
count: 1
path: app/Services/PressRelease/PressReleaseService.php
path: app/Services/Web/HomePageData.php
-
message: '#^Called ''env'' outside of the config directory which returns null when the config is cached, use ''config''\.$#'
identifier: larastan.noEnvCallsOutsideOfConfig
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:forPortalValues\(\)\.$#'
identifier: method.notFound
count: 5
path: app/Services/Web/HomePageData.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\<Illuminate\\Database\\Eloquent\\Model\>\:\:forPortalValues\(\)\.$#'
identifier: method.notFound
count: 1
path: bootstrap/app.php
path: app/Services/Web/HomePageData.php
-
message: '#^Using nullsafe property access "\?\-\>name" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: app/Services/Web/HomePageData.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\<Illuminate\\Database\\Eloquent\\Model\>\:\:visibleInArchive\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Services/Web/HubPageData.php
-
message: '#^Call to function is_array\(\) with list\<array\{label\: string, value\: string, delta\: string, positive\: bool\}\> will always evaluate to true\.$#'
identifier: function.alreadyNarrowedType
count: 1
path: app/Services/Web/MarketDataService.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:forPortalValues\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Services/Web/NewsroomDetailPageData.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:forPortalValues\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Services/Web/NewsroomsPageData.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:forPortalValues\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Services/Web/ReleaseDetailPageData.php
-
message: '#^Call to an undefined method Illuminate\\Support\\Collection\<\(int\|string\), mixed\>\:\:modelKeys\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Services/Web/ReleaseDetailPageData.php
-
message: '#^Call to an undefined method Illuminate\\Database\\Eloquent\\Builder\:\:forPortalValues\(\)\.$#'
identifier: method.notFound
count: 1
path: app/Services/Web/VeroeffentlichenPageData.php
-
message: '#^Method App\\Support\\CategoryNavigation\:\:query\(\) should return Illuminate\\Support\\Collection\<int, array\{label\: string, slug\: string, href\: string\}\> but returns Illuminate\\Support\\Collection\<int, array\{label\: string, slug\: non\-falsy\-string, href\: string\}\>\.$#'
identifier: return.type
count: 1
path: app/Support/CategoryNavigation.php
-
message: '#^Call to function is_array\(\) with array\<string, mixed\> will always evaluate to true\.$#'
identifier: function.alreadyNarrowedType
count: 1
path: app/Support/DomainAssetContext.php
-
message: '#^Call to an undefined method Faker\\Generator\:\:secondaryAddress\(\)\.$#'