Files
pl_mail/phpstan-baseline.neon
T
Paul LütznerandClaude Opus 5 7ec3947b2f feat(jmap): the New marker becomes something a client can read and retire
`MessageThread::listedAt` and NEW_WINDOW have driven the web's badges, its
category tabs and its sidebar dots for a while, and none of it had a wire
surface: a client could neither see that a conversation was new nor record
having shown one. The visible cost was a mailbox triaged entirely on a phone
opening in the browser with every conversation from the last day still badged
and five tabs still dotted, because only a rendered Twig list could clear a
marker.

`Thread/get` now carries `isNew`, resolved rather than raw. The window is half
the rule, so publishing `listedAt` alone would have left every client
reimplementing PT24H and drifting the day somebody changes it. One clock
reading serves the whole response, for the reason NewMailMarkers holds one per
request: two threads a few milliseconds apart must not straddle the boundary.

`Thread/set` accepts `isNew: false`, and only false. The column records that a
row WAS displayed, so un-retiring would write over a fact, and a client able to
do it could keep its own badges alive for ever. The retirements are collected
and applied through markListed() as one guarded UPDATE — a list client sends
this for every row it draws, so a page is fifty of them, and the SQL guard is
what makes a repeat keep the FIRST display time rather than moving it forward.

The refresh() after that UPDATE is the part that is easy to miss and was found
by a test rather than by reading. DQL writes past the unit of work, so a client
catching up — retire the page just drawn, then read it back, in ONE request —
would have been answered `isNew: true` for the very conversations the same call
had retired, and would have re-sent the retirement on every refresh until the
window closed.

Deliberately not recorded as a Thread state change: a phone drawing a page of
mail would otherwise push dozens of them to every other device the user owns,
for a column none of them needs told about urgently.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 14:57:40 +02:00

690 lines
28 KiB
Plaintext

