Skip to content

feat(phpstan): enable checkImplicitMixed#331

Merged
danielhe4rt merged 13 commits into
4.xfrom
feat/enable-check-implicit-mixed
Jun 15, 2026
Merged

feat(phpstan): enable checkImplicitMixed#331
danielhe4rt merged 13 commits into
4.xfrom
feat/enable-check-implicit-mixed

Conversation

@gvieira18

@gvieira18 gvieira18 commented Jun 15, 2026

Copy link
Copy Markdown
Member

Note

No logic or behavior changes. All modifications are type annotations, PHPStan stubs, and type-narrowing guards.

Summary

  • Enable checkImplicitMixed: true at PHPStan level 7 — a level-10 rule applied standalone, enforcing proper typing for all variables that would otherwise be inferred as mixed
  • Fix all 287 errors without a baseline across 12+ modules
  • Add Discord PHP library stubs (app-modules/bot-discord/stubs/) for magic Part properties (Member::$user, Guild::$icon, VoiceStateUpdate::$channel_id, etc.)
  • Add @method annotations for Laracord's message() return type on AbstractSlashCommand, WelcomeMember, and PingCommand
  • Type all DB::table()->first() / DB::selectOne() results with @var object{...} shapes (CommunityReport, panel-admin queries, FixPostSwitchTimestamps)
  • Type-narrow Livewire getState() returns, OAuth ->json() payloads, webhook bodies, and middleware $next() calls
  • Clean up 11 now-resolved ignoreErrors entries in bot-discord/phpstan.ignore.neon

Visual Overview

287 → 0 errors — PR summary card

Closes #324

@gvieira18 gvieira18 requested a review from a team June 15, 2026 12:13
@coderabbitai

coderabbitai Bot commented Jun 15, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Enables checkImplicitMixed: true in root PHPStan configuration to enforce level-10 type strictness for new code at level 7. A new discord-php.stub file defines typed declarations for Discord library classes. The bot-discord ignore list shrinks significantly by removing outdated suppression entries. Throughout the codebase, typed intermediate variables are introduced for JSON payloads, database query results, promise calls, form state, and collection iterations. Behavioral changes include: FeedbackException::render() using getCode() instead of $code, PlatformRegistry::resolve() adding an instanceof contract check, TwitchWebhookController defensively normalizing payload fields, DiscordMessageDTO::fromDump() removing is_array normalization, DiscordProfileDTO::fromDump() re-indexing with array_values, and SyncDiscordGuildAction::syncRoles() casting role IDs to strings.

Possibly related issues

Possibly related PRs

  • he4rt/heartdevs.com#329: Updates app-modules/bot-discord/phpstan.ignore.neon with overlapping suppressions for Discord command diagnostics.
  • he4rt/heartdevs.com#310: Voice experience task work that introduced VoiceStateUpdate diagnostics now suppressed in this PR's ignore updates.

