
コード補完は、多くの統合開発環境(IDE)に搭載されている自動補完機能で、よくある間違いを修正したり、コード行を提案したりすることで、アプリケーションのコーディングプロセスを高速化します。これは通常、入力中のポップアップ、関数のパラメータの照会、構文エラーに関するクエリヒントなどを通じて行われます。コード補完と関連ツールは、静的解析を使用して、変数名、関数、メソッドのドキュメント化と曖昧さの解消に役立ちます。[ 1 ] [ 2 ]
この機能は多くのプログラミング環境に登場します。[ 3 ] [ 4 ]実装例としては、Visual Studio CodeのIntelliSenseがあります。この用語は元々「picklist」として普及し、一部の実装では今でもそのように呼ばれています。[ 5 ]
他の自動補完システムと同様のインテリジェントなコード補完は、関数の説明、特にそのパラメータリストにアクセスする便利な方法です。この機能は、キーボード入力と名前の暗記の必要性を減らすことで、ソフトウェア開発を加速します。また、アクティブスコープ内の多くのシンボル(つまり変数と関数)に関するインタラクティブなドキュメントがツールチップの形で動的に表示されるため、ユーザーが外部ドキュメントを参照する頻度を減らすことができます。[ 6 ]
インテリジェントなコード補完は、コンピュータ コードが定義または参照するクラス、変数名、その他の構成要素の自動生成されたメモリ内データベースを使用します。「従来の」 IntelliSense の実装は、ピリオド (または言語に応じて他の区切り文字) などのマーカー文字を検出することで機能します。ユーザーが、1 つ以上のアクセス可能なメンバー (含まれる変数や関数など) を持つエンティティ名の直後にこれらの文字のいずれかを入力すると、IntelliSense はポップアップ ダイアログで一致する候補を表示します。ユーザーは、ステートメント補完文字 (Tab ↹または) または言語固有のマーカー ( C++のセミコロンなど) を入力して候補を受け入れるか、名前の入力を続けることができます。時間の経過とともに、IntelliSense はユーザーが最も必要とする可能性が高い変数または関数を判断します。IntelliSense はまた、関数のソース コード内のドキュメントの量に応じて、ポップアップ ウィンドウに関数の簡単な説明を表示します。↵ Enter
この機能により、オブジェクト指向プログラミングをサポートする言語では、オーバーロードされた多数の関数から選択することもできます。一部のコード編集ソフトウェアは、言語サーバープロトコル(LSP)サーバーを介してインテリジェントなコード補完機能を提供します。
インテリジェントなコード補完の研究は 1957 年に始まり、筆記体のビットマップ画像のスペルチェッカーや、入力ミスがあってもデータベース内のレコードを検索する特殊なアプリケーションが開発されました。1961 年、この新興技術の研究を率いていたレス・アーネストは、10,000 の許容される単語のリストにアクセスする最初のスペルチェッカーを含める必要があると考えました。[ 7 ]当時アーネストの下で大学院生だったラルフ・ゴリンは、一般的な英語のテキスト用のアプリケーションとして (研究ではなく) 書かれた最初の真のスペルチェック プログラムを作成しました。スタンフォード大学の人工知能研究所 (SAIL) の DEC PDP-10 用の SPELL は、1971 年 2 月に公開されました。[ 8 ]ゴリンは、より高速な動作のためにアセンブリ言語でプログラムを作成しました。彼は、単語リストを検索して、1 文字または隣接する文字の転置によって異なるもっともらしい正しいスペルを探し、それをユーザーに提示することでプログラムを作成しました。ゴリンは、ほとんどのSAILプログラムと同様にSPELLを一般に公開し、パーソナルコンピュータが一般的に使用されるようになる約10年前に、当時新しかったARPANETを通じてすぐに世界中に広まった。 [ 9 ] SPELLとそのアルゴリズムとデータ構造は、UnixプログラムのIspellに影響を与えた。

