Skip to content

fix: resolve PHPStan errors, missing imports, and sync Pint config#191

Merged
danielhe4rt merged 4 commits into4.xfrom
fix/imports-phpstan
Mar 23, 2026
Merged

fix: resolve PHPStan errors, missing imports, and sync Pint config#191
danielhe4rt merged 4 commits into4.xfrom
fix/imports-phpstan

Conversation

@gvieira18
Copy link
Member

@gvieira18 gvieira18 commented Mar 23, 2026

Summary

  • Fixes production bug: Adds the missing use LinkExternalIdentity import in ResolveUserContext.php, which was causing Target class does not exist errors on Discord message processing, welcome member events, and the /introduction slash command
  • Enables PHPStan for all app-modules: Adds phpstan.neon and phpstan.ignore.neon to 11 modules (all except panel-admin and events), leveraging the existing phpstan.modules.php auto-discovery
  • Resolves all 167 PHPStan level 6 errors: Type annotations, real bug fixes (dead Character::wallet() HasOne, MessagesController DTO wrapping, incomplete match expressions, narrowed return types), and suppressions for PHPStan limitations (Discord PHP dynamic properties, Filament magic methods)
  • Syncs Pint config with sycorax: Updated pint.json and reformatted codebase accordingly

Test plan

  • ./vendor/bin/phpstan analyse passes with 0 errors
  • php artisan test — 119 passed, 0 failures
  • Verify Discord bot message processing works (send a message)
  • Verify /introduction slash command works
  • Verify welcome member event works

Summary by CodeRabbit

  • Chores

    • Added PHPStan configuration to modules for improved static code analysis.
    • Enhanced type safety with PHPDoc annotations across codebase.
    • Normalized code formatting and operator spacing for consistency.
    • Updated code quality tools configuration.
  • Bug Fixes

    • Added validation for reputation type operations.
  • Refactor

    • Improved method signatures with explicit type hints.

…ll modules

Add the missing `use` import for LinkExternalIdentity in ResolveUserContext,
which was causing runtime failures on Discord message processing, welcome
member events, and the /introduction slash command.

Also adds phpstan.neon and phpstan.ignore.neon configs to all app-modules
(except panel-admin) so they are included in static analysis via the
existing phpstan.modules.php auto-discovery mechanism.
@coderabbitai
Copy link

coderabbitai bot commented Mar 23, 2026

📝 Walkthrough

Walkthrough

Added per-module PHPStan configurations: each module received phpstan.neon that includes a module-specific phpstan.ignore.neon and sets parameters.paths to src/. Several phpstan.ignore.neon files include targeted ignore rules (some are empty lists). In addition, many files across modules received PHPDoc/type annotation updates, minor whitespace/formatting normalizations, a few method signature refinements (notably some stricter parameter/return types), and ResolveUserContext now imports LinkExternalIdentity as a constructor dependency.

Possibly related PRs

Suggested reviewers

  • danielhe4rt
  • thalesmengue
🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 60.98% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix: resolve PHPStan errors, missing imports, and sync Pint config' accurately summarizes the main changes in the pull request, which include resolving PHPStan errors, adding missing imports, and synchronizing Pint configuration.

✏️ 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.

Copy link

@coderabbitai coderabbitai bot left a comment

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 the current code and only fix it if needed.

Inline comments:
In `@app-modules/bot-discord/phpstan.ignore.neon`:
- Around line 1-2: The NEON config currently leaves parameters.ignoreErrors
without a value (null); change parameters.ignoreErrors to an explicit empty list
so PHPStan sees an array — update the NEON so the key parameters.ignoreErrors is
defined as an empty sequence (e.g., parameters.ignoreErrors: []) to satisfy
PHPStan’s requirement.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4aa98821-5a12-4317-bff7-3236b0720f9b

📥 Commits

Reviewing files that changed from the base of the PR and between 40a0a58 and 6a5fd0f.

