Skip to content

Releases: shipmonk-rnd/dead-code-detector

1.0.0

08 Apr 11:00
Immutable release. Only release title and notes can be modified.
dd909a6

Choose a tag to compare

Stable version!

  • Detection of all dead members is implemented and stable!
    • Dead methods, constants, enum cases and properties
  • Thus, no more BC breaks in extension points are expected
  • It took ~4 years of development

Performance improvements

  • Result cache offloaded to own cache (#319)
    • Analysis reusing cache:
      • up to ~40% less memory
      • up to ~40% faster
    • Result cache size: decreased by ~55%

New features:

  • Fully new Laravel support (#294)
    • Route registration — Route::get(), post(), put(), patch(), delete(), any(), match(), resource(), apiResource()
      • Callable array syntax: [Controller::class, 'method']
      • Legacy string syntax: 'Controller@method'
      • Invokable controllers: Controller::class
    • Event listeners — Event::listen(), Event::subscribe()
    • Auto-discovered event listeners — classes with handle* methods whose first parameter has a class type
    • Scheduled jobs — Schedule::job()
    • Gate definitions — Gate::define() (callable + invokable), Gate::policy()
    • Policy resolution — $this->authorize() calls resolve policy class via Laravel's namespace convention (Models\Policies\)
    • Console commands — __construct, handle on Illuminate\Console\Command subclasses
    • Jobs — __construct, handle, failed, middleware, retryUntil, uniqueId, tags, backoff, uniqueVia, displayName on ShouldQueue / Dispatchable classes
    • Service providers — __construct, register, boot
    • Middleware — handle, terminate, __construct (detected by first parameter type Illuminate\Http\Request)
    • Notifications — via, toMail, toArray, toDatabase, toBroadcast, toVonage, toSlack
    • Form requests — authorize, rules, messages, attributes, prepareForValidation, passedValidation, failedValidation, failedAuthorization
    • Policies — before, viewAny, view, create, update, delete, restore, forceDelete (heuristic via \Policies\ namespace + Policy suffix)
    • Mailables — build, content, envelope, attachments, headers
    • Broadcast events — broadcastWith, broadcastAs, broadcastWhen
    • JSON resources — paginationInformation
    • Notifiable routing — routeNotificationFor* methods
    • Eloquent features:
      • Model methods — constructor, boot, booted, casts, newFactory
      • Query scopes — scope* methods
      • Relationships — methods returning Illuminate\Database\Eloquent\Relations\*
      • Attribute accessors — methods returning Illuminate\Database\Eloquent\Casts\Attribute
      • Legacy accessors/mutators — get*Attribute() / set*Attribute()
      • Observers — Model::observe() calls + #[ObservedBy] attribute (all observer event methods)
      • Factories — definition, configure
      • Seeders — run
      • Migrations — up, down
  • Symfony improvements
    • #[Autoconfigure(constructor:, calls:)], #[AutowireCallable], #[TaggedIterator], #[TaggedLocator], #[Required] on properties, #[AsSchedule], #[AsCronTask], #[AsPeriodicTask], !php/enum references in config yamls (#317)
    • Allow explicit containerXmlPaths configuration - no need for phpstan/phpstan-doctrine for DIC calls analysis (#325)
    • Symfony UX support: #[AsTwigComponent]/#[AsLiveComponent] (constructor, mount()), #[LiveProp], #[LiveAction], #[LiveListener], lifecycle hooks (#329)
  • Reflection improvements
    • support member constructors like new ReflectionMethod(Class, 'method') (#313)

Dependencies:

  • Requires PHP ^8.1 (was ^7.4) (#296)
  • Requires phpstan/phpstan ^2.1.41, (was ^2.1.23) (#297)

0.15.1

06 Mar 09:32
Immutable release. Only release title and notes can be modified.
e0e8d9e

Choose a tag to compare

Fixes:

  • Fix false-positive for self-referencing property access in property hooks (#311)

0.15.0

04 Mar 15:54
Immutable release. Only release title and notes can be modified.
568f84e

Choose a tag to compare

New features:

  • Dead properties detection (#277, #281, #291)
    • Never read and never written properties are detected
  • Property hooks full support (#281)
    • Now part of transitivity chain detection (both read & write)
  • Twig supports template parameters (#275)
    • Including transitively referenced ones
    • Supports:
      • Params passed to $controller->render('my.twig', ['param' => $viewModel]),
      • Params returned from #[Template] controller methods
      • Params rendered via Twig\Environment::render() and similar
  • Symfony:
    • AutowireLocator to support defaultPriorityMethod (#286, @alcohol)
    • Support #[Interact] attribute for commands (#288, @mjanser)
  • Nette tester
    • test* methods, setUp/tearDown, @dataProvider (#299)

Improvements:

  • Solution to partial analysis false positives over inline ignores (#292)
  • ApiPhpDocUsageProvider: only count phpdocs within analysed files (#284)

Breaking changes:

  • All dead members are detected by default (#301)
    • You can rollback to previous setup via:
parameters:
    shipmonkDeadCode:
        detect:
            deadEnumCases: false
            deadProperties:
                neverRead: false
                neverWritten: false

0.14.1

18 Dec 11:05
Immutable release. Only release title and notes can be modified.
4fdc912

Choose a tag to compare

Fixes:

  • Fix infinite run for huge unused subtrees while groupping errors (#282)

0.14.0

25 Nov 10:47
Immutable release. Only release title and notes can be modified.
56f9f3f

Choose a tag to compare

New features:

  • Support PHP 8.5 features (#269)
  • Support phpbench entrypoints (#262, @simPod)
  • Support behat entrypoints (#267, @devbanana)
  • Support stream_wrapper_register magic (#266)

Improvements

  • All filepaths are now resolved relative to config file they reside (same as native PHPStan configs) (#219)
    • usageProviders.symfony.configDir
    • usageExcluders.tests.devPaths

Dependencies

  • phpstan/phpstan now requires ^2.1.23 (was ^2.1.12) (#254)

Breaking changes

  • All classes are final (#237)

0.13.5

13 Oct 13:47
Immutable release. Only release title and notes can be modified.
a12cdd0

Choose a tag to compare

Improvements:

  • Symfony & Doctrine (#258):
    • Support #[AsDoctrineListener]
    • Support #[AutoconfigureTag('doctrine.event_listener')]

0.13.4

09 Oct 17:14
Immutable release. Only release title and notes can be modified.
5acf474

Choose a tag to compare

Fixes:

  • Fix disabling dead methods detection (#257)

0.13.3

01 Sep 10:38
40ab442

Choose a tag to compare

Improvements:

  • Symfony:
    • Support #[AsTransitionListenerWorkflow] and other Event listener attributes (#248, by @S1ructure)
    • Support #[AsMessageHandler] attribute (#247, by @S1ructure)

0.13.2

14 Aug 10:54
806c397

Choose a tag to compare

Fixes

  • Property hooks partial support; fix crash & false positives (#244)

0.13.1

04 Aug 09:34
18a28eb

Choose a tag to compare

Improvements

  • Symfony: support anonymous services in DIC (#238)
  • Support @api over enums and enum cases (#240)
  • Debug output not to report mixed over mixed usages caused by ReflectionClass<object>::getMethods() etc. (#241)