Skip to content

Monthly Shift: February 2026#467

Open
refringe wants to merge 4 commits intodevelopfrom
shift-2026-02
Open

Monthly Shift: February 2026#467
refringe wants to merge 4 commits intodevelopfrom
shift-2026-02

Conversation

@refringe
Copy link
Contributor

@refringe refringe commented Feb 1, 2026

This is an automated pull request included with your Shifty Plan. It contains curated refactors to keep your Laravel application aligned with the latest conventions and features.

This month focuses on adopting modern Blade Directives such as @auth, @empty, @env, @error, and @session. These streamline otherwise longer uses of the common @if directive.

Before merging, you should:

  • Checkout the shift-2026-02 branch
  • Review all pull request comments for additional changes
  • Test your application (no tests?, no CI?)

If you do not wish to adopt these refactors, you may simply close this pull request and delete its branch.

@qodo-free-for-open-source-projects

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Revert changes from <?php to @php

Revert the change from <?php tags to @php directives for Livewire Volt components.
This change deviates from the documented standard for Volt, which uses <?php to
define the component class.

Examples:

resources/views/livewire/addon/show/⚡comments-tab.blade.php [1-32]
@php
    declare(strict_types=1);

use App\Models\Addon;
use Livewire\Attributes\Computed;
use Livewire\Attributes\Lazy;
use Livewire\Component;

