With pride I want to bring to your attention the utility ctags with full support for php indexing:
- Class and Interface Support
- Support for class members - functions, variables, constants
- Namespace support
- Formatting tags in such a way that you no longer have to search for the required __construct by the top ten files
Details under the cut. The link to the utility is at the end.
Historically, ctags supported PHP by parsing through regular expressions, which in the first place made it possible to add support for the new language quickly and with little blood, and secondly made it impossible to use any information about the scope of the found variable or function.
')
As a result, the development of complex projects with a large number of classes using tools like Vim or Emacs was far from ideal. For example, each class has a __construct method, and in order to find the necessary constructor, it was necessary to pretty much jump over classes, since tags with the same name were indexed as if they were all in the global scope.
First, to overcome this problem, I decided to try PHPStorm, but after a couple of hours of admiration for the quality of parsing and autocompletion, it became clear once again that you can only get off Vim from Emacs, and then not for long.
So the idea came to finally finish PHP support in Ctags to meet modern requirements. Unlike other languages, it seemed reasonable to me to create two tags for one member of a class or namespace — the classic Class :: Member, which provides classic navigation for which it is enough to specify only Member, and also Member <Class>. The last option is useful when you use auto-completion on tags in the same Emacs.
Both options look like this:


Download the utility here:
github.com/zargener/ctags . It is assembled easily and without installing unnecessary dependencies. For convenience, you can replace the system utility ctags. The new parser completely parses the source code of the same Symfony2 without visible errors, but examples of incorrectly parsed files are welcome.
Unfortunately, navigation is fully supported so far only by Emacs, or at least in those editors who provide the ability to add tags. Due to the limitations of the very principle of working with the required characters, the word is searched that under the cursor only the immediate name of the symbol can be transmitted, which will not exactly match the tag containing not only the symbol name, but also the scope.