Suggested reviewers

  • danielhe4rt
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: enabling PHPStan's checkImplicitMixed rule.
Description check ✅ Passed The description clearly relates to the changeset, explaining the purpose and scope of enabling checkImplicitMixed without behavior changes.
Linked Issues check ✅ Passed The changeset fully addresses issue #324 objectives: enables checkImplicitMixed, adds Discord stubs, types DB results, adds @method annotations, and removes resolved ignoreErrors entries.
Out of Scope Changes check ✅ Passed All changes are in-scope: type annotations, PHPStan stubs, docblocks, and type-narrowing guards. No unrelated logic changes or feature additions present.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app-modules/bot-discord/src/Actions/VoiceChannel/JoiningChannelAction.php`:
- Around line 12-13: The type annotations for the $activeChannels parameter have
a mismatch between the declared contract and actual usage. At line 12-13 and
line 30-31, the annotations declare array<string, VoiceChannelDTO> with string
keys, but the producer code appends elements using [] syntax which creates
integer keys. Update both annotation locations (line 12-13 and line 30-31) to
use list<VoiceChannelDTO> or array<int, VoiceChannelDTO> instead to accurately
reflect that the array uses sequential integer keys, keeping the PHPStan type
contract truthful and consistent with the actual array usage pattern.

In `@app-modules/bot-discord/src/Actions/VoiceChannel/LeftChannelAction.php`:
- Around line 18-19: In the LeftChannelAction class, the in_array check at line
18 is missing the strict comparison flag. Modify the in_array function call that
checks if $user is in $channel->users to include true as the third argument,
changing it from in_array($user, $channel->users) to in_array($user,
$channel->users, true). This ensures Discord user IDs are compared using strict
equality (===) rather than loose comparison (==), preventing potential
type-coercion issues.

In `@app-modules/bot-discord/src/SlashCommands/DontAskCommand.php`:
- Around line 61-63: The `$targetUser` variable retrieved via the `get()` method
call on line 62 can be null if the user is not found in resolved users. Add a
null check immediately after the assignment to guard against this, and return an
appropriate error response (using interaction reply or similar) if `$targetUser`
is null. This will prevent the unconditional dereference of
`$targetUser->avatar` from crashing the handler when the target user cannot be
resolved.

In `@app-modules/bot-discord/src/SlashCommands/ProfileCommand.php`:
- Around line 76-77: The get() method call on
$interaction->data->resolved->users in the ProfileCommand class can return null,
but there is no null check before $mentionedUser is dereferenced at lines 85 and
99 where $mentionedUser->username is accessed. Add a null guard after the get()
assignment to verify that $mentionedUser is not null, and return the appropriate
"not introduced/no profile" response if it is null, preventing the potential
property access error.

In `@app-modules/integration-discord/src/ETL/DTOs/DiscordMessageDTO.php`:
- Around line 31-33: The code does not validate that the `author` value is an
array before accessing it with offset operators. When `$message['author']` is
not an array at runtime, accessing offsets like `$author['username']` and
`$author['id']` will cause a TypeError. Add a type guard to ensure `$author` is
an array before attempting any offset access. This check needs to be applied at
the assignment of `$author` from `$message['author']` (line 31-33 area) to
validate the type, and also apply the same guard pattern at line 53 where a
similar issue occurs with offset access on array data.

In
`@app-modules/panel-admin/src/Filament/Resources/ExternalIdentities/RelationManagers/MessagesRelationManager.php`:
- Around line 281-291: Replace the simple assignment of $reason with explicit
enum casting to ensure the correct type is passed to SubmitReport::handle.
Instead of `$reason = $data['reason'];`, use `$reason =
ViolationType::from($data['reason']);` or `$reason =
ViolationType::tryFrom($data['reason']);` to convert the scalar value returned
by Filament 5.6's Select into the proper ViolationType enum instance before
passing it as the reason parameter to the SubmitReport::handle method call.

In `@app-modules/panel-admin/src/Marketing/Pages/MeetingShowcasePage.php`:
- Around line 81-84: The assignment of $stat->total_messages to $totalMessages
lacks an explicit integer cast, relying only on the PHPStan ignore comment for
type safety. If the database COUNT(*) query returns a string instead of an
integer, the call to extractDiscordData() will throw a TypeError since it
expects an int parameter. Restore the explicit integer cast by wrapping
$stat->total_messages with (int) when assigning it to $totalMessages to ensure
runtime type coercion.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 7180a358-57f9-4ca0-aa2b-b5874abe928a

📥 Commits

Reviewing files that changed from the base of the PR and between c48149f and b5d4190.

📒 Files selected for processing (64)
  • app-modules/bot-discord/phpstan.ignore.neon
  • app-modules/bot-discord/phpstan.neon
  • app-modules/bot-discord/src/Actions/VoiceChannel/JoiningChannelAction.php
  • app-modules/bot-discord/src/Actions/VoiceChannel/LeftChannelAction.php
  • app-modules/bot-discord/src/Commands/PingCommand.php
  • app-modules/bot-discord/src/DTO/VoiceChannelDTO.php
  • app-modules/bot-discord/src/Events/RawGatewayEvent.php
  • app-modules/bot-discord/src/Events/WelcomeMember.php
  • app-modules/bot-discord/src/SlashCommands/AbstractSlashCommand.php
  • app-modules/bot-discord/src/SlashCommands/CargoDelasCommand.php
  • app-modules/bot-discord/src/SlashCommands/DontAskCommand.php
  • app-modules/bot-discord/src/SlashCommands/DynamicVoiceCommand.php
  • app-modules/bot-discord/src/SlashCommands/EditProfileCommand.php
  • app-modules/bot-discord/src/SlashCommands/EditVoiceChannelLimitCommand.php
  • app-modules/bot-discord/src/SlashCommands/IntroductionCommand.php
  • app-modules/bot-discord/src/SlashCommands/ProfileCommand.php
  • app-modules/bot-discord/stubs/discord-php.stub
  • app-modules/community/src/Feedback/Exceptions/FeedbackException.php
  • app-modules/docs/src/Discovery/Actions/ParseDocumentMetadataAction.php
  • app-modules/docs/src/DocsServiceProvider.php
  • app-modules/integration-discord/src/ETL/Actions/ImportDiscordMessageAction.php
  • app-modules/integration-discord/src/ETL/Adapters/DiscordMessageAdapter.php
  • app-modules/integration-discord/src/ETL/Console/ImportDiscordMessagesCommand.php
  • app-modules/integration-discord/src/ETL/Console/ImportDiscordProfilesCommand.php
  • app-modules/integration-discord/src/ETL/Console/MergeDuplicateDiscordProfilesCommand.php
  • app-modules/integration-discord/src/ETL/DTOs/DiscordMessageDTO.php
  • app-modules/integration-discord/src/ETL/DTOs/DiscordProfileDTO.php
  • app-modules/integration-discord/src/OAuth/DiscordOAuthClient.php
  • app-modules/integration-discord/src/Sync/Actions/SyncDiscordGuildAction.php
  • app-modules/integration-github/src/Backfill/BackfillRepository.php
  • app-modules/integration-github/src/OAuth/GitHubOAuthClient.php
  • app-modules/integration-github/src/Webhook/ProjectGithubEvent.php
  • app-modules/integration-github/src/Webhook/VerifyGithubSignature.php
  • app-modules/integration-twitch/src/Console/SubscribeTwitchEventsCommand.php
  • app-modules/integration-twitch/src/Http/Controllers/TwitchWebhookController.php
  • app-modules/integration-twitch/src/Http/Middleware/VerifyTwitchSignature.php
  • app-modules/integration-twitch/src/OAuth/TwitchOAuthClient.php
  • app-modules/integration-whatsapp/src/Ingest/Http/Middleware/VerifyWhatsAppSignature.php
  • app-modules/moderation/src/Platform/PlatformRegistry.php
  • app-modules/panel-admin/src/Filament/Resources/ExternalIdentities/RelationManagers/MessagesRelationManager.php
  • app-modules/panel-admin/src/Http/Middleware/ApplyTenantScopes.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/ActivityPerDay.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/MessageHeatmap.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/PeriodStats.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/TopChannels.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/VoiceHeatmap.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/VoicePerDay.php
  • app-modules/panel-admin/src/Marketing/Pages/MeetingShowcasePage.php
  • app-modules/panel-admin/src/Moderation/Livewire/AppealQueue.php
  • app-modules/panel-admin/src/Moderation/Livewire/ModerationDashboardLivewire.php
  • app-modules/panel-admin/src/Moderation/Resources/ModerationAppealResource.php
  • app-modules/panel-admin/src/Moderation/Resources/ModerationRuleResource.php
  • app-modules/panel-admin/src/Moderation/Widgets/ModeratorPerformanceWidget.php
  • app-modules/panel-app/phpstan.ignore.neon
  • app-modules/panel-app/src/Livewire/Timeline/Composer.php
  • app-modules/panel-app/src/Livewire/Timeline/PostShow.php
  • app-modules/panel-app/src/Livewire/Timeline/ReplyComposer.php
  • app-modules/panel-app/src/Pages/ProfilePage.php
  • app-modules/portal/src/Livewire/HeroSection.php
  • app/Console/Commands/AnalyzeDiscordProfiles.php
  • app/Console/Commands/CommunityReport.php
  • app/Console/Commands/FixPostSwitchTimestampsCommand.php
  • phpstan.ignore.neon
  • phpstan.neon

Comment thread app-modules/bot-discord/src/Actions/VoiceChannel/JoiningChannelAction.php Outdated
Comment thread app-modules/bot-discord/src/Actions/VoiceChannel/LeftChannelAction.php Outdated
Comment thread app-modules/bot-discord/src/SlashCommands/DontAskCommand.php
Comment thread app-modules/bot-discord/src/SlashCommands/ProfileCommand.php
Comment thread app-modules/integration-discord/src/ETL/DTOs/DiscordMessageDTO.php
Comment thread app-modules/panel-admin/src/Marketing/Pages/MeetingShowcasePage.php Outdated
gvieira18 added 13 commits June 15, 2026 19:10
type annotations

Add PHPStan stubs for Discord PHP library magic
properties and @method annotations for Laracord's
message() return type. Fixes 73 implicit mixed
errors and removes 11 now-resolved ignoreErrors.
errors

Fix parameter types, Discord collection return types,
modal component values, and Promise await calls.
Resolves all 106 bot-discord implicit mixed errors.
Add @var object shape annotations to all DB::table()
and DB::selectOne() results. Resolves 68 implicit
mixed errors from raw query stdClass properties.
widgets

Add @var object shape annotations to DB query results,
type closure parameters, and narrow form data in
Filament resources and moderation widgets.
Add form property PHPDoc, type-narrow getState()
results, and type eager-load closure parameters
in Timeline and Profile components.
payloads

Type OAuth response payloads, webhook body access,
middleware next() returns, and ETL command options
across Discord, Twitch, GitHub, and WhatsApp modules.
Fix implicit mixed in docs, community, moderation,
portal, and console commands via @var annotations,
type guards, and closure parameter typing.
All 287 implicit mixed errors resolved without a
baseline. New code must properly type variables
that would otherwise be inferred as mixed.
type annotation

Use early return + @var to survive pint formatting.
Stub find()/get() with generic return types on
CollectionInterface and Resolved, removing 6
ignoreErrors for Role/User collection access.
array<string, VoiceChannelDTO> → list<VoiceChannelDTO> to match
actual int-keyed append pattern. Add strict in_array
comparison for user ID lookups.
Use getAttribute() for dynamic aggregate columns instead
of magic property access. Use Attribute::make(set:) with
typed closure param to resolve Larastan generic mismatch.
@gvieira18 gvieira18 force-pushed the feat/enable-check-implicit-mixed branch from a6f505c to 7047058 Compare June 15, 2026 22:14

@Leticia-Freitasb Leticia-Freitasb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGMT!!

@danielhe4rt danielhe4rt left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! vai brasil

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app-modules/bot-discord/src/SlashCommands/IntroductionCommand.php`:
- Around line 138-147: The type annotations for nameComponent,
nicknameComponent, and aboutComponent claim non-null values, but the get()
method calls that populate them can return null (as acknowledged by the
null-safe operators used elsewhere in the code at lines 103-105). Fix the
inconsistency by adding nullable type annotations to these three variables and
using null coalescing operators when accessing their value properties, similar
to the pattern used in EditProfileCommand. This ensures the code safely handles
cases where the get() method returns null rather than crashing on direct
property access.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 3553b9a0-04a9-4757-aa2b-5ccad2f94f82

