「インテリセンス」対応No.32803
whp さん 14/01/04 23:54
 
散々出されている要望だとは思いますが…
Visual Studioのようなインテリセンス機能を搭載することは出来ないでしょうか。

単に既存の辞書や、文字列検索で候補を出すマクロがあるのは知っていますが、そう
ではなく、
コンパイラと連携して、コンパイルの結果を反映して、候補が表示されるような機能
です。多少速度が遅くなっても構いません。

struct abc {
#ifdef USEINT
  int i;
#else
  float f;
#endif
} xyz;

USEINTが定義されていれば、xyz.の候補に「i」が表示され、
USEINTが定義されていなければ、xyz.の候補に「f」が表示されるような機能が希望
です。
言語仕様に基づいて、スコープを考慮して動作してほしいです。

[ ]
RE:32803 「インテリセンス」対応No.32804
いいじま さん 14/01/05 09:21
 
いいじまと申します。横から失礼します。

> 散々出されている要望だとは思いますが…

失礼ながら、まったく出ていませんよ。
私自身、欲しいとも思いませんし。

> Visual Studioのようなインテリセンス機能を搭載することは
> 出来ないでしょうか。
...
> コンパイラと連携して、コンパイルの結果を反映して、
> 候補が表示されるような機能です。

失礼ながら、VSの「インテリセンス」がなぜ可能になっているか
ご存知でしょうか。それはとりもなおさず、コンパイラそのものから
非公開の情報を得ているからです。そうでなければ、IDE自体が
C言語の文法を知っていなければ、実装は不可能です。

> 多少速度が遅くなっても構いません。

その程度ではすまない話です。
制作経費として何百万円とかけないと作れないでしょう。

ご自身でます勉強して、作ってください。

[ ]
RE:32803 「インテリセンス」対応No.32805
秀まるお2 さん 14/01/05 09:47
 
 いいじまさんからコメントがありますが、一応、あくまで1ユーザーさんのご
意見ということなので、その辺ご了承お願いします。

 うちの会社としては…、実はうちの会社でも、インテリセンスは是非やりたい
機能の1つとしてリストアップはしていた所でした。ただ、実際にやるとなると、
対象となるコンピュータ言語を理解する高度な処理が必要で、それを自社でゼロ
から開発することはほとんど不可能だと思いました。

 なので、やるとしたら、外部の文法解析ソフトを呼び出して、それの結果から
インテリセンスさせるって方向にならざるを得ないかと思います。

 現状では、そういう文法解析ソフトでインテリセンスに使えるような物は、ち
ょっと無いかなぁという所です。

 一応、秀丸エディタの将来的な方向性として、現状の単語補完をもっとインテ
リジェントな方向に持って行くことはネタとしてはあるので、Visual Studioほ
どでは無いにしても今よりはもうちょっとインテリジェントな方向で出来ないか
考えたいとは思います。

 現状そういう状況ということでよろしくお願いします。

[ ]
RE:32805 「インテリセンス」対応No.32806
colder さん 14/01/05 13:41
 
colderです

clangというコンパイラに補完候補を出す機能があり、
「秀丸 clang auto-complete」で検索すると実際に秀丸から使えるようにしている人
がいるようです。

[ ]
RE:32806 「インテリセンス」対応No.32808
秀まるお2 さん 14/01/05 17:37
 
 clangは、以前秀丸担当がいろいろ調べてくれた時の候補にあったようでした。
ただ、clangをWindows上で動かすにはMinGWってのが必要だったり、とりあえず
試すにしても若干ハードルが高くてそれでとりあえずやめたようです。

 他には「静的コード解析」でgoogle検索すると、それ用のソフト類が多々
ヒットするようではありますが、実際にインストールしてテストしてみるほどの
候補が見つからなくて途中で挫折したようでした。

 秀丸担当の方が詳しいのでそちらからまたお返事させていただきます。

[ ]
RE:32806 「インテリセンス」対応No.32809
秀丸担当 さん 14/01/06 10:31
 

秀まるおの言う通り、clangなどについて少し前に調べようとしたことがありま
した。
そのときはclangを試す以前に、MinGWをWindowsにインストールできなくて、試
すことができてませんでした。
今やってみたらインストールできそうなので、改めて試してみようと思います。
やるとしてもたぶんすぐできるものではないと思うので、引き続き今後の機能の
候補ということにさせていただきます。

[ ]
RE:32809 「インテリセンス」対応No.32811
いいじま さん 14/01/06 11:33
 
いいじまです。ご面倒をおかけしております。

> 秀まるおの言う通り、clangなどについて少し前に調べようと
> したことがありました。
> そのときはclangを試す以前に、MinGWをWindowsにインストール
> できなくて、試すことができてませんでした。

MinGWはCygwinと一緒に入れることもできますし、コンパイル済の
clangも http://www.ishani.org/web/articles/code/clang-win32/
ありますので、clangを使うことは難しくないと思います。

ただ、インテリセンスが実現できるかどうかは失礼ながら懐疑的です。
これが効果を発揮するはずのVBA/VBSやJavaScriptでは、型を明示しない
オブジェクトを多々使いますのでたとえばExcel VBAで

Sub CnangeColor(r)
    Dim c
    For Each c In r
        c.Interior.col【ここで補完】
    Next
End Sub