📒 Files selected for processing (23)
  • app-modules/activity/phpstan.ignore.neon
  • app-modules/activity/phpstan.neon
  • app-modules/bot-discord/phpstan.ignore.neon
  • app-modules/bot-discord/phpstan.neon
  • app-modules/community/phpstan.ignore.neon
  • app-modules/community/phpstan.neon
  • app-modules/docs/phpstan.ignore.neon
  • app-modules/docs/phpstan.neon
  • app-modules/economy/phpstan.ignore.neon
  • app-modules/economy/phpstan.neon
  • app-modules/gamification/phpstan.ignore.neon
  • app-modules/gamification/phpstan.neon
  • app-modules/he4rt/phpstan.ignore.neon
  • app-modules/he4rt/phpstan.neon
  • app-modules/identity/phpstan.ignore.neon
  • app-modules/identity/phpstan.neon
  • app-modules/identity/src/User/Actions/ResolveUserContext.php
  • app-modules/integration-discord/phpstan.ignore.neon
  • app-modules/integration-discord/phpstan.neon
  • app-modules/integration-twitch/phpstan.ignore.neon
  • app-modules/integration-twitch/phpstan.neon
  • app-modules/portal/phpstan.ignore.neon
  • app-modules/portal/phpstan.neon

- Fix real bugs: remove dead Character::wallet() HasOne (conflicts with
  HasWallet trait), wrap MessagesController with NewMessageDTO::make(),
  add default arms to match expressions, narrow IdentityProvider return type
- Add type annotations: PHPDoc @param/@return for DTOs, Requests, Actions,
  Eloquent Attributes, HasFactory generics, and model @Property declarations
- Suppress PHPStan limitations: Discord PHP dynamic properties, Filament
  magic methods, and library type compatibility in ignore files

PHPStan now passes with 0 errors across all modules.
- Remove spaces after the not (!) operator across all files
- Ensure code style aligns with PHPStan and Pint configuration
- Update Pint config to enforce new rules:
  - 'not_operator_with_successor_space'
  - 'unary_operator_spaces'
@gvieira18 gvieira18 changed the title fix: add missing LinkExternalIdentity import and enable PHPStan for all modules fix: resolve PHPStan errors, missing imports, and sync Pint config Mar 23, 2026
Empty `ignoreErrors:` parses as null in NEON format. PHPStan requires
it to be an array. Changed to `ignoreErrors: []` in modules with no
suppressed errors.
@gvieira18 gvieira18 self-assigned this Mar 23, 2026
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
app-modules/community/src/Meeting/Models/MeetingType.php (1)

52-61: ⚠️ Potential issue | 🟡 Minor

Avoid silent empty fallback for invalid weekday values.

On Line 60, default => '' can hide invalid week_day data and produce blank labels in the UI. Prefer an explicit fallback value (or fail fast) so bad data is visible.

Suggested adjustment
         return Attribute::get(fn () => match ($this->week_day) {
             0 => 'Domingo',
             1 => 'Segunda Feira',
             2 => 'Terça Feira',
             3 => 'Quarta Feira',
             4 => 'Quinta Feira',
             5 => 'Sexta Feira',
             6 => 'Sábado',
-            default => '',
+            default => 'Dia inválido',
         });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app-modules/community/src/Meeting/Models/MeetingType.php` around lines 52 -
61, The Attribute accessor in MeetingType (the anonymous accessor returned by
Attribute::get) currently uses default => '' which hides invalid week_day
values; change the fallback to an explicit indicator (for example return
'Invalid weekday' or similar) or throw a clear exception (e.g.,
InvalidArgumentException) so invalid data is visible; update the match default
arm in the MeetingType week_day Attribute getter to return that explicit message
or throw, ensuring any UI or logging surfaces bad data instead of a blank
string.
app-modules/identity/src/ExternalIdentity/Enums/IdentityProvider.php (1)

59-69: ⚠️ Potential issue | 🟡 Minor

Fix empty-string handling in getScopes().

When Twitch scopes are not configured (empty string default), explode(' ', '') returns [''] instead of []. This violates the semantic expectation that an empty scope list should be empty.

💡 Suggested fix
 /**
  * `@return` array<int, string>
  */
 public function getScopes(): array
 {
     $scopes = match ($this) {
         self::Discord => config('services.discord.scopes'),
         self::Twitch => config('services.twitch.scopes'),
     };

-    return explode(' ', $scopes);
+    return array_filter(explode(' ', $scopes), fn (string $scope): bool => $scope !== '');
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app-modules/identity/src/ExternalIdentity/Enums/IdentityProvider.php` around
lines 59 - 69, The getScopes() method in the IdentityProvider enum returns
explode(' ', $scopes) which yields [''] when $scopes is an empty string; change
getScopes() to normalize the retrieved $scopes (e.g., trim and check for empty)
and return an empty array for empty or whitespace-only scope strings, otherwise
split on space and filter out any empty entries (ensure this logic is applied
for the cases self::Discord and self::Twitch in the getScopes() function).
app-modules/gamification/src/Character/Models/Character.php (2)