parameters:
ignoreErrors:
-
message: '#^Call to an undefined method Webklex\\PHPIMAP\\Connection\\Protocols\\ProtocolInterface\:\:nextLine\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Command/Imap/ImapIdleCommand.php
-
message: '#^Strict comparison using \=\=\= between true and false will always evaluate to false\.$#'
identifier: identical.alwaysFalse
count: 2
path: src/Command/Imap/ImapIdleCommand.php
-
message: '#^Strict comparison using \=\=\= between false and true will always evaluate to false\.$#'
identifier: identical.alwaysFalse
count: 1
path: src/Command/Imap/ImapSuperviseCommand.php
-
message: '#^Parameter \#2 \$options of method Webklex\\PHPIMAP\\Folder\:\:appendMessage\(\) expects array\|null, string given\.$#'
identifier: argument.type
count: 1
path: src/Command/Imap/ImapTestCommand.php
-
message: '#^Parameter \#3 \$internal_date of method Webklex\\PHPIMAP\\Folder\:\:appendMessage\(\) expects Carbon\\Carbon\|string\|null, DateTimeImmutable given\.$#'
identifier: argument.type
count: 1
path: src/Command/Imap/ImapTestCommand.php
-
message: '#^Strict comparison using \=\=\= between false and true will always evaluate to false\.$#'
identifier: identical.alwaysFalse
count: 1
path: src/Command/Test/SeedTestEmailCommand.php
-
message: '#^Strict comparison using \=\=\= between true and true will always evaluate to true\.$#'
identifier: identical.alwaysTrue
count: 1
path: src/Command/Test/SeedTestEmailCommand.php
-
message: '#^PHPDoc tag @param references unknown parameter\: \$assign$#'
identifier: parameter.notFound
count: 1
path: src/Controller/Admin/IntegrationProviderController.php
-
message: '#^Parameter \#1 \$token of method League\\OAuth2\\Client\\Provider\\AbstractProvider\:\:getResourceOwner\(\) expects League\\OAuth2\\Client\\Token\\AccessToken, League\\OAuth2\\Client\\Token\\AccessTokenInterface given\.$#'
identifier: argument.type
count: 1
path: src/Controller/Auth/OAuthController.php
-
message: '#^Property App\\Entity\\Label\\Label\:\:\$usr \(App\\Entity\\User\\User\|null\) does not accept Symfony\\Component\\Security\\Core\\User\\UserInterface\|null\.$#'
identifier: assign.propertyType
count: 1
path: src/Controller/Mail/LabelController.php
-
message: '#^Property App\\Controller\\Mail\\MailController\:\:\$mailboxRepository is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Controller/Mail/MailController.php
-
message: '#^Instantiating DateTimeImmutable with in 1 day produces an error\: The timezone could not be found in the database$#'
identifier: new.dateTimeImmutable
count: 1
path: src/Controller/Mail/ThreadStatusController.php
-
message: '#^Attribute class Symfony\\Component\\HttpKernel\\Attribute\\MapEntity does not exist\.$#'
identifier: attribute.notFound
count: 2
path: src/Controller/Onboarding/OnboardingController.php
-
message: '#^Parameter \#2 \$user of method App\\Service\\Mail\\AccountCreator\:\:create\(\) expects App\\Entity\\User\\User, Symfony\\Component\\Security\\Core\\User\\UserInterface\|null given\.$#'
identifier: argument.type
count: 1
path: src/Controller/Settings/AccountController.php
-
message: '#^Property App\\Controller\\Settings\\AccountController\:\:\$aliasSeeder is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Controller/Settings/AccountController.php
-
message: '#^Property App\\Controller\\Settings\\AccountController\:\:\$graphSubscriptionManager is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Controller/Settings/AccountController.php
-
message: '#^Property App\\Controller\\Settings\\AccountController\:\:\$logger is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Controller/Settings/AccountController.php
-
message: '#^Parameter \#1 \$user of method App\\Repository\\Mail\\MessageRepository\:\:countMatchingForUser\(\) expects App\\Entity\\User\\User, Symfony\\Component\\Security\\Core\\User\\UserInterface\|null given\.$#'
identifier: argument.type
count: 1
path: src/Controller/Settings/MailRuleController.php
-
message: '#^Property App\\Controller\\Settings\\MailRuleController\:\:\$executor is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Controller/Settings/MailRuleController.php
-
message: '#^Property App\\Entity\\Rule\\MailRule\:\:\$usr \(App\\Entity\\User\\User\|null\) does not accept Symfony\\Component\\Security\\Core\\User\\UserInterface\|null\.$#'
identifier: assign.propertyType
count: 1
path: src/Controller/Settings/MailRuleController.php
-
message: '#^Call to an undefined method Symfony\\Component\\HttpFoundation\\Session\\SessionInterface\:\:getFlashBag\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Controller/Settings/SettingsController.php
-
message: '#^Access to an undefined property Symfony\\Component\\Security\\Core\\User\\UserInterface\:\:\$locale\.$#'
identifier: property.notFound
count: 1
path: src/Controller/Settings/SettingsController.php
-
message: '#^Parameter \#1 \$user of method App\\Service\\User\\ProfileSectionViewData\:\:build\(\) expects App\\Entity\\User\\User, Symfony\\Component\\Security\\Core\\User\\UserInterface\|null given\.$#'
identifier: argument.type
count: 1
path: src/Controller/Settings/SettingsController.php
-
message: '#^Parameter \#1 \$user of method App\\Service\\User\\TwoFactor\\SecuritySectionViewData\:\:build\(\) expects App\\Entity\\User\\User, Symfony\\Component\\Security\\Core\\User\\UserInterface\|null given\.$#'
identifier: argument.type
count: 1
path: src/Controller/Settings/SettingsController.php
-
message: '#^Property App\\Controller\\Settings\\SettingsController\:\:\$pushSubscriptionRegistry is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Controller/Settings/SettingsController.php
-
message: '#^Call to an undefined method Symfony\\Component\\HttpFoundation\\Session\\SessionInterface\:\:getFlashBag\(\)\.$#'
identifier: method.notFound
count: 2
path: src/Controller/Settings/TwoFactorController.php
-
message: '#^Call to an undefined method Symfony\\Contracts\\Translation\\TranslatorInterface\:\:setLocale\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Controller/Setup/InstallController.php
-
message: '#^Match arm comparison between \$this\(App\\Domain\\Enum\\Integration\\Provider\)&App\\Domain\\Enum\\Integration\\Provider\:\:Dropbox and App\\Domain\\Enum\\Integration\\Provider\:\:Dropbox is always true\.$#'
identifier: match.alwaysTrue
count: 1
path: src/Domain/Enum/Integration/Provider.php
-
message: '#^Property App\\Entity\\Calendar\\Calendar\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/Calendar.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEvent\:\:\$calendar type mapping mismatch\: property can contain App\\Entity\\Calendar\\Calendar\|null but database expects App\\Entity\\Calendar\\Calendar\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/CalendarEvent.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEvent\:\:\$endsAt type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Calendar/CalendarEvent.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEvent\:\:\$startsAt type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Calendar/CalendarEvent.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEvent\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/CalendarEvent.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEventOccurrence\:\:\$calendar type mapping mismatch\: property can contain App\\Entity\\Calendar\\Calendar\|null but database expects App\\Entity\\Calendar\\Calendar\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/CalendarEventOccurrence.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEventOccurrence\:\:\$endsAt type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Calendar/CalendarEventOccurrence.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEventOccurrence\:\:\$event type mapping mismatch\: property can contain App\\Entity\\Calendar\\CalendarEvent\|null but database expects App\\Entity\\Calendar\\CalendarEvent\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/CalendarEventOccurrence.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEventOccurrence\:\:\$recurrenceId type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Calendar/CalendarEventOccurrence.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEventOccurrence\:\:\$startsAt type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Calendar/CalendarEventOccurrence.php
-
message: '#^Property App\\Entity\\Calendar\\CalendarEventOccurrence\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/CalendarEventOccurrence.php
-
message: '#^Property App\\Entity\\Calendar\\EventSourceLink\:\:\$event type mapping mismatch\: property can contain App\\Entity\\Calendar\\CalendarEvent\|null but database expects App\\Entity\\Calendar\\CalendarEvent\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/EventSourceLink.php
-
message: '#^Property App\\Entity\\Calendar\\EventSourceLink\:\:\$message type mapping mismatch\: property can contain App\\Entity\\Mail\\Message\|null but database expects App\\Entity\\Mail\\Message\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/EventSourceLink.php
-
message: '#^Property App\\Entity\\Calendar\\EventSuppression\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Calendar/EventSuppression.php
-
message: '#^Property App\\Entity\\Label\\Label\:\:\$name type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Label/Label.php
-
message: '#^Property App\\Entity\\Label\\Label\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Label/Label.php
-
message: '#^Property App\\Entity\\Label\\LabelBinding\:\:\$account type mapping mismatch\: property can contain App\\Entity\\Mail\\Account\|null but database expects App\\Entity\\Mail\\Account\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Label/LabelBinding.php
-
message: '#^Property App\\Entity\\Label\\LabelBinding\:\:\$label type mapping mismatch\: property can contain App\\Entity\\Label\\Label\|null but database expects App\\Entity\\Label\\Label\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Label/LabelBinding.php
-
message: '#^Property App\\Entity\\Mail\\Account\:\:\$authType type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Account.php
-
message: '#^Property App\\Entity\\Mail\\Account\:\:\$isActive type mapping mismatch\: property can contain bool\|null but database expects bool\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Account.php
-
message: '#^Property App\\Entity\\Mail\\Account\:\:\$username type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Account.php
-
message: '#^Property App\\Entity\\Mail\\Account\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Mail/Account.php
-
message: '#^Property App\\Entity\\Mail\\Contact\:\:\$email type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Contact.php
-
message: '#^Property App\\Entity\\Mail\\Contact\:\:\$firstSeenAt type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Contact.php
-
message: '#^Property App\\Entity\\Mail\\Contact\:\:\$lastSeenAt type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Contact.php
-
message: '#^Property App\\Entity\\Mail\\Contact\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Mail/Contact.php
-
message: '#^Property App\\Entity\\Mail\\EmailAlias\:\:\$account type mapping mismatch\: property can contain App\\Entity\\Mail\\Account\|null but database expects App\\Entity\\Mail\\Account\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Mail/EmailAlias.php
-
message: '#^Property App\\Entity\\Mail\\Mailbox\:\:\$account type mapping mismatch\: property can contain App\\Entity\\Mail\\Account\|null but database expects App\\Entity\\Mail\\Account\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Mail/Mailbox.php
-
message: '#^Property App\\Entity\\Mail\\Mailbox\:\:\$fullPath type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Mailbox.php
-
message: '#^Property App\\Entity\\Mail\\Mailbox\:\:\$isSyncEnabled type mapping mismatch\: property can contain bool\|null but database expects bool\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Mailbox.php
-
message: '#^Property App\\Entity\\Mail\\Mailbox\:\:\$name type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Mailbox.php
-
message: '#^Property App\\Entity\\Mail\\Message\:\:\$hasAttachments type mapping mismatch\: property can contain bool\|null but database expects bool\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/Message.php
-
message: '#^Property App\\Entity\\Mail\\MessagePart\:\:\$contentType type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/MessagePart.php
-
message: '#^Property App\\Entity\\Mail\\MessagePart\:\:\$disposition type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/MessagePart.php
-
message: '#^Property App\\Entity\\Mail\\MessagePart\:\:\$isInline type mapping mismatch\: property can contain bool\|null but database expects bool\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/MessagePart.php
-
message: '#^Property App\\Entity\\Mail\\MessagePart\:\:\$message type mapping mismatch\: property can contain App\\Entity\\Mail\\Message\|null but database expects App\\Entity\\Mail\\Message\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Mail/MessagePart.php
-
message: '#^Property App\\Entity\\Mail\\MessageThread\:\:\$account type mapping mismatch\: property can contain App\\Entity\\Mail\\Account\|null but database expects App\\Entity\\Mail\\Account\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Mail/MessageThread.php
-
message: '#^Property App\\Entity\\Mail\\MessageThread\:\:\$messageCount type mapping mismatch\: property can contain int\|null but database expects int\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/MessageThread.php
-
message: '#^Property App\\Entity\\Mail\\MessageThread\:\:\$normalizedSubject type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/MessageThread.php
-
message: '#^Property App\\Entity\\Mail\\MessageThread\:\:\$threadingMethod type mapping mismatch\: property can contain App\\Domain\\Enum\\Mail\\ThreadingMethod\|null but database expects App\\Domain\\Enum\\Mail\\ThreadingMethod\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/MessageThread.php
-
message: '#^Property App\\Entity\\Mail\\MessageThread\:\:\$unreadCount type mapping mismatch\: property can contain int\|null but database expects int\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Mail/MessageThread.php
-
message: '#^Property App\\Entity\\Monitoring\\ProcessHeartbeat\:\:\$lastBeatAt type mapping mismatch\: property can contain DateTimeImmutable\|null but database expects DateTimeImmutable\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Monitoring/ProcessHeartbeat.php
-
message: '#^Property App\\Entity\\Rule\\MailRule\:\:\$name type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/Rule/MailRule.php
-
message: '#^Property App\\Entity\\Rule\\MailRule\:\:\$usr type mapping mismatch\: property can contain App\\Entity\\User\\User\|null but database expects App\\Entity\\User\\User\.$#'
identifier: doctrine.associationType
count: 1
path: src/Entity/Rule/MailRule.php
-
message: '#^Property App\\Entity\\User\\User\:\:\$email type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/User/User.php
-
message: '#^Property App\\Entity\\User\\User\:\:\$nameFirst type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/User/User.php
-
message: '#^Property App\\Entity\\User\\User\:\:\$nameLast type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/User/User.php
-
message: '#^Property App\\Entity\\User\\User\:\:\$password type mapping mismatch\: property can contain string\|null but database expects string\.$#'
identifier: doctrine.columnType
count: 1
path: src/Entity/User/User.php
-
message: '#^Strict comparison using \=\=\= between true and 0\|1 will always evaluate to false\.$#'
identifier: identical.alwaysFalse
count: 1
path: src/Jmap/Controller/JmapEventSourceController.php
-
message: '#^Method App\\Jmap\\Mail\\EmailPatchApplier\:\:currentMailboxIds\(\) should return array\<string, bool\> but returns array\<int, true\>\.$#'
identifier: return.type
count: 1
path: src/Jmap/Mail/EmailPatchApplier.php
-
message: '#^Property App\\Jmap\\Mail\\EmailPatchApplier\:\:\$labelRepository is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Jmap/Mail/EmailPatchApplier.php
-
message: '#^Method App\\Jmap\\Mapper\\EmailMapper\:\:mailboxIds\(\) never returns array\<string, bool\> so it can be removed from the return type\.$#'
identifier: return.unusedType
count: 1
path: src/Jmap/Mapper/EmailMapper.php
-
message: '#^Method App\\Jmap\\Mapper\\EmailMapper\:\:mailboxIds\(\) should return array\<string, bool\>\|stdClass but returns array\<int, bool\>\.$#'
identifier: return.type
count: 1
path: src/Jmap/Mapper/EmailMapper.php
-
message: '#^Parameter \#1 \$array \(list\<string\>\) of array_values is already a list, call has no effect\.$#'
identifier: arrayValues.list
count: 1
path: src/Jmap/Method/Core/PushSubscriptionSetMethod.php
-
message: '#^Parameter \#1 \$array \(list\<string\>\) of array_values is already a list, call has no effect\.$#'
identifier: arrayValues.list
count: 1
path: src/Jmap/Method/Mail/EmailSetMethod.php
-
message: '#^Property App\\Jmap\\Method\\Mail\\EmailSetMethod\:\:\$mailboxRepository is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Jmap/Method/Mail/EmailSetMethod.php
-
message: '#^Parameter \#1 \$array \(list\<string\>\) of array_values is already a list, call has no effect\.$#'
identifier: arrayValues.list
count: 1
path: src/Jmap/Method/Mail/IdentitySetMethod.php
-
message: '#^Parameter \#1 \$array \(list\<string\>\) of array_values is already a list, call has no effect\.$#'
identifier: arrayValues.list
count: 1
path: src/Jmap/Method/Mail/MailboxSetMethod.php
-
message: '#^Method App\\Jmap\\Push\\PushDispatcher\:\:groupByUser\(\) should return array\<int, array\<string, array\<string, string\>\>\> but returns array\<int, array\<int, array\<string, string\>\>\>\.$#'
identifier: return.type
count: 1
path: src/Jmap/Push/PushDispatcher.php
-
message: '#^Parameter \#1 \$array \(list\<string\>\) of array_values is already a list, call has no effect\.$#'
identifier: arrayValues.list
count: 3
path: src/Jmap/State/StateManager.php
-
message: '#^Method App\\Kernel\:\:getAllowedEnvs\(\) is unused\.$#'
identifier: method.unused
count: 1
path: src/Kernel.php
-
message: '#^Access to an undefined property Symfony\\Component\\Security\\Core\\User\\UserInterface\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: src/Repository/Calendar/CalendarEventOccurrenceRepository.php
-
message: '#^PHPDoc tag @return with type iterable\<App\\Entity\\Mail\\Account\> is not subtype of native type array\.$#'
identifier: return.phpDocType
count: 2
path: src/Repository/Mail/AccountRepository.php
-
message: '#^Access to an undefined property Symfony\\Component\\Security\\Core\\User\\UserInterface\:\:\$id\.$#'
identifier: property.notFound
count: 1
path: src/Repository/Mail/MessageThreadRepository.php
-
message: '#^Method App\\Security\\ApiTokenAuthenticator\:\:onAuthenticationFailure\(\) never returns null so it can be removed from the return type\.$#'
identifier: return.unusedType
count: 1
path: src/Security/ApiTokenAuthenticator.php
-
message: '#^Method App\\Security\\ApiTokenAuthenticator\:\:supports\(\) never returns null so it can be removed from the return type\.$#'
identifier: return.unusedType
count: 1
path: src/Security/ApiTokenAuthenticator.php
-
message: '#^Attribute class JetBrains\\PhpStorm\\ArrayShape does not exist\.$#'
identifier: attribute.notFound
count: 1
path: src/Security/LoginFormAuthenticator.php
-
message: '#^Strict comparison using \=\=\= between null and App\\Entity\\Mail\\Account will always evaluate to false\.$#'
identifier: identical.alwaysFalse
count: 1
path: src/Service/Imap/MessageSendService.php
-
message: '#^Expression on left side of \?\? is not nullable\.$#'
identifier: nullCoalesce.expr
count: 2
path: src/Service/Imap/MessageSyncer.php
-
message: '#^Parameter &\$syncedUids by\-ref type of method App\\Service\\Imap\\MessageSyncer\:\:processBatch\(\) expects array\<int, bool\>, array\<bool\> given\.$#'
identifier: parameterByRef.type
count: 2
path: src/Service/Imap/MessageSyncer.php
-
message: '#^Property App\\Service\\Label\\LabelChangePropagator\:\:\$mailboxRepository is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: src/Service/Label/LabelChangePropagator.php
-
message: '#^Using nullsafe property access "\?\-\>gmailLabelId" on left side of \?\? is unnecessary\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: src/Service/Label/LabelStructurePropagator.php
-
message: '#^Method App\\Service\\Mail\\GraphApiClient\:\:batchWrite\(\) never assigns null to &\$resultIds so it can be removed from the by\-ref type\.$#'
identifier: parameterByRef.unusedType
count: 1
path: src/Service/Mail/GraphApiClient.php
-
message: '#^Unreachable statement \- code above always terminates\.$#'
identifier: deadCode.unreachable
count: 1
path: src/Service/OAuth/OAuthProviderFactory.php
-
message: '#^Call to an undefined method Symfony\\Component\\HttpFoundation\\Session\\SessionInterface\:\:getFlashBag\(\)\.$#'
identifier: method.notFound
count: 1
path: src/Service/Onboarding/Step/SecurityStepHandler.php
-
message: '#^Access to an undefined property Symfony\\Component\\Security\\Core\\User\\UserInterface\:\:\$id\.$#'
identifier: property.notFound
count: 2
path: src/Service/Rule/FilterDescriber.php
-
message: '#^Call to new App\\Infrastructure\\Encryption\\Encryptor\(\) on a separate line has no effect\.$#'
identifier: new.resultUnused
count: 1
path: tests/Infrastructure/Encryption/EncryptorTest.php
-
message: '#^Call to an undefined method App\\Repository\\Mail\\MessageRepository\:\:method\(\)\.$#'
identifier: method.notFound
count: 1
path: tests/Service/Gmail/GmailApiSyncerBackfillTest.php
-
message: '#^Using nullsafe property access on non\-nullable type App\\Entity\\Mail\\MessageThread\. Use \-\> instead\.$#'
identifier: nullsafe.neverNull
count: 1
path: tests/Service/Imap/MessageThreaderTest.php
-
message: '#^Offset ''body'' does not exist on array\{method\: string, url\: string, options\: array\<string, mixed\>\}\.$#'
identifier: offsetAccess.notFound
count: 2
path: tests/Service/Integration/ImmichDriverTest.php
-
message: '#^Offset ''body'' does not exist on array\{method\: ''SEARCH'', url\: string, options\: array\<string, mixed\>\}\.$#'
identifier: offsetAccess.notFound
count: 1
path: tests/Service/Integration/NextcloudDriverTest.php
-
message: '#^Offset ''body'' does not exist on array\{method\: string, url\: string, options\: array\<string, mixed\>\}\.$#'
identifier: offsetAccess.notFound
count: 1
path: tests/Service/Integration/NextcloudDriverTest.php
-
message: '#^Method App\\Tests\\Service\\Mail\\ThreadSnoozeServiceTest\:\:transport\(\) should return Symfony\\Component\\Messenger\\Transport\\InMemory\\InMemoryTransport but returns Symfony\\Component\\Messenger\\Transport\\TransportInterface\.$#'
identifier: return.type
count: 1
path: tests/Service/Mail/ThreadSnoozeServiceTest.php
-
message: '#^Property App\\Tests\\Service\\Mail\\ThreadSnoozeServiceTest\:\:\$labelRepository is never read, only written\.$#'
identifier: property.onlyWritten
count: 1
path: tests/Service/Mail/ThreadSnoozeServiceTest.php
-
message: '#^Access to an undefined property League\\OAuth2\\Client\\Provider\\AbstractProvider\:\:\$tenant\.$#'
identifier: property.notFound
count: 1
path: tests/Service/OAuth/OAuthProviderFactoryTest.php
-
message: '#^Call to function method_exists\(\) with ''Symfony\\\\Component\\\\Dotenv\\\\Dotenv'' and ''bootEnv'' will always evaluate to true\.$#'
identifier: function.alreadyNarrowedType
count: 1
path: tests/bootstrap.php