new #[Lazy] class extends Component {
    /**

 ... (clipped 22 lines)
resources/views/pages/addon/⚡create.blade.php [1-366]

Solution Walkthrough:

Before:

// In a Livewire Volt component file like `resources/views/livewire/addon/show/⚡comments-tab.blade.php`

@php
    declare(strict_types=1);

    use App\Models\Addon;
    use Livewire\Component;

    new class extends Component
    {
        // ... component logic ...
    }
@endphp

@placeholder
    <div>...</div>
@endplaceholder

After:

// In a Livewire Volt component file like `resources/views/livewire/addon/show/⚡comments-tab.blade.php`

<?php
    declare(strict_types=1);

    use App\Models\Addon;
    use Livewire\Component;

    new class extends Component
    {
        // ... component logic ...
    };
?>

@placeholder
    <div>...</div>
@endplaceholder
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that the refactoring to @php violates the standard convention for Livewire Volt components, affecting the vast majority of files in this PR and contradicting the framework's documented patterns.

Medium
  • More

@qodo-free-for-open-source-projects
Copy link

qodo-free-for-open-source-projects bot commented Feb 1, 2026

CI Feedback 🧐

(Feedback updated until commit c93dd4a)

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: Code Style

Failed stage: Run Prettier [❌]

Failure summary:

The action failed due to syntax errors in Blade template files during the formatting/linting
process:

- resources/views/livewire/⚡comment-component.blade.php (line 235): Syntax error with
$this->commentable::class. The ::class syntax is not being parsed correctly in the Blade template
context.

- resources/views/livewire/admin/⚡visitor-analytics-stats.blade.php (line 92): Invalid body
indentation level for a heredoc/nowdoc syntax. The closing HTML; delimiter has incorrect indentation
(expecting at least 8 spaces).

- resources/views/pages/admin/⚡visitor-analytics.blade.php (line 317): Syntax error with
$event->visitable::class. Similar to the first error, the ::class syntax is not being parsed
correctly in the Blade template.

The process exited with code 2, indicating these parsing errors prevented successful completion.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

210:  fail-on-cache-miss: false
211:  lookup-only: false
212:  save-always: false
213:  ##[endgroup]
214:  Cache hit for: Linux-noble-x86_64-8.4-8d0f10dc44b497b6455aaae2ed2be244ca3944ca7dd2625b6cd4abe78dabcb5d-20240716
215:  Received 20288535 of 24482839 (82.9%), 19.3 MBs/sec
216:  Received 24482839 of 24482839 (100.0%), 13.3 MBs/sec
217:  Cache Size: ~23 MB (24482839 B)
218:  [command]/usr/bin/tar -xf /home/runner/work/_temp/a814162e-b07f-4074-aea6-01ab0c7128a5/cache.tzst -P -C /home/runner/work/forge/forge --use-compress-program unzstd
219:  Cache restored successfully
220:  Cache restored from key: Linux-noble-x86_64-8.4-8d0f10dc44b497b6455aaae2ed2be244ca3944ca7dd2625b6cd4abe78dabcb5d-20240716
221:  ##[group]Run shivammathur/setup-php@v2
222:  with:
223:  php-version: 8.4
224:  extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, gd, redis, igbinary, msgpack, memcached, gmp, :php-psr
225:  ini-values: error_reporting=E_ALL
226:  tools: composer:v2
...

244:  �[32;1m✓ �[0m�[34;1mpdo �[0m�[90;1mEnabled�[0m
245:  �[32;1m✓ �[0m�[34;1msqlite3 �[0m�[90;1mEnabled�[0m
246:  �[32;1m✓ �[0m�[34;1mpdo_sqlite �[0m�[90;1mEnabled�[0m
247:  �[32;1m✓ �[0m�[34;1mgd �[0m�[90;1mEnabled�[0m
248:  �[32;1m✓ �[0m�[34;1mredis �[0m�[90;1mEnabled�[0m
249:  �[32;1m✓ �[0m�[34;1migbinary �[0m�[90;1mEnabled�[0m
250:  �[32;1m✓ �[0m�[34;1mmsgpack �[0m�[90;1mEnabled�[0m
251:  �[32;1m✓ �[0m�[34;1mmemcached �[0m�[90;1mEnabled�[0m
252:  �[32;1m✓ �[0m�[34;1mgmp �[0m�[90;1mEnabled�[0m
253:  �[32;1m✓ �[0m�[34;1m:psr �[0m�[90;1mCould not find psr on PHP 8.4.17�[0m
254:  �[90;1m==> �[0m�[37;1mSetup Tools�[0m
255:  �[32;1m✓ �[0m�[34;1mcomposer �[0m�[90;1mAdded composer 2.9.3�[0m
256:  �[90;1m==> �[0m�[37;1mSetup Coverage�[0m
257:  �[32;1m✓ �[0m�[34;1mnone �[0m�[90;1mDisabled Xdebug and PCOV�[0m
258:  �[90;1m==> �[0m�[37;1mAdd php.ini values�[0m
259:  �[32;1m✓ �[0m�[34;1merror_reporting=E_ALL �[0m�[90;1mAdded to php.ini�[0m
260:  �[90;1m==> �[0m�[37;1mSponsor setup-php�[0m
...

489:  �[90mresources/views/components/comment/version-history.blade.php�[39m 23ms (unchanged)
490:  �[90mresources/views/components/confirmation-modal.blade.php�[39m 14ms (unchanged)
491:  �[90mresources/views/components/confirms-password.blade.php�[39m 21ms (unchanged)
492:  �[90mresources/views/components/danger-button.blade.php�[39m 7ms (unchanged)
493:  �[90mresources/views/components/dialog-modal.blade.php�[39m 10ms (unchanged)
494:  �[90mresources/views/components/dropdown-link.blade.php�[39m 11ms (unchanged)
495:  �[90mresources/views/components/dropdown.blade.php�[39m 18ms (unchanged)
496:  �[90mresources/views/components/filter-checkbox.blade.php�[39m 8ms (unchanged)
497:  �[90mresources/views/components/filter-menu-item.blade.php�[39m 9ms (unchanged)
498:  �[90mresources/views/components/filter-radio.blade.php�[39m 8ms (unchanged)
499:  �[90mresources/views/components/footer.blade.php�[39m 32ms (unchanged)
500:  �[90mresources/views/components/form-section.blade.php�[39m 18ms (unchanged)
501:  �[90mresources/views/components/global-search-result-addon.blade.php�[39m 21ms (unchanged)
502:  �[90mresources/views/components/global-search-result-mod.blade.php�[39m 18ms (unchanged)
503:  �[90mresources/views/components/global-search-result-user.blade.php�[39m 34ms (unchanged)
504:  �[90mresources/views/components/input-error.blade.php�[39m 18ms (unchanged)
505:  �[90mresources/views/components/input.blade.php�[39m 8ms (unchanged)
...

519:  �[90mresources/views/components/responsive-nav-link.blade.php�[39m 9ms (unchanged)
520:  �[90mresources/views/components/ribbon.blade.php�[39m 14ms (unchanged)
521:  �[90mresources/views/components/secondary-button.blade.php�[39m 7ms (unchanged)
522:  �[90mresources/views/components/section-border.blade.php�[39m 6ms (unchanged)
523:  �[90mresources/views/components/section-title.blade.php�[39m 7ms (unchanged)
524:  �[90mresources/views/components/sf-icon.blade.php�[39m 33ms (unchanged)
525:  �[90mresources/views/components/start-chat-button.blade.php�[39m 8ms (unchanged)
526:  �[90mresources/views/components/static-card.blade.php�[39m 38ms (unchanged)
527:  �[90mresources/views/components/switchable-team.blade.php�[39m 19ms (unchanged)
528:  �[90mresources/views/components/tab-button.blade.php�[39m 9ms (unchanged)
529:  �[90mresources/views/components/table-of-contents-item.blade.php�[39m 15ms (unchanged)
530:  �[90mresources/views/components/table-of-contents-subitem.blade.php�[39m 8ms (unchanged)
531:  �[90mresources/views/components/table-of-contents.blade.php�[39m 7ms (unchanged)
532:  �[90mresources/views/components/time.blade.php�[39m 7ms (unchanged)
533:  �[90mresources/views/components/user-name.blade.php�[39m 17ms (unchanged)
534:  �[90mresources/views/components/validation-errors.blade.php�[39m 21ms (unchanged)
535:  �[90mresources/views/components/welcome.blade.php�[39m 8ms (unchanged)
536:  �[90mresources/views/errors/403.blade.php�[39m 17ms (unchanged)
537:  �[90mresources/views/errors/404.blade.php�[39m 10ms (unchanged)
538:  �[90mresources/views/errors/418.blade.php�[39m 49ms (unchanged)
539:  �[90mresources/views/errors/429.blade.php�[39m 43ms (unchanged)
540:  �[90mresources/views/errors/500.blade.php�[39m 48ms (unchanged)
541:  �[90mresources/views/errors/user-banned.blade.php�[39m 19ms (unchanged)
542:  �[90mresources/views/layouts/base.blade.php�[39m 27ms (unchanged)
543:  �[90mresources/views/layouts/static-toc.blade.php�[39m 13ms (unchanged)
544:  resources/views/livewire/⚡block-button.blade.php 53ms
545:  resources/views/livewire/⚡blocked-users.blade.php 36ms
546:  [�[31merror�[39m] resources/views/livewire/⚡comment-component.blade.php: SyntaxError: Parse Error : syntax error, unexpected 'class' (T_CLASS) on line 235
547:  [�[31merror�[39m]   233 |         $reactionQuery = $user->commentReactions()
548:  [�[31merror�[39m]   234 |             ->join('comments', 'comment_reactions.comment_id', '=', 'comments.id')
549:  [�[31merror�[39m] > 235 |             ->where('comments.commentable_type', $this->commentable::class)
550:  [�[31merror�[39m]       |                                                                     ^
551:  [�[31merror�[39m]   236 |             ->where('comments.commentable_id', $this->getCommentableId());
552:  [�[31merror�[39m]   237 |
553:  [�[31merror�[39m]   238 |         // Normal authenticated users see reactions for clean comments and their own comments.
554:  [�[31merror�[39m] �[0m �[90m 233 |�[39m         $reactionQuery �[33m=�[39m $user�[33m-�[39m�[33m>�[39mcommentReactions()
555:  [�[31merror�[39m]  �[90m 234 |�[39m             �[33m-�[39m�[33m>�[39mjoin(�[32m'comments'�[39m�[33m,�[39m �[32m'comment_reactions.comment_id'�[39m�[33m,�[39m �[32m'='�[39m�[33m,�[39m �[32m'comments.id'�[39m)
556:  [�[31merror�[39m] �[31m�[1m>�[22m�[39m�[90m 235 |�[39m             �[33m-�[39m�[33m>�[39mwhere(�[32m'comments.commentable_type'�[39m�[33m,�[39m $this�[33m-�[39m�[33m>�[39mcommentable�[33m:�[39m�[33m:�[39m�[36mclass�[39m)
557:  [�[31merror�[39m]  �[90m     |�[39m                                                                     �[31m�[1m^�[22m�[39m
558:  [�[31merror�[39m]  �[90m 236 |�[39m             �[33m-�[39m�[33m>�[39mwhere(�[32m'comments.commentable_id'�[39m�[33m,�[39m $this�[33m-�[39m�[33m>�[39mgetCommentableId())�[33m;�[39m
559:  [�[31merror�[39m]  �[90m 237 |�[39m
560:  [�[31merror�[39m]  �[90m 238 |�[39m         �[90m// Normal authenticated users see reactions for clean comments and their own comments.�[39m�[0m
561:  resources/views/livewire/⚡global-search.blade.php 56ms
562:  resources/views/livewire/⚡navigation-chat.blade.php 115ms
563:  resources/views/livewire/⚡navigation-created-mods-badge.blade.php 21ms
564:  resources/views/livewire/⚡navigation-notifications.blade.php 74ms
565:  resources/views/livewire/⚡navigation-updated-mods-badge.blade.php 22ms
566:  resources/views/livewire/⚡notification-center.blade.php 145ms
567:  resources/views/livewire/⚡report-component.blade.php 92ms
568:  resources/views/livewire/⚡timezone-warning.blade.php 43ms
569:  resources/views/livewire/⚡user-activity.blade.php 48ms
570:  resources/views/livewire/⚡visitor-tracker.blade.php 17ms
571:  resources/views/livewire/addon/⚡action.blade.php 267ms
572:  resources/views/livewire/addon/⚡version-action.blade.php 172ms
573:  resources/views/livewire/addon/show/⚡comments-tab.blade.php 22ms
574:  resources/views/livewire/addon/show/⚡description-tab.blade.php 17ms
575:  resources/views/livewire/addon/show/⚡versions-tab.blade.php 28ms
576:  [�[31merror�[39m] resources/views/livewire/admin/⚡visitor-analytics-stats.blade.php: SyntaxError: Invalid body indentation level (expecting an indentation at least 8) on line 92
577:  [�[31merror�[39m]   90 |             </div>
578:  [�[31merror�[39m]   91 |         </flux:skeleton.group>
579:  [�[31merror�[39m] > 92 |         HTML;
580:  [�[31merror�[39m]      |            ^
581:  [�[31merror�[39m]   93 |     }
582:  [�[31merror�[39m]   94 |
583:  [�[31merror�[39m]   95 |     /**
584:  [�[31merror�[39m] �[0m �[90m 90 |�[39m             �[33m<�[39m�[33m/�[39m�[33mdiv�[39m�[33m>�[39m
585:  [�[31merror�[39m]  �[90m 91 |�[39m         �[33m<�[39m�[33m/�[39m�[33mflux�[39m�[33m:�[39m�[33mskeleton�[39m�[33m.�[39m�[33mgroup�[39m�[33m>�[39m
586:  [�[31merror�[39m] �[31m�[1m>�[22m�[39m�[90m 92 |�[39m         �[33mHTML�[39m�[37m�[41m�[1m;�[22m�[49m�[39m
587:  [�[31merror�[39m]  �[90m    |�[39m            �[31m�[1m^�[22m�[39m
588:  [�[31merror�[39m]  �[90m 93 |�[39m     �[33m}�[39m
589:  [�[31merror�[39m]  �[90m 94 |�[39m
590:  [�[31merror�[39m]  �[90m 95 |�[39m     �[90m/**�[39m�[0m
591:  resources/views/livewire/form/⚡mod-autocomplete.blade.php 65ms
...

616:  resources/views/livewire/user/show/⚡wall-tab.blade.php 21ms
617:  resources/views/pages/⚡chat.blade.php 356ms
618:  resources/views/pages/⚡dashboard.blade.php 24ms
619:  resources/views/pages/⚡homepage.blade.php 121ms
620:  resources/views/pages/addon-version/⚡create.blade.php 156ms
621:  resources/views/pages/addon-version/⚡edit.blade.php 194ms
622:  resources/views/pages/addon/⚡create.blade.php 153ms
623:  resources/views/pages/addon/⚡edit.blade.php 167ms
624:  resources/views/pages/addon/⚡guidelines-acknowledgment.blade.php 40ms
625:  resources/views/pages/addon/⚡show.blade.php 188ms
626:  resources/views/pages/admin/⚡moderation-actions.blade.php 307ms
627:  resources/views/pages/admin/⚡report-centre.blade.php 1197ms
628:  resources/views/pages/admin/⚡role-management.blade.php 131ms
629:  resources/views/pages/admin/⚡spt-version-management.blade.php 279ms
630:  resources/views/pages/admin/⚡user-management.blade.php 390ms
631:  [�[31merror�[39m] resources/views/pages/admin/⚡visitor-analytics.blade.php: SyntaxError: Parse Error : syntax error, unexpected 'class' (T_CLASS) on line 317
632:  [�[31merror�[39m]   315 |             ] : null,
633:  [�[31merror�[39m]   316 |             'visitable' => $event->visitable !== null ? [
634:  [�[31merror�[39m] > 317 |                 'type' => $event->visitable::class,
635:  [�[31merror�[39m]       |                                             ^
636:  [�[31merror�[39m]   318 |                 'id' => $event->visitable->getKey(),
637:  [�[31merror�[39m]   319 |                 'data' => $event->visitable->toArray(),
638:  [�[31merror�[39m]   320 |             ] : null,
639:  [�[31merror�[39m] �[0m �[90m 315 |�[39m             ] �[33m:�[39m �[36mnull�[39m�[33m,�[39m
640:  [�[31merror�[39m]  �[90m 316 |�[39m             �[32m'visitable'�[39m �[33m=>�[39m $event�[33m-�[39m�[33m>�[39mvisitable �[33m!==�[39m �[36mnull�[39m �[33m?�[39m [
641:  [�[31merror�[39m] �[31m�[1m>�[22m�[39m�[90m 317 |�[39m                 �[32m'type'�[39m �[33m=>�[39m $event�[33m-�[39m�[33m>�[39mvisitable�[33m:�[39m�[33m:�[39m�[36mclass�[39m�[33m,�[39m
642:  [�[31merror�[39m]  �[90m     |�[39m                                             �[31m�[1m^�[22m�[39m
643:  [�[31merror�[39m]  �[90m 318 |�[39m                 �[32m'id'�[39m �[33m=>�[39m $event�[33m-�[39m�[33m>�[39mvisitable�[33m-�[39m�[33m>�[39mgetKey()�[33m,�[39m
644:  [�[31merror�[39m]  �[90m 319 |�[39m                 �[32m'data'�[39m �[33m=>�[39m $event�[33m-�[39m�[33m>�[39mvisitable�[33m-�[39m�[33m>�[39mtoArray()�[33m,�[39m
645:  [�[31merror�[39m]  �[90m 320 |�[39m             ] �[33m:�[39m �[36mnull�[39m�[33m,�[39m�[0m
646:  resources/views/pages/mod-version/⚡create.blade.php 352ms
...

656:  resources/views/pages/user/⚡show.blade.php 98ms
657:  �[90mresources/views/policy.blade.php�[39m 9ms (unchanged)
658:  �[90mresources/views/profile/show.blade.php�[39m 20ms (unchanged)
659:  �[90mresources/views/profile/two-factor-authentication-form.blade.php�[39m 62ms (unchanged)
660:  �[90mresources/views/profile/update-password-form.blade.php�[39m 17ms (unchanged)
661:  �[90mresources/views/profile/update-profile-information-form.blade.php�[39m 53ms (unchanged)
662:  �[90mresources/views/static/comment-unsubscribed.blade.php�[39m 10ms (unchanged)
663:  �[90mresources/views/static/community-standards.blade.php�[39m 67ms (unchanged)
664:  �[90mresources/views/static/contact.blade.php�[39m 54ms (unchanged)
665:  �[90mresources/views/static/content-guidelines.blade.php�[39m 175ms (unchanged)
666:  �[90mresources/views/static/dmca.blade.php�[39m 22ms (unchanged)
667:  �[90mresources/views/static/installer.blade.php�[39m 136ms (unchanged)
668:  �[90mresources/views/static/privacy.blade.php�[39m 46ms (unchanged)
669:  �[90mresources/views/static/tos.blade.php�[39m 47ms (unchanged)
670:  �[90mresources/views/terms.blade.php�[39m 7ms (unchanged)
671:  ##[error]Process completed with exit code 2.
672:  Post job cleanup.

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