149-157: ⚠️ Potential issue | 🟡 Minor

Clamp remaining XP to prevent negative progress values.

Line 156 can become negative when experience is above the highest threshold. Returning a non-negative value keeps downstream UI/API consumers stable.

Proposed fix
-            return $nextThreshold - $this->experience;
+            return max(0, $nextThreshold - $this->experience);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app-modules/gamification/src/Character/Models/Character.php` around lines 149
- 157, The experienceProgress accessor can return a negative number when
experience exceeds the highest threshold; update the Attribute::get closure in
experienceProgress() to compute remaining XP as max(0, $nextThreshold -
$this->experience) (i.e., clamp negative values to zero) so downstream UI/API
consumers always get a non-negative progress value, referencing the existing
experienceProgress() method and LEVEL_THRESHOLDS constants.

197-197: ⚠️ Potential issue | 🟡 Minor

Use absolute difference for daily-bonus time checks.

Line 197 uses diffInHours(now()), which returns a signed difference in Carbon 3+. Since daily_bonus_claimed_at is a past date, the result will be negative, causing the eligibility check >= 24 to always fail. Use diffInHours(now(), true) to get the absolute difference instead.

Proposed fix
-            return Date::parse($this->daily_bonus_claimed_at)->diffInHours(now()) >= 24;
+            return Date::parse($this->daily_bonus_claimed_at)->diffInHours(now(), true) >= 24;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app-modules/gamification/src/Character/Models/Character.php` at line 197, The
daily-bonus eligibility check in Character.php uses
Date::parse($this->daily_bonus_claimed_at)->diffInHours(now()) which with Carbon
3 can return a negative value; change the call to use an absolute difference by
passing true as the second argument (i.e., diffInHours(now(), true)) so the
expression in the method that checks daily bonus eligibility returns the
absolute hours difference and correctly evaluates >= 24.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app-modules/bot-discord/src/Actions/VoiceChannel/JoiningChannelAction.php`:
- Line 14: Handle the type mismatch by casting the user ID to string before
calling JoiningChannelAction::execute: in HandleStateChannelAction where you
call resolve(JoiningChannelAction::class)->execute(... user: $userId ...),
change the argument to user: (string)$userId so the execute(string $user)
signature is satisfied at runtime; update both call sites in
HandleStateChannelAction that pass $userId to JoiningChannelAction::execute.

In `@app-modules/bot-discord/src/Actions/VoiceChannel/LeftChannelAction.php`:
- Line 14: LeftChannelAction::execute currently expects string $user but
HandleStateChannelAction passes int|string $userId causing a TypeError; update
HandleStateChannelAction to cast $userId to string at every call to
LeftChannelAction::execute and JoiningChannelAction::execute (i.e. pass user:
(string) $userId) so both call sites consistently provide a string, ensuring
type compatibility with LeftChannelAction::execute and
JoiningChannelAction::execute.

In `@app-modules/identity/src/User/Http/Controllers/UsersController.php`:
- Around line 58-60: In UsersController update the response fields that access
the nullable HasOne relation `character` — specifically the 'badges' and
'pastSeasons' entries — to use PHP's nullsafe access so they don't throw when
`$user->character` is null; replace direct property traversal of
`$user->character->badges` and `$user->character->pastSeasons` with nullsafe
access and keep the current fallback to an empty array so the profile response
remains valid for users without a Character.

---

Outside diff comments:
In `@app-modules/community/src/Meeting/Models/MeetingType.php`:
- Around line 52-61: The Attribute accessor in MeetingType (the anonymous
accessor returned by Attribute::get) currently uses default => '' which hides
invalid week_day values; change the fallback to an explicit indicator (for
example return 'Invalid weekday' or similar) or throw a clear exception (e.g.,
InvalidArgumentException) so invalid data is visible; update the match default
arm in the MeetingType week_day Attribute getter to return that explicit message
or throw, ensuring any UI or logging surfaces bad data instead of a blank
string.

In `@app-modules/gamification/src/Character/Models/Character.php`:
- Around line 149-157: The experienceProgress accessor can return a negative
number when experience exceeds the highest threshold; update the Attribute::get
closure in experienceProgress() to compute remaining XP as max(0, $nextThreshold
- $this->experience) (i.e., clamp negative values to zero) so downstream UI/API
consumers always get a non-negative progress value, referencing the existing
experienceProgress() method and LEVEL_THRESHOLDS constants.
- Line 197: The daily-bonus eligibility check in Character.php uses
Date::parse($this->daily_bonus_claimed_at)->diffInHours(now()) which with Carbon
3 can return a negative value; change the call to use an absolute difference by
passing true as the second argument (i.e., diffInHours(now(), true)) so the
expression in the method that checks daily bonus eligibility returns the
absolute hours difference and correctly evaluates >= 24.

In `@app-modules/identity/src/ExternalIdentity/Enums/IdentityProvider.php`:
- Around line 59-69: The getScopes() method in the IdentityProvider enum returns
explode(' ', $scopes) which yields [''] when $scopes is an empty string; change
getScopes() to normalize the retrieved $scopes (e.g., trim and check for empty)
and return an empty array for empty or whitespace-only scope strings, otherwise
split on space and filter out any empty entries (ensure this logic is applied
for the cases self::Discord and self::Twitch in the getScopes() function).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: f327184b-b34e-4b88-84e2-9a3beaf8fc3c

📥 Commits

Reviewing files that changed from the base of the PR and between 6a5fd0f and 96de936.

📒 Files selected for processing (115)
  • app-modules/activity/database/migrations/2023_01_18_211845_create_messages_table.php
  • app-modules/activity/database/migrations/2023_02_10_224951_create_voice_messages_table.php
  • app-modules/activity/phpstan.ignore.neon
  • app-modules/activity/src/Actions/NewVoiceMessage.php
  • app-modules/activity/src/DTOs/NewMessageDTO.php
  • app-modules/activity/src/DTOs/NewVoiceMessageDTO.php
  • app-modules/activity/src/Http/Controllers/MessagesController.php
  • app-modules/activity/src/Http/Requests/CreateMessageRequest.php
  • app-modules/activity/src/Http/Requests/CreateVoiceMessageRequest.php
  • app-modules/activity/src/Models/Message.php
  • app-modules/bot-discord/phpstan.ignore.neon
  • app-modules/bot-discord/src/Actions/VoiceChannel/HandleStateChannelAction.php
  • 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/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/community/database/migrations/2022_12_07_005119_create_meeting_types_table.php
  • app-modules/community/database/migrations/2022_12_07_005347_create_meetings_table.php
  • app-modules/community/database/migrations/2022_12_07_005627_create_meeting_participants_table.php
  • app-modules/community/phpstan.ignore.neon
  • app-modules/community/src/Feedback/Actions/CreateFeedback.php
  • app-modules/community/src/Feedback/DTOs/FeedbackReviewDTO.php
  • app-modules/community/src/Feedback/DTOs/NewFeedbackDTO.php
  • app-modules/community/src/Feedback/Enums/ReviewTypeEnum.php
  • app-modules/community/src/Feedback/Exceptions/FeedbackException.php
  • app-modules/community/src/Feedback/Http/Requests/CreateFeedbackRequest.php
  • app-modules/community/src/Feedback/Http/Requests/FeedbackReviewRequest.php
  • app-modules/community/src/Feedback/Models/Feedback.php
  • app-modules/community/src/Feedback/Models/Review.php
  • app-modules/community/src/Meeting/Http/Requests/MeetingRequest.php
  • app-modules/community/src/Meeting/Models/Meeting.php
  • app-modules/community/src/Meeting/Models/MeetingType.php
  • app-modules/docs/phpstan.ignore.neon
  • app-modules/docs/routes/docs-routes.php
  • app-modules/docs/src/DocsController.php
  • app-modules/docs/src/Documentation.php
  • app-modules/economy/phpstan.ignore.neon
  • app-modules/economy/src/Models/Transaction.php
  • app-modules/economy/src/Models/Wallet.php
  • app-modules/events/src/Filament/Shared/EventLogin.php
  • app-modules/events/src/Filament/Shared/Widgets/ActiveEventsStats.php
  • app-modules/events/src/Models/EventModel.php
  • app-modules/gamification/database/migrations/2023_01_14_053138_create_characters_table.php
  • app-modules/gamification/database/migrations/2023_01_20_193234_create_badges_table.php
  • app-modules/gamification/database/migrations/2023_01_22_152940_create_characters_badges_table.php
  • app-modules/gamification/database/migrations/2023_01_30_174411_create_seasons_table.php
  • app-modules/gamification/phpstan.ignore.neon
  • app-modules/gamification/src/Badge/Actions/CreateBadge.php
  • app-modules/gamification/src/Badge/DTOs/NewBadgeDTO.php
  • app-modules/gamification/src/Badge/Http/Requests/CreateBadgeRequest.php
  • app-modules/gamification/src/Badge/Models/Badge.php
  • app-modules/gamification/src/Character/Actions/ManageReputation.php
  • app-modules/gamification/src/Character/Http/Requests/ClaimBadgeRequest.php
  • app-modules/gamification/src/Character/Models/Character.php
  • app-modules/gamification/src/Character/Models/PastSeason.php
  • app-modules/gamification/src/Season/Models/Season.php
  • app-modules/he4rt/phpstan.ignore.neon
  • app-modules/identity/database/migrations/2014_10_12_000000_create_users_table.php
  • app-modules/identity/database/migrations/2014_10_12_100000_create_password_resets_table.php
  • app-modules/identity/database/migrations/2023_01_18_210724_create_providers_table.php
  • app-modules/identity/database/migrations/2025_11_07_162624_create_providers_tokens_table.php
  • app-modules/identity/phpstan.ignore.neon
  • app-modules/identity/src/Auth/Actions/AuthenticateAction.php
  • app-modules/identity/src/Auth/DTOs/OAuthAccessDTO.php
  • app-modules/identity/src/Auth/DTOs/OAuthStateDTO.php
  • app-modules/identity/src/Auth/DTOs/OAuthUserDTO.php
  • app-modules/identity/src/ExternalIdentity/DTOs/NewProviderDTO.php
  • app-modules/identity/src/ExternalIdentity/DTOs/ResolveUserProviderDTO.php
  • app-modules/identity/src/ExternalIdentity/Enums/IdentityProvider.php
  • app-modules/identity/src/ExternalIdentity/Http/Requests/CreateProviderRequest.php
  • app-modules/identity/src/ExternalIdentity/Models/ExternalIdentity.php
  • app-modules/identity/src/Filament/User/Pages/Dashboard.php
  • app-modules/identity/src/Filament/User/Pages/UserProfile.php
  • app-modules/identity/src/Tenant/Concerns/InteractsWithTenants.php
  • app-modules/identity/src/Tenant/Models/Tenant.php
  • app-modules/identity/src/User/DTOs/UpdateProfileDTO.php
  • app-modules/identity/src/User/DTOs/UpsertInformationDTO.php
  • app-modules/identity/src/User/Http/Controllers/UsersController.php
  • app-modules/identity/src/User/Http/Requests/UpdateProfileRequest.php
  • app-modules/identity/src/User/Models/Address.php
  • app-modules/identity/src/User/Models/Information.php
  • app-modules/identity/src/User/Models/User.php
  • app-modules/integration-discord/phpstan.ignore.neon
  • app-modules/integration-discord/src/OAuth/DiscordOAuthAccessDTO.php
  • app-modules/integration-discord/src/OAuth/DiscordOAuthUser.php
  • app-modules/integration-twitch/phpstan.ignore.neon
  • app-modules/integration-twitch/src/OAuth/DTO/TwitchOAuthAccessDTO.php
  • app-modules/integration-twitch/src/OAuth/DTO/TwitchOAuthDTO.php
  • app-modules/integration-twitch/src/Subscriber/Contracts/TwitchSubscribersService.php
  • app-modules/integration-twitch/src/Subscriber/DTO/TwitchSubscriberDTO.php
  • app-modules/panel-admin/src/Filament/Resources/ExternalIdentities/Schemas/ExternalIdentityForm.php
  • app-modules/panel-admin/src/Filament/Resources/Feedback/Tables/FeedbackTable.php
  • app-modules/portal/phpstan.ignore.neon
  • app/Http/Middleware/BotAuthentication.php
  • app/Http/Middleware/GuestTenantIdentifier.php
  • app/Http/Middleware/VerifyIfHasTenantProviderMiddleware.php
  • app/Providers/FilamentServiceProvider.php
  • app/Providers/Tools/DebugbarServiceProvider.php
  • app/Providers/Tools/TelescopeServiceProvider.php
  • app/Rules/AvailableTalkSchedule.php
  • bootstrap/helpers.php
  • database/migrations/2019_08_19_000000_create_failed_jobs_table.php
  • database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
  • database/migrations/2026_03_21_192333_convert_morph_types_to_aliases.php
  • database/migrations/2026_03_21_200000_cleanup_orphan_users.php
  • database/migrations/2026_03_22_000001_normalize_linkedin_urls.php
  • pint.json
✅ Files skipped from review due to trivial changes (104)
  • app-modules/events/src/Models/EventModel.php
  • app-modules/community/database/migrations/2022_12_07_005347_create_meetings_table.php
  • app-modules/community/src/Feedback/Http/Requests/CreateFeedbackRequest.php
  • app-modules/community/database/migrations/2022_12_07_005119_create_meeting_types_table.php
  • app-modules/activity/src/Models/Message.php
  • app-modules/community/src/Feedback/Http/Requests/FeedbackReviewRequest.php
  • app-modules/activity/src/DTOs/NewMessageDTO.php
  • app-modules/community/src/Feedback/Models/Review.php
  • app-modules/identity/src/User/DTOs/UpsertInformationDTO.php
  • database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
  • app-modules/gamification/database/migrations/2023_01_22_152940_create_characters_badges_table.php
  • app-modules/gamification/src/Character/Models/PastSeason.php
  • database/migrations/2026_03_22_000001_normalize_linkedin_urls.php
  • app-modules/integration-twitch/src/OAuth/DTO/TwitchOAuthDTO.php
  • app-modules/identity/src/Filament/User/Pages/Dashboard.php
  • app-modules/identity/src/ExternalIdentity/Models/ExternalIdentity.php
  • app-modules/community/src/Feedback/Actions/CreateFeedback.php
  • app-modules/identity/src/Tenant/Models/Tenant.php
  • app-modules/integration-discord/src/OAuth/DiscordOAuthUser.php
  • bootstrap/helpers.php
  • app/Http/Middleware/VerifyIfHasTenantProviderMiddleware.php
  • app-modules/bot-discord/src/SlashCommands/AbstractSlashCommand.php
  • app-modules/economy/phpstan.ignore.neon
  • app-modules/community/phpstan.ignore.neon
  • app-modules/activity/src/Actions/NewVoiceMessage.php
  • app-modules/bot-discord/src/SlashCommands/DontAskCommand.php
  • app-modules/gamification/phpstan.ignore.neon
  • app-modules/activity/src/Http/Requests/CreateVoiceMessageRequest.php
  • app-modules/activity/database/migrations/2023_02_10_224951_create_voice_messages_table.php
  • app-modules/identity/src/User/Models/Information.php
  • app-modules/activity/src/DTOs/NewVoiceMessageDTO.php
  • app-modules/community/src/Feedback/DTOs/FeedbackReviewDTO.php
  • app-modules/identity/src/Auth/DTOs/OAuthStateDTO.php
  • app-modules/integration-discord/phpstan.ignore.neon
  • app-modules/activity/database/migrations/2023_01_18_211845_create_messages_table.php
  • app-modules/community/src/Meeting/Models/Meeting.php
  • app-modules/activity/src/Http/Requests/CreateMessageRequest.php
  • app-modules/community/src/Meeting/Http/Requests/MeetingRequest.php
  • app-modules/he4rt/phpstan.ignore.neon
  • app/Http/Middleware/BotAuthentication.php
  • app-modules/identity/database/migrations/2014_10_12_100000_create_password_resets_table.php
  • app-modules/community/src/Feedback/Enums/ReviewTypeEnum.php
  • app-modules/identity/database/migrations/2014_10_12_000000_create_users_table.php
  • app-modules/bot-discord/src/Commands/PingCommand.php
  • app-modules/integration-twitch/phpstan.ignore.neon
  • app-modules/identity/database/migrations/2023_01_18_210724_create_providers_table.php
  • app-modules/events/src/Filament/Shared/Widgets/ActiveEventsStats.php
  • app-modules/gamification/src/Season/Models/Season.php
  • app-modules/identity/src/Auth/Actions/AuthenticateAction.php
  • app-modules/portal/phpstan.ignore.neon
  • app-modules/identity/src/ExternalIdentity/DTOs/ResolveUserProviderDTO.php
  • app-modules/community/src/Feedback/Models/Feedback.php
  • app-modules/bot-discord/src/SlashCommands/EditVoiceChannelLimitCommand.php
  • app-modules/docs/routes/docs-routes.php
  • app-modules/gamification/src/Badge/Actions/CreateBadge.php
  • app-modules/gamification/database/migrations/2023_01_14_053138_create_characters_table.php
  • app-modules/gamification/src/Badge/Models/Badge.php
  • app/Providers/Tools/DebugbarServiceProvider.php
  • app-modules/bot-discord/phpstan.ignore.neon
  • app/Providers/FilamentServiceProvider.php
  • app-modules/activity/phpstan.ignore.neon
  • app-modules/panel-admin/src/Filament/Resources/Feedback/Tables/FeedbackTable.php
  • app-modules/economy/src/Models/Transaction.php
  • app-modules/identity/src/ExternalIdentity/Http/Requests/CreateProviderRequest.php
  • app-modules/identity/src/ExternalIdentity/DTOs/NewProviderDTO.php
  • app-modules/bot-discord/src/SlashCommands/ProfileCommand.php
  • app-modules/identity/database/migrations/2025_11_07_162624_create_providers_tokens_table.php
  • app-modules/identity/src/User/Http/Requests/UpdateProfileRequest.php
  • database/migrations/2019_08_19_000000_create_failed_jobs_table.php
  • app-modules/integration-twitch/src/Subscriber/DTO/TwitchSubscriberDTO.php
  • app-modules/integration-twitch/src/OAuth/DTO/TwitchOAuthAccessDTO.php
  • app-modules/bot-discord/src/Actions/VoiceChannel/HandleStateChannelAction.php
  • app-modules/panel-admin/src/Filament/Resources/ExternalIdentities/Schemas/ExternalIdentityForm.php
  • app-modules/bot-discord/src/DTO/VoiceChannelDTO.php
  • app-modules/integration-discord/src/OAuth/DiscordOAuthAccessDTO.php
  • app-modules/bot-discord/src/SlashCommands/EditProfileCommand.php
  • app-modules/identity/phpstan.ignore.neon
  • app-modules/docs/phpstan.ignore.neon
  • app/Http/Middleware/GuestTenantIdentifier.php
  • app-modules/gamification/database/migrations/2023_01_20_193234_create_badges_table.php
  • app-modules/identity/src/Auth/DTOs/OAuthAccessDTO.php
  • app-modules/identity/src/Auth/DTOs/OAuthUserDTO.php
  • app-modules/gamification/src/Badge/Http/Requests/CreateBadgeRequest.php
  • database/migrations/2026_03_21_192333_convert_morph_types_to_aliases.php
  • app-modules/community/src/Feedback/DTOs/NewFeedbackDTO.php
  • app-modules/gamification/src/Badge/DTOs/NewBadgeDTO.php
  • database/migrations/2026_03_21_200000_cleanup_orphan_users.php
  • app-modules/events/src/Filament/Shared/EventLogin.php
  • app-modules/identity/src/User/DTOs/UpdateProfileDTO.php
  • app-modules/gamification/src/Character/Http/Requests/ClaimBadgeRequest.php
  • app-modules/docs/src/DocsController.php
  • app-modules/bot-discord/src/SlashCommands/IntroductionCommand.php
  • app-modules/bot-discord/src/SlashCommands/CargoDelasCommand.php
  • app-modules/bot-discord/src/SlashCommands/DynamicVoiceCommand.php
  • app-modules/identity/src/User/Models/User.php
  • app-modules/docs/src/Documentation.php
  • app/Providers/Tools/TelescopeServiceProvider.php
  • app-modules/gamification/database/migrations/2023_01_30_174411_create_seasons_table.php
  • app-modules/community/database/migrations/2022_12_07_005627_create_meeting_participants_table.php
  • app-modules/identity/src/Tenant/Concerns/InteractsWithTenants.php
  • app-modules/identity/src/User/Models/Address.php
  • app/Rules/AvailableTalkSchedule.php
  • app-modules/economy/src/Models/Wallet.php
  • pint.json

@danielhe4rt danielhe4rt merged commit 5217f24 into 4.x Mar 23, 2026
6 checks passed
@danielhe4rt danielhe4rt deleted the fix/imports-phpstan branch March 23, 2026 18: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.

2 participants