と書いたところで、rがRange型と分かっていなければColor、ColorIndex
という補完候補は出せません。Excelはこのサンプルだけでは補完して
くれません。

考えてみれば、VSのインテリセンスって、こういう「型にルーズな言語」は
あまり扱っていないんですよね…。

[ ]
RE:32809 「インテリセンス」対応No.32812
whp さん 14/01/08 00:11
 
秀丸担当様、並びに皆様

コメントありがとうございました。

要望はclangの補完機能を想定して書いておりましたが、clang以外のコンパイラでも
そのような補完機能があるのかもしれないと思い、予断を含めないよう「コンパイラ
と連携して」という曖昧な書き方をしました。
情報が小出しになってしまい申し訳ありません。

>やるとしてもたぶんすぐできるものではないと思うので、引き続き今後の機能の
>候補ということにさせていただきます。

導入初期は、速度の遅さや機能の制約があっても構わないと思っています。先ずはそ
の機能があることがうれしいです。

機能の導入を心待ちにしております。
引き続き、ご検討を宜しくお願い致します。

ありがとうございます。

[ ]
RE:32812 「インテリセンス」対応No.32813
秀丸担当 さん 14/01/08 08:56
 

その後clangは入れることができて、どういうことをしているのかを把握するこ
とができました。
やるとしたら、以下のohtoriiさんが作られているマクロと似たようなことにな
ると思います。
http://d.hatena.ne.jp/ohtorii/20110319/1300514225

ソースやincludeするものが大量にあると、かなり遅くなると思われ、そのあた
りはプリコンパイルヘッダーなどを作ったり指定したりということでなんとかな
るのではないかと予想されます。
ただユーザーにとって、clangの導入と、プロジェクトに合った環境を整えたり、
エラーへの対処が一苦労だと思いました。
自分のところでもプリコンパイルヘッダーを作って指定してやろうとしたら、な
んだかエラーが出て、もう一苦労いりそうです。

環境を整えたりエラーの対処を秀丸エディタで自動でやるのは難しいので、その
一苦労があってもいいという話であれば、現状でも一応可能ということになって
しまいそうです。

MicrosoftのIntelliSenseをそのまま使えるとしたら環境を整えずできていいで
すが、外部のソフトである秀丸エディタから取得できるのかどうか不明です。

他には、次期バージョンではctagsのタグジャンプもサポートしていく予定です
が、ctagsからクラスのメンバ情報などを絞る方法だとしたらある程度現実的か
と思います。
ただしclangやIntelliSenseほど正確にはできなさそうで、期待とは外れること
になるかもしれません。

[ ]
RE:32813 「インテリセンス」対応No.32815
whp さん 14/01/09 02:15
 
ctagsへの対応は非常に楽しみです。
下記ページのような感じのコードナビゲーションができたらいいな、なんて勝手に思
っています。(もともとの要望から脱線した妄想で申し訳ありません…)
http://rprichard.github.io/sourceweb/

ctagsでのコード補完は、clangを使う場合とは異なり、インデックスからの候補抽出
を自前で実装する必要があり大変かとは思いますが、ぜひともご検討いただければと
思います。
構文解析結果を使えるclangやVisual Studioほど正確でないことは仕方がないと思い
ますが、それでも十分使えるものになると期待しています。

Visual StudioやEclipseのようなIDEを使えば、すでにコード補完ができるのに、な
ぜ秀丸でやりたいのかというと、前記のようなIDEではプロジェクト単位で開くこと
が前提のため、単一のファイルを開いてさっと直す、といった手軽さがありません。

秀丸に期待しているのは、単一のファイルを開いた状態から、コード補完ができるこ
とです。現在のタグジャンプでtagsファイルを探すときのように、カレントから親デ
ィレクトリを遡って、ビルドに必要なファイルを探せるようになることを期待してい
ます。

[ ]
RE:32815 「インテリセンス」対応No.32820
秀丸担当 さん 14/01/10 15:48
 

現時点でctagsの対応でやろうとしているのはタグジャンプとダイレクトタグジ
ャンプについてで、単語補完についてはいまのところ手を付けていないです。
当初の話の#ifdefについてはうまくできないようで、もしかしたら#ifdefがうま
くいかないばかりに無駄に絞りこまれてしまって逆効果となりかねないです。
どこまでできるかはやってみないとわからないですが、今後の候補の1つとして
おきたいと思います。

ちなみに本題とはずれるかもしれないですが、参考までの情報として、[その他]
→[ファイルタイプ別の設定]→[その他]→[単語補完]→[詳細...]→[tagsファイ
ル]をONにしておくと、tagsファイルの内容も候補に挙がります。(クラスのメ
ンバの解釈はしていないですが)

さらに、[その他]→[動作環境]→[その他のコマンド]→[tagsファイル]→[上の
階層もチェックする]をONにしておくと、上位フォルダにtagsファイルを置いて
おいて、それをプロジェクト共通の辞書として使うことができます。
辞書については現バージョンで秀tagsでもctagsでもどちらでもよくて、次期
バージョンではダイレクトタグジャンプもctagsに対応することで、どちらでも
使えるようにはなると思います。

[ ]
RE:32820 「インテリセンス」対応No.32821
whp さん 14/01/11 01:00
 
わかりました。ありがとうございます。
先ずは今考えていらっしゃることから進めていただければ幸いです。
秀丸がより使いやすいものになることを期待しています。

[ ]