IntelliSense はMicrosoftのコード補完機能であり、Visual Studioで最もよく知られています。これは、Visual Basic 5.0 Control Creation Edition で、コード補完や構文チェックに関する既に発明されていた多くの概念に基づいて、1996 年に Microsoft のメインストリーム製品の機能として初めて導入されました[ 10 ] 。これは、 Visual Basic 5.0 の公開プロトタイプでした[ 11 ]。当初、Visual Basic IDE はこの技術の主要な「テストベッド」でしたが、IntelliSense はVisual Studio 97 の時期 (Visual Basic で初めて登場してから 1 回の改訂後) にVisual FoxProとVisual C++ [ 12 ]に組み込まれました。IntelliSense はCOMの内省機能に基づいていたため、Visual Basic 版の IntelliSense は、完全に COM に基づいているという利点がなかった Visual C++ の 5.0 および 6.0 (Visual Studio の命名シーケンスでは 97 および 98) 版よりも常に堅牢で完全でした。テンプレートのサポートがないなど、多くの VC++ 開発者から批判されていたこれらの欠点は、 .NET製品ラインで大部分が修正されています[ 13 ]。
IntelliSense は、2001 年に初めてリリースされた統合Visual Studio.NET環境で開発の新たな段階に入り、.NET フレームワークによって提供されるより強力なイントロスペクションとコードドキュメント機能によって強化されました。IntelliSense は現在、 C++、C#、J#、Visual Basic、XML、HTML、XSLTなどの Visual Studio エディターでサポートされています。Visual Studio 2005以降、マーカー文字を要求する代わりに、ユーザーが入力を開始すると IntelliSense がデフォルトでアクティブになります (ただし、この動作は無効にできます)。IDE は、開発者が入力している内容に基づいてより多くのコンテキストを推測する機能を備えており、forやwhileなどの基本的な言語構造も選択リストに含まれています。2017 年に Microsoft は IntelliCode [ 14 ]を発表しました。これは機械学習を使用して、キーストロークごとにどの言語またはライブラリ機能が意図されているかを正確に推測します。[ 15 ]最初は C# 専用の拡張機能として提供されていましたが、将来の Visual Studio のリリースに組み込まれる予定です。
Visual Studio 2022には、周囲の状況に基づいてコードの行全体を自動的に提案できるGitHub Copilotなどの人工知能機能が含まれています。
IntelliSense を搭載している他の Microsoft 製品には、Expression Web、FrontPage 2003、Small Basic、Microsoft Office製品に含まれるVisual Basic for Applications IDE 、Visual Studio Codeなどがあります。SQL Server 2008 Management Studio には、SQL 構文のオートコンプリート機能があります。
Eclipse IDEには、プログラムに同梱されているコード補完ツールがあります。[ 16 ] [ 17 ]特に Java、C++、JavaScript のコード作成をサポートしています。Code Recommenders Eclipse プロジェクトは、強力なインテリジェント補完を提供していましたが、[ 18 ]リソース不足のため、Eclipse 2018-12 で廃止され、2019 年 7 月にアーカイブされました。[ 19 ] [ 20 ] [ 21 ]
Visual Studioで編集中のC++アプリケーションに、いくつかのメンバ関数を持つクラスFooがあると仮定します。
class Foo { public : void bar (); void foo_bar ( char c , int n ); };開発者がソースコード内でこのクラスを参照する場合、例:
フーフー;フー。ユーザーがピリオドを入力するとすぐにfoo、IntelliSense は利用可能なすべてのメンバ関数 (つまり、bar()およびfoo_bar()) とすべてのメンバ属性 (プライベートメンバと保護メンバは、名前の横に南京錠のアイコンが表示されます) を自動的に一覧表示します。ユーザーは矢印キーを使用して、正しいメンバ関数がハイライト表示されたら補完文字を押すことで、いずれかを選択できます。利用可能な場合は、IntelliSense はソースコードのドキュメントに記載されているメンバ関数の簡単な説明を表示します。
IntelliSenseはさらに、ユーザーがパラメータを入力する際に、別のポップアップウィンドウに必要なパラメータを表示します。ユーザーが変数名を入力すると、入力された変数名を補完する候補も表示されます。IntelliSenseは、ユーザーが入力するにつれて、関連するパラメータをハイライト表示しながら、パラメータを表示し続けます。
ユーザーは、 +または+を使用することで、コンテキストなしで IntelliSense のポップアップ リストを強制的に表示させることができます。Visual Studioでは、これにより開発者が利用できるアプリケーション ドメイン オブジェクト モデル全体が表示されます。CtrlJCtrlSpace