Skip to content

Skip Symfony-only rules that would misfire on Laravel projects - #331

Merged
TomasVotruba merged 1 commit into
mainfrom
laravel-absent-guard-symfony-rules
Sep 29, 2026
Merged

TomasVotruba merged 1 commit into
mainfrom
laravel-absent-guard-symfony-rules

Conversation

@TomasVotruba

Copy link
Copy Markdown
Member

Why

Most Symfony rules already self-scope: they gate on Symfony base classes, interfaces, attributes or Symfony\/Doctrine\ type prefixes, so on a non-Symfony project (e.g. Laravel) they never fire.

Four rules did not self-gate and could misfire on plain PHP / Laravel classes:

  • NoConstructorAndRequiredTogetherRule - only checks __construct() + @required doc tag
  • NoListenerWithoutContractRule - triggers on any class named *Listener
  • NoNullableServiceInConstructorRule - triggers on any nullable constructor dependency
  • NoServiceJugglingRule - triggers on autowire* method naming

What

Adds LaravelPresenceResolver, which detects a Laravel project via ReflectionProvider->hasClass('Illuminate\Foundation\Application') (ReflectionProvider over class_exists, per the repo's own rule). The four rules early-return when Laravel is present.

Behavior on non-Laravel projects is unchanged - plain PHP libraries keep these rules. Only a project with Laravel installed skips them.

Tests

  • New LaravelPresenceResolverTest
  • Existing fixture tests for the four rules still pass (Laravel absent -> guard inert)
  • Full suite green, plus ECS, Rector, PHPStan

@TomasVotruba
TomasVotruba merged commit 2781d4c into main Sep 29, 2026
8 checks passed
@TomasVotruba
TomasVotruba deleted the laravel-absent-guard-symfony-rules branch September 29, 2026 22:18
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