コード支援機能のリファレンス
コード エディタ(IDE チュートリアル):インデックス への移動
目次
支援機能とは、コード エディタ に組み込まれている機能の一部で(コード補完、パラメータ補完、コード ヒント、ツールチップ式、ツールチップ インサイト、定義への移動、ブロック補完、エラー インサイト)、コード記述プロセスを支援するものを指します。これらの機能は、コードによく挿入されるステートメントの特定、プロパティやメソッドの選択などに役立ちます。 これらの機能の一部について、以下の各セクションで詳しく説明します。
コード支援機能を有効にし、設定するには、[ツール|オプション...|ユーザー インターフェイス|エディタ|言語]を選択し、[支援機能] オプションをクリックします。
支援機能は、言語ごとに定義されています。
Delphi は、支援機能にLSP(Language Server Protocal)を使用しています。
C++ の場合、IDE は自動的に LSP(Language Server Protocol)または従来の支援機能プロバイダを、使用されているコンパイラによって(CLang またはクラシック)使用します。Delphi LSP(Language Server Protocol)を使用する支援機能
LSP(Language Server Protocal)は、IDE と通信する個別のサーバー プロセスを介して言語サービスを提供する仕様です。 このため、コード支援機能は個別のプロセスによって、非同期に提供されます。
プロジェクト ビューには、LSP サーバー アクティビティを表示する小さなペインが下部分にあります。これは、解析時の通信を支援します。
言語
言語は、[ツール|オプション|言語]設定ペインで定義されており、ここでは利用可能なすべての言語を確認することができます。 また、新しい言語を作成することもできます。
エディタ設定のオプションと構文の強調表示
エディタ設定オプションと構文強調表示は、言語ごとに定義されています。 これらは、[ツール|オプション...|ユーザー インターフェイス|エディタ|言語]で[オプション]をクリックすることで確認できます。
この設定ペインでは、言語を選択することができます。 すると、その言語について、エディタ設定オプションと共に、その言語で使用される構文強調表示も確認することができます。
支援機能 / LSP マネージャの変更
Delphi LSP がデフォルトでは有効化されています。 IDE が Delphi LSP を使用しているかどうかは、次の方法で確認できます:
- Delphi プロジェクトを開いたり、顕著な変更を行った場合、プロジェクト ビューの下部分に、DelphiLSP アクティビティを表す、小さな進捗バーが確認できるでしょう。
- 代わりに、タスク マネージャを開いて、DelphiLSP.exe プロセスを探しても同様のことが確認できます。大抵は複数のプロセスが見られます。
言語の最後のタブは、支援機能です。 ここでは、ユーザー エディタ フォント と、一連の 支援機能 設定があります。
支援機能マネージャは、言語に対して支援機能を提供します: そのマネージャがその言語を対象としていない場合でも、そこに一覧されているマネージャにこれを設定できます。
LSP または クラシック(従来のもの) のどちらの支援機能実装を使用するか、Delphi を変更するには、次のように選択します:
- Delphi(LSP: Language Server Protocol): 新しい LSP サポート。
- Delphi(従来の支援機能): 10.3.3 以前で使用されていた支援機能の古い実装です。このオプションを選択した場合、LSP はオフにします。
また、新しい LSP マネージャを作成することもできます。[新規作成]をクリックすると、LSP サーバー実行可能ファイルとオプション群を指定することができるダイアログが表示されます。これには、呼び名、言語識別し、サーバーが強制的に再起動されるまでのタイムアウト、その他初期化 JSON RPC 呼び出しに挿入されるサーバー固有の初期化オプションなどが含まれます。
このオプションを使用して、Python やその他の言語に対して、サーバーを追加することができます。
.delphilsp.json ファイルの作成
LSP を使用するためのプロジェクト固有の設定は、自動的に .delphilsp.json ファイルにプロジェクトと同じ名前で設定されます。 この構成ファイルは、LSP を外部エディタ(Visual Studio Code など)と一緒に使用する場合に読み込まれます。 このファイルの生成をオフにするには:
- Delphi プロジェクトを作成します。
- ツール > オプション... > ユーザー インターフェイス > エディタ > 言語 > 支援機能 と移動し、[LSP 設定を生成]をオンにします。
- IDE でプロジェクトを保存して閉じます。
- プロジェクトを再度開いたときに、新しいプロジェクトが、別の拡張子(.delphilsp.json)を持った同じ名前で現れます。
コード補完 — Ctrl+Space
コード補完の機能では、識別子のいずれかの部分に入力された文字列を含む、すべての項目およびメソッドのドロップダウン リストを表示します。 型のセットを表示します。 プロパティの宣言では、取得メソッドと設定メソッドを提示します。
プロジェクトおよびプロジェクトの main ソースに直接一部ではないヘッダー ファイルを、コード補完することができます。
コード補完を行うには、コード エディタの使用時、Ctrl+Space
を押します。 文字を選択し、Enter
を押して、コードのカーソル位置にテキストを挿入します。
コード補完はまた、あるコード位置で自動的に起動されます。Delphi
でピリオド "." を入力した際や、C++
でピリオド "."、矢印 "->"、スコープ "::"、またはヘッダー "#include <" 文などを入力した際などです。
特定の言語のコード補完を呼び出すには、次の方法を使用します。
C++
-
Ctrl+Space
キーを押します(常にコード補完が起動されます)。.
または->
を入力(支援機能のオプション ページで、自動呼び出しが有効なときにのみ動作します)。- コード補完をキャンセルするには、
Esc
キーを押します。
Delphi
-
Ctrl+Space
キーを押します(常にコード補完が起動されます)。.
を入力(支援機能のオプション ページで、自動呼び出しが有効なときにのみ動作します)。- コード補完をキャンセルするには、
Esc
キーを押します。
文字を入力する際、選択/マッチングの動作は、入力されるにつれ、次のように認識していきます。
- 入力されたものと識別子で完全一致するものがあった場合、それを選択。
- そうでなければ、入力されたもので始まる最初の識別子を選択。
- そうでなければ、入力されたものを含む最初の識別子を選択。
たとえば、エディタで MyControl と入力、コード補完を呼び出し、その後 rect を入力すると、Rect で始まるプロパティやメソッドだけでなく、ClientRect、BoundsRect なども一致します。 識別子文字列内に rect を含むものはすべて表示されます。
コード補完は次のような状況で、正しい結果を含め、正しく機能します:
- まだディスク上に存在しない
- プロジェクトもユニットもディスク上に存在しない新しいプロジェクト
- 現在の IDE コード内で補完結果に影響を与える変更が行われている、まだ保存されていない、変更済みユニット
- ターゲット プラットフォームや他のプロジェクト オプションを変更したときの結果は正しい(そして正しく変更された)
- ユニットが .inc ファイルをインクルードしている
Uses 句の補完におけるコード補完機能:
- プロジェクトおよび検索パス上の PAS ファイルおよび DCU を表示します。
- 検索パスからのユニットと、設定したネームスペースがついていないそれらの短縮形式を一覧します。
- 選択されたユニットが、すでに現在のユニットで使用されているかどうかを示します。
- マッチングおよびフィルタリングでは、大文字小文字は区別されません。
- コード補完は、外部で 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
を押した場合に、自動的に起動します。 ポップアップ ウィンドウに、メソッド呼び出しの引数の名前と型をヒントとして表示します。 それに一致するものがリストで自動的に選択されるので、希望するものが見つかったところで Return
キーを押すと、
コードの現在のカーソル位置にテキストが挿入されます。 パラメータに XMLDoc があった場合、パラメータ補完時に表示されました。
パラメータのツールチップ/ヘルプは、ジェネリック型をインスタンス化した際に表示されます。
例:
C++
Delphi
コード ヒント
コード ヒントでは、型や宣言元のファイルと行番号などのシンボルに関する情報をヒントとして表示します。 コード エディタ で作業中に、マウス ポインタをコード内の識別子の上に置くことで、コード ヒントを表示させることができます。
ヘルプ インサイト機能が無効になっている場合には、コード ヒントは Delphi
に対してのみ動作します。
例:
ツールチップ式評価
ツールチップの式評価には、カーソルでポイントした、変数の現在の値が表示されます。 この機能は、デバッグ セッション中にプログラムの実行が一時停止したとき、使用できます。
例:
C++
Delphi
ツールチップ インサイト
ツールチップ インサイトは、マウスがシンボルの上にくると、ポップアップ ウィンドウに表示します。
ツールチップ|シンボル インサイト
ツールチップ シンボル インサイトは、コード エディタでカーソルがシンボルの上にくると、識別子について、ツールチップ ウィンドウ内に宣言情報が表示します。
例:
C++
Delphi
ツールチップ ヘルプ インサイト — Ctrl+Shift+H
ツールチップのヘルプ インサイトでは、宣言されている型、ファイル、行番号など、シンボルについての情報を、そのシンボルに関連づけられている XML ドキュメントと共に(もしそれがあれば)、表示します。 これは、ジェネリック型クラスに対しても機能し、例外情報および配列やセットの行番号を表示します。
ツールチップ ヘルプ インサイトを呼び出すには、コード エディタで作業中に、マウス ポインタをコード内の識別子の上に置きます。 Ctrl+Shift+H
を押して、呼び出すこともできます。
例:
C++
Delphi
宣言の検索 — Ctrl+クリック
宣言の検索では、型または変数が定義されている場所へナビゲートしてくれます。
コード エディタを使用する際、Ctrl+Click
を使用して、識別子やその継承メソッドを定義しているコードに、自動的にジャンプすることができます。
コードを参照するには、クラス、変数、プロパティ、メソッド、その他の識別子の名前の上にマウス カーソルがあるときに Ctrl
キーを押します。
マウス ポインタが手の形になり、識別子が下線付きで強調表示されます。 強調表示されている識別子をクリックすると、コード エディタは、必要に応じてソース ファイルを開き、その識別子の宣言部分にジャンプします。 識別子を右クリックし[定義の検索]を選択しても、同じ結果になります。 Alt + 左
矢印を押すと、参照前の場所に戻れます。
また、Ctrl+Shift+上/下
矢印を使用して、メソッドの宣言と実装の間を移動できます。
アクティブではないマクロ/ifdef の内部で Ctrl+Shift+Down
を押すと、次の宣言済みメソッドの実装にジャンプします。
[宣言の検索]機能 - Ctrl+Click
は次と機能します:
- シンボル(変数、メソッド、プロパティ、その他の識別子)
- 型(クラス、列挙型、レコード、その他の型など)
- uses の要素
- マクロ (定義) は、IFDEF がある場合にメソッドの実装と宣言の間の切り替えがより適切に機能するようにします。 マクロ (定義) は、インクルード ファイルで宣言されている場合に見つかり、上記に影響します。
[宣言の検索]は、プロジェクトの検索パスまたはソース パス、もしくは、製品の参照パスやライブラリ パスの中にある、ユニットのみを見つけ開くことができます。以下の順にディレクトリが検索されます。
- プロジェクトの検索パス(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
さらに、その式で発生したエラーのリストが[構造]ビューの[エラー]ノードに表示されます。
エディタ ステータス バーでは、現在のファイルにエラー、警告、および/またはヒントがいくつ表示されているのか、エラー インサイトの概要を確認することができます。
これらは、[ツール|オプション...|ユーザー インターフェイス|エディタ|言語]で[エラー インサイト]をクリックして、そのプロパティを設定することができます。
- [表示するエラー インサイトのレベル]: コード エディタで確認したいエラー インサイトのレベルを決定します。 選択できるオプションには次のものがあります:
- [なし]: コード エディタでいずれのレベルのエラー インサイトも表示しない場合には、このオプションを選択します。
- [エラーのみ]: コード エディタにエラーのみを表示します。エラーは、赤の波線で表示されます。
- [警告以上]:コード エディタに警告を表示します。 警告は、オレンジの波線で表示されます。
- [ヒント以上]: コード エディタにヒントを表示します。 ヒントは、青の波線で表示されます。
- [すべて]: コード エディタにすべてのレベルのエラー インサイトを表示します。
- [Editor rendering style]: 下線スタイルを次の選択肢から決定:
クラシック
、波線
、実線
、点線
- [Show Error Insight in editor gutter]: このオプションを有効/無効にすることで、コード エディタでファイルをスクロールしている間に、特定の場所にエラー、警告、および/またはヒントのアイコンを表示/非表示させることができます。
エラー インサイト機能に問題がある場合:
- IDE を閉じる
- レジストリ エディタを開く
HKEY_CURRENT_USER\Software\Embarcadero\BDS\21.0\Editor\Source Options\Borland.EditOptions.Pascal
フォルダに移動- ErrorInsightLevel キーを削除
- IDE を再起動
C++ インサイトの索引
C++ インサイトの索引は、ツールチップ インサイトや宣言の検索機能のためのインデックスです。
プロジェクトを実行し、データベースを構築するのは、LSP(Language Server Protocal)サーバーの cquery です。これは CPU を使用しているため、チェックボックス[C++ インサイトの索引]でオフにすることができます。
この設定は、C++ および Clang 拡張コンパイラに対してのみ適用されます。
拡張 C++ コンパイラの場合、この機能は LSP(Language Server Protocal)サーバーを使用します。 これは非同期であり、ブロッキングを行いません。Clang 拡張コンパイラで作業しており、[C++ インサイトの索引]が有効な場合、開いたプロジェクトは索引付きで開かれます。また、ツールチップ インサイトや宣言の検索の機能に使用されるデータベースも作成します。これは CPU を使用しており、チェックボックス[C++ インサイトの索引]でオフにすることができます。'
LSP の動作
[LSP 動作]タブは、cquery LSP サーバーがファイルにインデックスを付ける方法を制御します。 つまり、コード補完やナビゲーションなどを完遂するために使用される情報を、どのように格納するかを制御します。
- インデックス作成は CPU に非常に負荷のかかる処理であり、それが完了するまで支援機能を使用することはできません。
- プラットフォームを変更するときにサーバーを再起動すると、インデックスがクリアされます。
[LSP の動作]タブには 3 つの選択肢があります:
- プロジェクトがアクティブになるたびにサーバーを再起動する: プロジェクト内のすべてのファイルと、エディタで開かれたすべてのファイルにインデックスを付けます。これは最も CPU を集中的に使用するオプションであり、プロジェクト全体をインデックスで使用できるという利点があります。 このオプションを使用すると、プロジェクト ビューで新しいアクティブなプロジェクトを選択するか、プロジェクト オプションまたはプラットフォーム オプションを変更するたびに、LSP サーバーが再起動されます。
on
になっています。- エディタに開かれたファイルにのみインデックスを付ける: プロジェクトに関係なく、開いているファイルのみをインデックス化します。CPU への負荷は低くなり、支援機能をより迅速に利用できるようになります。 ただし、ファイルを開くたびに支援機能が使用可能になるまでに少し時間がかかるようになります。 このオプションにより、すべてのプロジェクトまたはプロジェクト グループを閉じるか、プロジェクト オプションまたはプラットフォーム オプションを変更しない限り、LSP サーバーがシャットダウンまたは再起動されることはありません。
- プロジェクト グループ内のすべてのファイルにインデックスを付ける: プロジェクト グループがロードされたときに、すべてのプロジェクトののすべてのファイルにインデックスを付けます。 すべてのプロジェクトとプロジェクト グループを閉じるか、プロジェクト オプションまたはプラットフォーム オプションを変更しない限り、LSP サーバーがシャットダウンまたは再起動されることはありません。
詳細オプション
ツール API サポート
支援機能サポートは、主に LSP(Language Server Protocol)周りに焦点を当てており、上記のダイアログを使用して、新しい LSP サーバーを作成することができる、汎用 LSP サポートがあります。ただし、IDE は 2 つのことを実装しています: 汎用的な非同期の支援機能、そして次に LSP サポートです。これは、非同期支援機能の特殊な実装の 1 つにあたります。
ToolsAPI は、非同期支援機能に対して、数多くの新しい型とインターフェイスを定義しています。LSP はこれらのインターフェイスを使用していますが、必要に応じて非同期のコード支援機能プロバイダを、任意の実装で記述することができます。
インターフェイスは ToolsAPI.pas に置かれます:
IOTAAsyncCodeInsightManager
は、汎用非同期支援機能マネージャの実装の、メイン インターフェイスです。これは、数多くのコールバックを使っており、そこで定義されています。
IOTACodeInsightUIOverride
は、特定の UI の動作を上書きするために使用されます。
不具合のファイリングとログ ファイル
バグおよびログ ファイルを埋めるには、「トラブルシューティング:Delphi LSP」を参照してください。