📥 Commits

Reviewing files that changed from the base of the PR and between a6f505c and 7047058.

📒 Files selected for processing (65)
  • app-modules/bot-discord/phpstan.ignore.neon
  • app-modules/bot-discord/phpstan.neon
  • app-modules/bot-discord/src/Actions/VoiceChannel/JoiningChannelAction.php
  • app-modules/bot-discord/src/Actions/VoiceChannel/LeftChannelAction.php
  • app-modules/bot-discord/src/Commands/PingCommand.php
  • app-modules/bot-discord/src/DTO/VoiceChannelDTO.php
  • app-modules/bot-discord/src/Events/RawGatewayEvent.php
  • app-modules/bot-discord/src/Events/WelcomeMember.php
  • app-modules/bot-discord/src/SlashCommands/AbstractSlashCommand.php
  • app-modules/bot-discord/src/SlashCommands/CargoDelasCommand.php
  • app-modules/bot-discord/src/SlashCommands/DontAskCommand.php
  • app-modules/bot-discord/src/SlashCommands/DynamicVoiceCommand.php
  • app-modules/bot-discord/src/SlashCommands/EditProfileCommand.php
  • app-modules/bot-discord/src/SlashCommands/EditVoiceChannelLimitCommand.php
  • app-modules/bot-discord/src/SlashCommands/IntroductionCommand.php
  • app-modules/bot-discord/src/SlashCommands/ProfileCommand.php
  • app-modules/bot-discord/stubs/discord-php.stub
  • app-modules/community/src/Feedback/Exceptions/FeedbackException.php
  • app-modules/docs/src/Discovery/Actions/ParseDocumentMetadataAction.php
  • app-modules/docs/src/DocsServiceProvider.php
  • app-modules/integration-discord/src/ETL/Actions/ImportDiscordMessageAction.php
  • app-modules/integration-discord/src/ETL/Adapters/DiscordMessageAdapter.php
  • app-modules/integration-discord/src/ETL/Console/ImportDiscordMessagesCommand.php
  • app-modules/integration-discord/src/ETL/Console/ImportDiscordProfilesCommand.php
  • app-modules/integration-discord/src/ETL/Console/MergeDuplicateDiscordProfilesCommand.php
  • app-modules/integration-discord/src/ETL/DTOs/DiscordMessageDTO.php
  • app-modules/integration-discord/src/ETL/DTOs/DiscordProfileDTO.php
  • app-modules/integration-discord/src/OAuth/DiscordOAuthClient.php
  • app-modules/integration-discord/src/Sync/Actions/SyncDiscordGuildAction.php
  • app-modules/integration-github/src/Backfill/BackfillRepository.php
  • app-modules/integration-github/src/OAuth/GitHubOAuthClient.php
  • app-modules/integration-github/src/Webhook/ProjectGithubEvent.php
  • app-modules/integration-github/src/Webhook/VerifyGithubSignature.php
  • app-modules/integration-twitch/src/Console/SubscribeTwitchEventsCommand.php
  • app-modules/integration-twitch/src/Http/Controllers/TwitchWebhookController.php
  • app-modules/integration-twitch/src/Http/Middleware/VerifyTwitchSignature.php
  • app-modules/integration-twitch/src/OAuth/TwitchOAuthClient.php
  • app-modules/integration-whatsapp/src/Ingest/Http/Middleware/VerifyWhatsAppSignature.php
  • app-modules/moderation/src/Platform/PlatformRegistry.php
  • app-modules/panel-admin/src/Filament/Resources/ExternalIdentities/RelationManagers/MessagesRelationManager.php
  • app-modules/panel-admin/src/Http/Middleware/ApplyTenantScopes.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/ActivityPerDay.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/MessageHeatmap.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/PeriodStats.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/TopChannels.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/VoiceHeatmap.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/VoicePerDay.php
  • app-modules/panel-admin/src/Marketing/Pages/MeetingShowcasePage.php
  • app-modules/panel-admin/src/Moderation/Livewire/AppealQueue.php
  • app-modules/panel-admin/src/Moderation/Livewire/ModerationDashboardLivewire.php
  • app-modules/panel-admin/src/Moderation/Resources/ModerationAppealResource.php
  • app-modules/panel-admin/src/Moderation/Resources/ModerationRuleResource.php
  • app-modules/panel-admin/src/Moderation/Widgets/ModeratorPerformanceWidget.php
  • app-modules/panel-app/phpstan.ignore.neon
  • app-modules/panel-app/src/Livewire/Timeline/Composer.php
  • app-modules/panel-app/src/Livewire/Timeline/PostShow.php
  • app-modules/panel-app/src/Livewire/Timeline/ReplyComposer.php
  • app-modules/panel-app/src/Pages/ProfilePage.php
  • app-modules/portal/src/Livewire/HeroSection.php
  • app-modules/profile/src/Models/Profile.php
  • app/Console/Commands/AnalyzeDiscordProfiles.php
  • app/Console/Commands/CommunityReport.php
  • app/Console/Commands/FixPostSwitchTimestampsCommand.php
  • phpstan.ignore.neon
  • phpstan.neon
