dereuromark/cakephp-ide-helper

Adding inline annotations

dereuromark opened this issue · 1 comments

Sometimes you need to add those annotations manually:

/** @var \Queue\Model\Table\QueuedJobsTable $queuedJobsTable */
$queuedJobsTable = TableRegistry::getTableLocator()->get('Queue.QueuedJobs');

( in case you cannot or don't want to use ModelAwareTrait and loadModel() call )

And usually also the query results for all():

/** @var \App\Model\Entity\Module[] $modules */
$modules = $query->all()->toArray();

In order for the IDE/PHPStan/Psalm to know the collection item and autocomplete entity properties etc.

As well as first() calls:

/** @var \App\Model\Entity\AttributeValue $attributeValueToMove */
$attributeValueToMove = $this->AttributeValues->find()
            ->where(['attribute_id' => $attribute, 'position' => $oldPos])
            ->firstOrFail();
$attributeValueToMove->position = $newPos;

I am sure there are other use cases for inline annotations that are occurring over and over again.

We should try to find a way to auto fix that for us if we encounter such cases.
Since this is too complex for tokenizing, we will need a AST based tool here that also is able to modify code (similar to rector) etc.

This has been partially made possible, but on regex level, not static analyzer level
https://github.com/dereuromark/cakephp-ide-helper/releases/tag/1.17.0

So it only works convention based and with a high level of missing things as well as some false positives.
If someone has time to invest into AST based ideas, that would be awesome