コード支援機能のリファレンス
コード エディタ(IDE チュートリアル):インデックス への移動
目次
支援機能とは、コード エディタ に組み込まれている機能の一部で(コード補完、パラメータ補完、コード ヒント、ツールチップ式、ツールチップ インサイト、定義への移動、ブロック補完、エラー インサイト)、コード記述プロセスを支援するものを指します。これらの機能は、コードによく挿入されるステートメントの特定、プロパティやメソッドの選択などに役立ちます。 これらの機能の一部について、以下の各セクションで詳しく説明します。
コード支援機能を有効にし、設定するには、[ツール|オプション...|ユーザー インターフェイス|エディタ|ソース]を選択し、[支援機能]オプションをクリックします。
支援機能は、言語ごとに定義されています。
Delphi 使用時、LSP(Language Server Protocol)か(デフォルト)、従来の実装を支援機能に使用することができます。
C++ の場合、IDE は自動的に LSP(Language Server Protocol)または従来の支援機能プロバイダを、使用されているコンパイラによって(CLang またはクラシック)使用します。Delphi LSP(Language Server Protocol)を使用する支援機能
LSP(Language Server Protocal)は、IDE と通信する個別のサーバー プロセスを介して言語サービスを提供する仕様です。 このため、コード支援機能は個別のプロセスによって、非同期に提供されます。
言語
言語は、[ツール|オプション|言語]設定ペインで定義されており、ここでは利用可能なすべての言語を確認することができます。 また、新しい言語を作成することもできます。
エディタ設定のオプションと構文の強調表示
エディタ設定オプションと構文強調表示は、言語ごとに定義されています。 これらは、[ツール|オプション...|ユーザー インターフェイス|エディタ|ソース]で[オプション]をクリックすることで確認できます。
この設定ペインでは、言語を選択することができます。 すると、その言語について、エディタ設定オプションと共に、その言語で使用される構文強調表示も確認することができます。
支援機能 / LSP マネージャの変更
Delphi LSP がデフォルトでは有効化されています。 [Delphi プロジェクト|タスク マネージャ]を開き、DelphiLSP.exe プロセスを探すことで、IDE は Delphi LSP を使用しているかどうか、チェックすることができます。
言語の最後のタブは、支援機能です。 ここでは、ユーザー エディタ フォント と、一連の 支援機能 設定があります。
支援機能マネージャは、言語に対して支援機能を提供します: そのマネージャがその言語を対象としていない場合でも、そこに一覧されているマネージャにこれを設定できます。
支援機能マネージャ には、IDE に登録されているすべてのマネージャが一覧されます。
Delphi: 支援機能マネージャを、クラシックまたはLSP(Language Server Protocol)から選択することができます。
C++: 支援機能マネージャは変更できません。 クラシックまたは Clang のコンパイラに対して、自動的にクラシックまたは LSP を使用します。LSP または クラシック(従来のもの) のどちらの支援機能実装を使用するか、Delphi を変更するには、次のように選択します:
- Delphi(LSP: Language Server Protocol): 新しい LSP サポート。
- Delphi(従来の支援機能): 10.3.3 以前で使用されていた支援機能の古い実装です。このオプションを選択した場合、LSP はオフにします。
また、新しい LSP マネージャを作成することもできます。[新規作成]をクリックすると、LSP サーバー実行可能ファイルとオプション群を指定することができるダイアログが表示されます。これには、呼び名、言語識別し、サーバーが強制的に再起動されるまでのタイムアウト、その他初期化 JSON RPC 呼び出しに挿入されるサーバー固有の初期化オプションなどが含まれます。
このオプションを使用して、Python やその他の言語に対して、サーバーを追加することができます。
コード補完 — Ctrl+Space
コード補完機能では、識別子のいずれかにおいて、型付き文字列を含むすべての項目のドロップダウン リストを表示します。
コード補完を行うには、コード エディタの使用時、Ctrl+Space
を押します。 文字を選択し、Enter
を押して、コードのカーソル位置にテキストを挿入します。
コード補完はまた、あるコード位置で自動的に起動されます。Delphi
でピリオド "." を入力した際や、C++
でピリオド "."、矢印 "->"、スコープ "::"、またはヘッダー "#include <" 文などを入力した際などです。
特定の言語のコード補完を呼び出すには、次の方法を使用します。
C++
-
Ctrl+Space
キーを押します(常にコード補完が起動されます)。.
または->
を入力(支援機能のオプション ページで、自動呼び出しが有効なときにのみ動作します)。- コード補完をキャンセルするには、
Esc
キーを押します。
Delphi
-
Ctrl+Space
キーを押します(常にコード補完が起動されます)。.
を入力(支援機能のオプション ページで、自動呼び出しが有効なときにのみ動作します)。- コード補完をキャンセルするには、
Esc
キーを押します。
文字を入力する際、選択/マッチングの動作は、入力されるにつれ、次のように認識していきます。
- 入力されたものと識別子で完全一致するものがあった場合、それを選択。
- そうでなければ、入力されたもので始まる最初の識別子を選択。
- そうでなければ、入力されたものを含む最初の識別子を選択。
たとえば、エディタで MyControl と入力、コード補完を呼び出し、その後 rect を入力すると、Rect で始まるプロパティやメソッドだけでなく、ClientRect、BoundsRect なども一致します。識別子文字列内に rect を含むものはすべて表示されます。
コード補完は次のような状況で、正しい結果を含め、正しく機能します:
- まだディスク上に存在しない
- プロジェクトもユニットもディスク上に存在しない新しいプロジェクト
- 現在の IDE コード内で補完結果に影響を与える変更が行われている、まだ保存されていない、変更済みユニット
- ターゲット プラットフォームや他のプロジェクト オプションを変更したときの結果は正しい(そして正しく変更された)
- マッチングでは、大文字小文字は区別されません。
- コード補完は、[外部で MSBuild を使用してコンパイル]がオンの場合に機能します。
コード補完の設定
コード補完を使用する際、インサイト オプション タブで設定できるコード補完フィルタがあります。これらは、[ツール|オプション...|ユーザー インターフェイス|エディタ|ソース]で[インサイト オプション]をクリックすることで確認できます。
このフィルタを用途に応じて使用します:
- [List all symbols that start with the filter first]: 入力したもの(「フィルタ」)で始まるシンボルは、入力したものを含むシンボルが前にソートされます。これがオフの場合、シンボルはアルファベット順でソートされます。オンの場合には、フィルタ テキストで始まるシンボルがリストの一番上に移動されます。
- [Select shortest matching symbol]: コード補完リストが表示される際、項目はいつも自動的に選択されるか、スコープ内のもっとも近いシンボルが、コードが選択されている場所に開きます。この設定は、デフォルトでチェック(最短での選択に設定)されていますが、これをオフにすると、従来のコード補完の動作により近くなります。
- [Filter text is underlined]: チェックすると、コード補完ドロップダウンは入力内容に一致するテキストに下線を引きます。
- [Show symbols that contain filter]: これにより、どのシンボルがリストに含まれるか制御できます。デフォルトでは(チェックをつける)、入力したテキストを含むすべてのシンボルがリストされます。この設定がオフの場合、コード補完リストは、入力したものから始まるシンボルのみ表示します。
従来のコード補完の動作に近づけるためには:
- [List all symbols that start with the filter first]: オン
- [Select shortest matching symbol]: オフ
- [Filter text is underlined]: オフ
- [Show symbols that contain filter]: オフ
Parameter Completion — Ctrl+Shift+Space
パラメータ補完は、コード エディタ使用時に、関数呼び出しの左かっこを開いた後、または Ctrl+Shift+Space
を押した後に、自動的に呼び出されます。 ポップアップ ウィンドウに、メソッド呼び出しの引数の名前と型をヒントとして表示します。 それに一致するものがリストで自動的に選択されるので、希望するものが見つかったところで Enter
キーを押すと、
コードの現在のカーソル位置にテキストが挿入されます。
例:
C++
Delphi
コード ヒント
コード ヒントでは、型や宣言元のファイルと行番号などのシンボルに関する情報をヒントとして表示します。 コード エディタ で作業中に、マウス ポインタをコード内の識別子の上に置くことで、コード ヒントを表示させることができます。
ヘルプ インサイト機能が無効になっている場合には、コード ヒントは Delphi
に対してのみ動作します。
例:
ツールチップ式評価
ツールチップの式評価には、カーソルでポイントした、変数の現在の値が表示されます。 この機能は、デバッグ セッション中にプログラムの実行が一時停止したとき、使用できます。
例:
C++
Delphi
ツールチップ インサイト
ツールチップ インサイトは、マウスがシンボルの上にくると、ポップアップ ウィンドウに表示します。
ツールチップ|シンボル インサイト
ツールチップ シンボル インサイトは、コード エディタでカーソルがシンボルの上にくると、識別子について、ツールチップ ウィンドウ内に宣言情報が表示します。
例:
C++
Delphi
ツールチップ ヘルプ インサイト — Ctrl+Shift+H
ツールチップ ヘルプ インサイトは、型、ファイル、宣言された行番号といったシンボルに関する情報が記載されたヒントや、シンボルに関連付けられている XML ドキュメントがある場合はそれも表示します。
ツールチップ ヘルプ インサイトを呼び出すには、コード エディタで作業中に、マウス ポインタをコード内の識別子の上に置きます。 Ctrl+Shift+H
を押して、呼び出すこともできます。
例:
C++
Delphi
ファイル:Tooltip Help InsightD.png
宣言の検索 — Ctrl+クリック
宣言の検索では、型または変数が定義されている場所へナビゲートしてくれます。
コード エディタを使用して Ctrl+クリック
を使用して、ある識別子を定義しているコードに、自動的に "ジャンプ" することができます。 コードを参照するには、任意のクラス、変数、プロパティ、メソッドなどの識別子の名前の上にマウス ポインタをホバリングさせ、Ctrl
キーを押します。
マウス ポインタが手の形になり、識別子が下線付きで強調表示されます。 強調表示されている識別子をクリックすると、コード エディタは、必要に応じてソース ファイルを開き、その識別子の宣言部分にジャンプします。識別子を右クリックし[定義の検索]を選択しても、同じ結果になります。 Alt
キーを押しながら左矢印キーを押すと、参照元の場所に戻ります。
宣言の検索で検索したり開くことができるのは、プロジェクトの検索パスまたはソース パスに含まれているユニット、あるいは製品の参照パスまたはライブラリ パスに含まれているユニットだけです。 以下の順にディレクトリが検索されます。
- プロジェクトの検索パス(Delphi の場合)またはインクルード パス(C++ の場合)
- プロジェクトのソース パス(プロジェクトが保存されたディレクトリ)
- グローバル参照パス
- グローバル ライブラリ パス
- ライブラリ パス(IDE で開いているプロジェクトがない場合にのみ検索されます)
これらのパスは、それぞれ該当する値を編集することで、変更することができます:
- Delphi のプロジェクト固有の検索パス([プロジェクト|オプション...|Delphi コンパイラ])、または、C++ のインクルード パス([プロジェクト|オプション...|C++(共有オプション)])です。
- 以下でアクセスできるグローバルなブラウザ検索パス、および、ライブラリ パス
- グローバル ライブラリ パスは、[実行時パッケージの追加]ダイアログ ボックスで設定できます。
例:
C++
Delphi
ブロック補完 — Enter
ブロック補完は、次のような状況で、コードが欠けている場合に発生します:
- C++ では、補完対象と認識されるブロックは、大括弧 {} 内部にあるコードです。
- Delphi では、補完対象と認識されるブロックは、begin-end 内部にあるコードです。
コード エディタで作業中に、正しく閉じられていないコード ブロックがある場合は、そこで Enter
キーを押すと、現在のカーソル位置の後の空行に閉じるためのトークンが挿入されます。
ドロップダウン メニューでは、既存のステートメントを記号で囲む場合の補完動作を設定します。
- 改行なし - 入力したコードの後にカーソルを置きます。
- 改行あり - 入力したコードの内部にカーソルを置きます。
- 新しいブロックのみ - 補完機能を新しいブロックの開始時にのみ呼び出します。
クラス補完 — Ctrl+Shift+C
クラス補完は、宣言されるクラス メンバのスケルトン コードを生成することで、新規クラスの定義と実装を簡略化します。
ユニットの interface セクションでクラス宣言内にカーソルを置き、Ctrl+Shift+C
を押します。
未完成のプロパティ宣言があれば、すべて補完されます。
実装が必要なすべてのメソッドに対しては、空のメソッドが implementation セクションに追加されます。
クラス補完は、オプション[カーソル位置のクラスを補完]をコード エディタのコンテキスト メニューから選択することで、実行できます。
エラー インサイト
エラー インサイト機能では、無効なコードに赤い下線が付きます。 無効なテキストをカーソルでポイントすると、ツールチップ ウィンドウが開き、可能性のあるエラーの原因が表示されます。
さらに、その式で発生したエラーのリストが[構造]ビューの[エラー]ノードに表示されます。
例:
C++
Delphi
C++ インサイトの索引
C++ インサイトの索引は、ツールチップ インサイトや宣言の検索機能のためのインデックスです。
プロジェクトを実行し、データベースを構築するのは、LSP(Language Server Protocal)サーバーの cquery です。これは CPU を使用しているため、チェックボックス[C++ インサイトの索引]でオフにすることができます。
この設定は、C++ および Clang 拡張コンパイラに対してのみ適用されます。
拡張 C++ コンパイラの場合、この機能は LSP(Language Server Protocal)サーバーを使用します。 これは非同期であり、ブロッキングを行いません。Clang 拡張コンパイラで作業しており、[C++ インサイトの索引]が有効な場合、開いたプロジェクトは索引付きで開かれます。また、ツールチップ インサイトや宣言の検索の機能に使用されるデータベースも作成します。これは CPU を使用しており、チェックボックス[C++ インサイトの索引]でオフにすることができます。'
詳細オプション
ツール API サポート
支援機能サポートは、主に LSP(Language Server Protocol)周りに焦点を当てており、上記のダイアログを使用して、新しい LSP サーバーを作成することができる、汎用 LSP サポートがあります。ただし、IDE は 2 つのことを実装しています: 汎用的な非同期の支援機能、そして次に LSP サポートです。これは、非同期支援機能の特殊な実装の 1 つにあたります。
ToolsAPI は、非同期支援機能に対して、数多くの新しい型とインターフェイスを定義しています。LSP はこれらのインターフェイスを使用していますが、必要に応じて非同期のコード支援機能プロバイダを、任意の実装で記述することができます。
インターフェイスは ToolsAPI.pas に置かれます:
IOTAAsyncCodeInsightManager
は、汎用非同期支援機能マネージャの実装の、メイン インターフェイスです。これは、数多くのコールバックを使っており、そこで定義されています。
IOTACodeInsightUIOverride
は、特定の UI の動作を上書きするために使用されます。
不具合のファイリングとログ ファイル
ログ ファイルを有効にするには、レジストリを開きます:
- キーを作成:
HKEY_CURRENT_USER\Software\Embarcadero\BDS\21.0\LSP
DWORD
値を、名前DelphiLSPLog
、16 進数値$ff
または 10 進数値255
で作成
ログ ファイルは C:\Users\<User>\AppData\Local\Temp\DelphiLSP にできます。
Quality Portal のすべてのバグ レポートにログ ファイルを必ず含めてください。問題の原因を追跡するのに非常に役立ちます。