FuelPHPクラスの関数名の補完が全然行われないようです。7.0.1では行われる時と、行われない時がありました。けど7.1では全然行われません。
昨日の夜、このサイトが載っている共有サーバーが調子悪くて、サービスチケット連発していました。ここ数日調子悪く、そのたびにテックサービスは何かを直して「治った」と連絡して来るのですが、全然安定しませんでした。
不調が始まった時から、/homeが95%近くになっていたので、パーティションが満杯近くになると、システムが安定しないから、早く解決しろと連呼していたのですが。「これが原因でない」と一蹴されていました。
やり取りの途中では、私のファイルシステムがリストされていないとか、indexが無いから確かめろと言われました。私はいじってないのです。どう考えても、ファイルシステムが上手く動いていないだろうに。ユーザーに調べさせる前に、チェックすればいいのにね。
結局昨日は最後にファイヤーウォールをフラッシュして、設定やり直したから、今度は大丈夫だと連絡もらい、やっと繋がることを確認し、眠りました。今朝になったら、/homeの使用率が68%に下がっており、増設したもようです。このサイトも今日は安定しているでしょ?
その間、FuelBeansのシリーズは書きかけでしたがアップできないので手を休めることとしました。そこで、NetBeans7.1になってから、FuelPHPのコアクラスの関数補完が全然動かない件を調査していました。
要は、クラス名::のあとに静的関数が補完候補としてリストされないとか、インスタンスを生成した変数から->とやったときに関数がリストされないのです。(7.0.1ではたまに動きました。どういう条件なのか、掴みきれていません。)
オプションは、関数の補完が動いた7.0.1と同じにして(まあ、オプションのせいではないと思っているんですけど)、色々とテストコードを使って調べました。
わかったことを簡単に書きますと、まずエディターの構文パースでnamespace文につける名前空間名の一番頭に\をつけてもエラーにならないことが第一です。付けたまま実行すると、コンパイルのフェイズでパースエラーになってしまいますから、構文的にエラーにしなくてはなりません。
先頭に\を付けたときは、内部的には不正な文だと扱っているらしく、namespaceを使わないときと同様になります。
名前空間を利用しない、つまり名前空間のトップレベルにあるクラスの関数名は補完されます。
ですから、補完に表示する候補を見つけるときに、名前空間のコンテキストを見ているのかと思います。見ているにしてもuse文で全修飾名を指定する場合以外は、完全にクラスが特定できないわけですから、補完されないというのであれば、理解できるのですが、useで指定するのが完全修飾名で無く、コンテキスト的に曖昧であっても指定してあれば、クラス名を入れると、関数名が補完されるようになります。
さらに、クラスに名前空間をつけて指定しても、関数の補完が働きません。$class = new \Namespace\Class; $class->の>を入力した時点で、関数名の補完が働くべきです。もしくは\Namespace\Class::の2つ目のコロンを打ち込んだ時点で、静的クラス名の補完ができるべきです。(7.0.1では補完されました。)クラスに完全修飾名をつければ、コンテキスト的にも完全なはずですが、それでも補完されません。
とてもちぐはぐです。と言っても、他のIDEでも似たようなものです。7.0.1で動作する場合は本当に便利だったんですけどね。
追記:
NetBeansのBugzilaに投げたら、丁寧な回答が得られました。
まず、エディターでnamespace \namespace;とした場合、エラーが表示されないのは、バグだということです。(174832)2年も前から続いています。修正されないのでしょうかね。
あと、クラスの関数の補完はuseを使用しないと補完されないとのこと。(つまり、7.0.1で時々、関数名が表示されていたのが、バグであったということですね。)(207546)
クラスを名前空間で修飾した場合に関数名が表示されないのはバグだということです。開発版では既に修正されているそうです。(207546) つまり、次のリリースでは治っているということですね。まあ、FuelPHPを使用している限り、関係ないんですけどね。
すると、クラス名を指定した場合、名前空間を無視して、一致しそうな関数名を候補として保管してくれるようなオプションを新たに作成してくれるように、要望をだすか、もしくは、FuelPHP専用のコード補完をJavaで作成するかですね。
| FuelPHPの名前空間とコード補完< 前 | 次 >NetBeans、コードのhtml吐き出し |
|---|
| < 前 | 次 > |
|---|