mirror of
https://github.com/karatektus/pl_mail.git
synced 2026-10-25 10:04:18 +00:00
`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>
690 lines
28 KiB
Plaintext
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
|