2009-05-07 33 views
6

これは有効な質問です:VS2008でインテリセンスはどのように機能しますか?私は、正確にポップアップ( "。"はただ一つの明白なトリガーです)、その挙動を可能な限り修正することができるなど、提案を見つけるために使用するアルゴリズムについて知られています。Visual Studioでインテリセンスはどのように機能しますか?

この質問を文脈に入れる:私が解決しようとしている主な問題は、エディタ画面の一部でインテリセンスを有効または無効にする方法と、提案ボックスに入力する場所を変更する方法です。

すべての情報を歓迎します。

答えて

1

あなたはmsdnのthisスレッドを見ましたか?

+0

良いスタートをご確認ください。ありがとう。 –

0

Eclipseにもこの機能があり、オープンソースプロジェクトです。実際にコードを見て、Eclipseがどうやってそれを行うのかチェックしてみませんか?

+0

私は社内のドメイン固有言語のVSを拡張しています –

0

この質問は広すぎます。 VS IDEにはさまざまな言語が用意されているので、代替インテリセンスをサポートするN個のDSLとIDE拡張があり、これは多くの答えを意味します。具体的にC#について話しているのなら、Tools |オプション|テキストエディタ| C#| Intellisense領域を使用して、完了オプションのオプションを確認します。アルゴリズムの限りでは、アセンブリのメタデータ、型メンバーの大量のキャッシュ、特定の型に選ばれた最後のメンバのMRUリストなどを探しています。さらに具体的な質問がある場合は、あなたは明確にする。

DSL(ironpython)とその実装hereの例を参照してください。

8

リバースエンジニアリングするのは楽しいですが、問題を考えてみましょう:

  • あなたは今、それらを

を提示する必要があり、最初のステップは、あなたを意味し、あなたが

  • 可能なオプションを見つける必要が関心
  • の言葉を識別する必要がありますコードを解析する必要があります。あなたはC/C **のキーワードを持っており、さまざまな関数とクラスの宣言をあらかじめ解析し、それらをある種のデータ構造にロードしています。次に、コードを解析し、クラス、変数などの名前を格納し、それらを同じデータ構造に入れます。

    第2ステップは、部分的な単語を効率的に検索し、そのプレフィックスを持つすべての単語を効率的に取得できるデータ構造を必要とすることを意味します。 することができます正規表現では、それはあまり効率的ではありません。その種の検索のための効率的なデータ構造はトライであり、これについてはhere on SOを参照してください。

    可能性のリストを取得したら、それを提示するだけです。可能性のあるツリーのルートへの参照を保持して、誰かがより多くの文字を入力するとリアルタイムでそれらを検索することができます。

  • 0

    私は、VSでIntelliSenseが表示される場所を制限するテキストエディタを見たことがありません。それはすべて言語特有です。 IntelliSenseが有効なトークンに寄与するポイントにカーソルがある場合は、そのポイントが使用されます。

    私は、使用されているプロジェクトシステムとのやりとりがあると思いますが、それは私が知る限りです。私は、Visual Studio SDKにサンプルプロジェクトシステムがあると考えています。それはあなたにアイデアを与えるかもしれません。

    0

    このような場合、特定の動作が必要なときに私が開発したIntelISenseのバージョンをAutoHotKey用に使用することがあります。このスクリプトのポイントは、任意のエディタ、または基本的にテキストを受け入れるコントロールで使用できることです。これは、テキスト入力を記録し、それを構文ファイル上で解釈することによって機能する。

    おそらく、達成したいことのベースとして使うことができます。私はCsoundやバッチスクリプトのようなものを持っていないいくつかの言語で、十分にISenseを使用しました。 Reflectionと組み合わせて入力監視を使用してC#をサポートするように拡張することは可能です。

    とにかく、AHKを使用すると、提示されたアイテムのリストを "取ってフィルタリング"するなどして、VSのインテリアセンスを制御することさえできます。プロセスの境界には小さな問題があるかもしれませんが、修正できないものはありません。

    一般的には、AFAIKはさまざまな方法で実装されています。私は、Delphiが非常に速いので、各トークンでプロジェクトを再コンパイルすることによってisenseを実装し、C++ Builderのコンパイルが非常に遅いという理由がないことを読んでいます。

    0

    質問に見える場所を変更する方法については、短い回答はできません。インテリセンスの大部分は、プロジェクトに含まれているアセンブリのリフレクション(およびC++でのその他のトリック)によって提供されます。あなたが得ているのは、含まれているすべてのアセンブリとGACのすべてのアセンブリをVS処理した結果です。あなたが取り組んでいるプロジェクトからの明示的なインテリセンス結果を提供したい場合は、最後にIVsContextualIntellisenseFilterProvider

    に見て、言った

    は、舞台裏のプロセスにいくつかの洞察力のために、this blog post

    関連する問題