2013-08-22 3 views
9

Bei der Verwendung von PHP-Namespaces verwendet der Code, an dem ich arbeite, eine große Anzahl von Namespace-Aliasen, z.Wie konfiguriere ich Ctags, um PHP-Namespaces und ihre Aliase zu indizieren?

<?php 
namespace foo; 

use bar\baz\qux as bazQux; 

... 

$a = new bazQux(); 

Ist es möglich, Exuberant Ctags indiziert die Verwendung dieser Namespace-Aliase so zu konfigurieren, dass ich aus einer Zeile springen kann, wo die Alias ​​(die Instanziierung oben) direkt in der echten Klasse verwendet wird? Wenn das nicht möglich ist, was ist der beste Kompromiss, der erreicht werden kann?

Ich habe irgendwo einen noch nicht integrierten Patch für Ctags gesehen, um einen PHP-Tokenizer für die PHP-Unterstützung anstelle der aktuellen Regex-basierten Implementierung zu verwenden; Ich würde gerne weiterhin einen Aktien-Ctags verwenden, wenn es möglich wäre, anstatt eine Version selbst zu patchen und zu kompilieren.

+1

Es ist Ihre Frage nicht beantworten (es nicht zwischen Klassen Navigation hilft), aber ich fand kürzlich phpctags Das ist sehr hilfreich, wenn Sie auch das vim Tagbar Plugin verwenden: http://stackoverflow.com/questions/11290352/vim-hack-ctags-o-tweak-tagbar-for-better-php-support – Lambart

+0

@Lambart Danke für diese Info; phpctags sieht interessant aus. –

Antwort

3

Dies ist die offizielle Changelog: http://ctags.sourceforge.net/news.html

Sie scheinen nicht noch dieses Patch fusionierte:

http://sourceforge.net/mailarchive/message.php?msg_id=30749245

So denke ich nicht, dass Sie eine vorkompilierte Paket mit PHP Namespace finden Unterstützung.

+0

Ich vermute, du hast Recht, was eine Schande ist. Es sieht so aus, als ob Ctags nicht mehr aktiv gepflegt wird; das letzte Commit war vor 11 Monaten. Es ist eine Schande, dass dieser PHP-Parser-Patch so lange in der Schwebe war. –

+0

https://github.com/fishman/ctags ist ein Fork, der den PHP-Parser aktualisiert hat. Es könnte funktionieren. – JaredMcAteer

0

Für diejenigen, die in der Schwebe warten Sie nicht, gibt es Lösung:

können Sie versuchen, eine verbesserte PHP omni komplett für ViM: https://github.com/shawncplus/phpcomplete.vim.

Dieses Projekt unterstützt auch Dinge wie "verwenden" Schlüsselwort und Namespaces, aber es hängt leider von der gepatchten Version von CTags ab.

Hier sind Anweisungen, wie ctags Version, die Unterstützung von Namespaces vorzubereiten: https://github.com/shawncplus/phpcomplete.vim/wiki/Patched-ctags

Ich weiß, es ist keine hirntote Lösung, und es erfordert die Hände schmutzig mit Ihrer eigenen Zusammenstellung von ctags zu machen, aber es funktionierte für mich perfekt :)

1

ich weiß nicht, gut zu php, aber ich denke

use bar/baz/qux as bazQux; 

sollte

use bar\baz\qux as bazQux; 

Nach dem Ersetzen/mit \ Universal ctags (https://ctags.io) kann bazQux erfassen gut:

[[email protected]]~/var/ctags% cat foo.php 
cat foo.php 
<?php 
namespace foo; 

use bar\baz\qux as bazQux; 

[[email protected]]~/var/ctags% ./ctags -o - foo.php 
./ctags -o - foo.php 
bazQux foo.php /^use bar\\baz\\qux as bazQux;$/;" a namespace:foo typeref:unknown:bar\\baz\\qux 
foo foo.php /^namespace foo;$/;" n 
+0

Danke für das Abfangen des Syntaxfehlers mit den Namensraumtrennzeichen. –

Verwandte Themen