✅ Files skipped from review due to trivial changes (16)
  • app-modules/bot-discord/src/SlashCommands/CargoDelasCommand.php
  • app-modules/bot-discord/src/Commands/PingCommand.php
  • app-modules/integration-discord/src/ETL/Console/ImportDiscordProfilesCommand.php
  • app-modules/integration-github/src/Backfill/BackfillRepository.php
  • app-modules/bot-discord/phpstan.neon
  • app-modules/panel-admin/src/Moderation/Resources/ModerationRuleResource.php
  • app-modules/panel-admin/src/Moderation/Widgets/ModeratorPerformanceWidget.php
  • app-modules/integration-discord/src/ETL/Actions/ImportDiscordMessageAction.php
  • app-modules/integration-github/src/Webhook/ProjectGithubEvent.php
  • app-modules/integration-discord/src/OAuth/DiscordOAuthClient.php
  • app-modules/bot-discord/src/DTO/VoiceChannelDTO.php
  • app-modules/bot-discord/src/SlashCommands/AbstractSlashCommand.php
  • app-modules/docs/src/Discovery/Actions/ParseDocumentMetadataAction.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/VoiceHeatmap.php
  • app-modules/bot-discord/src/Actions/VoiceChannel/JoiningChannelAction.php
  • app-modules/integration-twitch/src/Http/Middleware/VerifyTwitchSignature.php
