I'll second all those points, especially the first one, but I'll add a word of caution. All of the points you mentioned require the IDE to parse all the code, not just the code you are writing at this moment. If it doesn't know the type of $foo, it can't tell what $foo->getModel() calls and therefore it can't rename that getModel(), for example. This means you have to be careful in projects using older frameworks or CMS. From recent experience, a great example of such an atrocious codebase is Magento:
- their method calls are excessively chained, which means a failure to analyse step 2 of the chain blocks analysis of all further chained calls
- their phpDoc either doesn't exist or is actively misleading at times
- they rely on magic methods all throughout the codebase without properly annotating them
- their method calls are excessively chained, which means a failure to analyse step 2 of the chain blocks analysis of all further chained calls
- their phpDoc either doesn't exist or is actively misleading at times
- they rely on magic methods all throughout the codebase without properly annotating them
- https://imgur.com/RMxWEgR