shipmonk/dead-code-detector
PHPStan extension that detects unused PHP code: dead methods, properties, constants, and enum cases. Finds dead cycles and transitive dead members, can flag dead tested code, supports popular frameworks (e.g., Symfony), and offers customizable usage providers with optional auto-removal.
phpstan/extension-installer.phpstan.neon.dev dependency, avoiding production bloat.phpstan.neon (e.g., disabling dead constants, excluding test usages).--error-format=json) to review findings before auto-removal.tests usage excluder to avoid removing code only used in tests.reportTransitivelyDeadMethodAsSeparateError for granular debugging.composer.json to avoid surprises.--generate-baseline) or in CI with caching.vendor/) from analysis.--remove flag) or opt-out?Phase 1: Analysis-Only Mode
phpstan.neon:
includes:
- vendor/shipmonk/dead-code-detector/rules.neon
parameters:
shipmonkDeadCode:
usageExcluders:
tests:
enabled: true
vendor/bin/phpstan analyse --error-format=json > dead-code.json
Phase 2: Incremental Removal
- name: Remove dead code
run: vendor/bin/phpstan analyse --error-format=removeDeadCode
Phase 3: Customization (Optional)
phpstan.neon to exclude false positives (e.g., dynamic calls).#[AsController], #[EventListener]), workflows.ContainerInterface).ReflectionClass (e.g., getMethod()).vendor/ classes (handled via VendorUsageProvider).new $unknown() (configurable via unknownTypeMethodName).git restore or git checkout for accidental removals.phpstan.neon changes may break dead code detection..phpstan.neon).composer.json (e.g., shipmonk/dead-code-detector:^0.7).company/dead-code-providers).tests excluder).Route::get()).How can I help you explore Laravel packages today?