🚧 Files skipped from review as they are similar to previous changes (45)
  • phpstan.neon
  • app-modules/integration-whatsapp/src/Ingest/Http/Middleware/VerifyWhatsAppSignature.php
  • app-modules/bot-discord/src/Events/RawGatewayEvent.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/ActivityPerDay.php
  • app-modules/integration-discord/src/ETL/Console/MergeDuplicateDiscordProfilesCommand.php
  • app-modules/integration-twitch/src/Console/SubscribeTwitchEventsCommand.php
  • app-modules/integration-discord/src/ETL/Adapters/DiscordMessageAdapter.php
  • phpstan.ignore.neon
  • app-modules/integration-discord/src/Sync/Actions/SyncDiscordGuildAction.php
  • app-modules/bot-discord/src/SlashCommands/DontAskCommand.php
  • app-modules/panel-app/src/Livewire/Timeline/ReplyComposer.php
  • app-modules/panel-app/src/Livewire/Timeline/PostShow.php
  • app-modules/panel-admin/src/Filament/Resources/ExternalIdentities/RelationManagers/MessagesRelationManager.php
  • app-modules/docs/src/DocsServiceProvider.php
  • app-modules/bot-discord/src/SlashCommands/ProfileCommand.php
  • app-modules/community/src/Feedback/Exceptions/FeedbackException.php
  • app/Console/Commands/AnalyzeDiscordProfiles.php
  • app-modules/integration-discord/src/ETL/Console/ImportDiscordMessagesCommand.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/PeriodStats.php
  • app-modules/portal/src/Livewire/HeroSection.php
  • app-modules/integration-discord/src/ETL/DTOs/DiscordMessageDTO.php
  • app-modules/profile/src/Models/Profile.php
  • app-modules/panel-app/src/Pages/ProfilePage.php
  • app-modules/bot-discord/src/SlashCommands/EditVoiceChannelLimitCommand.php
  • app-modules/moderation/src/Platform/PlatformRegistry.php
  • app-modules/panel-admin/src/Marketing/Pages/MeetingShowcasePage.php
  • app-modules/integration-discord/src/ETL/DTOs/DiscordProfileDTO.php
  • app-modules/panel-admin/src/Moderation/Resources/ModerationAppealResource.php
  • app/Console/Commands/FixPostSwitchTimestampsCommand.php
  • app-modules/panel-app/src/Livewire/Timeline/Composer.php
  • app-modules/integration-twitch/src/Http/Controllers/TwitchWebhookController.php
  • app-modules/bot-discord/src/SlashCommands/EditProfileCommand.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/VoicePerDay.php
  • app-modules/bot-discord/src/Actions/VoiceChannel/LeftChannelAction.php
  • app-modules/panel-admin/src/Moderation/Livewire/AppealQueue.php
  • app-modules/panel-admin/src/Http/Middleware/ApplyTenantScopes.php
  • app-modules/integration-twitch/src/OAuth/TwitchOAuthClient.php
  • app-modules/panel-app/phpstan.ignore.neon
  • app-modules/bot-discord/phpstan.ignore.neon
  • app-modules/bot-discord/src/SlashCommands/DynamicVoiceCommand.php
  • app-modules/panel-admin/src/Marketing/Pages/Discord/Dashboard/Queries/MessageHeatmap.php
  • app-modules/bot-discord/stubs/discord-php.stub
  • app-modules/panel-admin/src/Moderation/Livewire/ModerationDashboardLivewire.php
  • app-modules/integration-github/src/OAuth/GitHubOAuthClient.php
  • app/Console/Commands/CommunityReport.php

Comment thread app-modules/bot-discord/src/SlashCommands/IntroductionCommand.php

@LithLG LithLG left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@danielhe4rt danielhe4rt merged commit 9af5ded into 4.x Jun 15, 2026
6 checks passed
@danielhe4rt danielhe4rt deleted the feat/enable-check-implicit-mixed branch June 15, 2026 22:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(he4rt): enable checkImplicitMixed (level 10 rule)

4 participants