コード支援機能のリファレンス

提供: RAD Studio
移動先: 案内検索

コード エディタ(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(Language Server Protocal) を使用する支援機能は、通常のコード編集時だけでなく、デバッグ時に使用できます。

言語

言語は、[ツール|オプション|言語]設定ペインで定義されており、ここでは利用可能なすべての言語を確認することができます。 また、新しい言語を作成することもできます。

Language.png

エディタ設定のオプションと構文の強調表示

エディタ設定オプションと構文強調表示は、言語ごとに定義されています。 これらは、[ツール|オプション...|ユーザー インターフェイス|エディタ|言語][オプション]をクリックすることで確認できます。

Editor.png

この設定ペインでは、言語を選択することができます。 すると、その言語について、エディタ設定オプションと共に、その言語で使用される構文強調表示も確認することができます。

Syntax Highlighter1.png

支援機能 / LSP マネージャの変更

Delphi LSP がデフォルトでは有効化されています。 IDE が Delphi LSP を使用しているかどうかは、次の方法で確認できます:

  • Delphi プロジェクトを開いたり、顕著な変更を行った場合、プロジェクト ビューの下部分に、DelphiLSP アクティビティを表す、小さな進捗バーが確認できるでしょう。
  • 代わりに、タスク マネージャを開いて、DelphiLSP.exe プロセスを探しても同様のことが確認できます。大抵は複数のプロセスが見られます。

言語の最後のタブは、支援機能です。 ここでは、ユーザー エディタ フォント と、一連の 支援機能 設定があります。

支援機能マネージャは、言語に対して支援機能を提供します: そのマネージャがその言語を対象としていない場合でも、そこに一覧されているマネージャにこれを設定できます。

注意: 使用中の言語を対象としていないものに、支援機能マネージャを変更することは推奨されません。

LSP または クラシック(従来のもの) のどちらの支援機能実装を使用するか、Delphi を変更するには、次のように選択します:

  • Delphi(LSP: Language Server Protocol): 新しい LSP サポート。
  • Delphi(従来の支援機能): 10.3.3 以前で使用されていた支援機能の古い実装です。このオプションを選択した場合、LSP はオフにします。

Code Insight DelphiLSP.png

また、新しい LSP マネージャを作成することもできます。[新規作成]をクリックすると、LSP サーバー実行可能ファイルとオプション群を指定することができるダイアログが表示されます。これには、呼び名、言語識別し、サーバーが強制的に再起動されるまでのタイムアウト、その他初期化 JSON RPC 呼び出しに挿入されるサーバー固有の初期化オプションなどが含まれます。

このオプションを使用して、Python やその他の言語に対して、サーバーを追加することができます。

メモ: RAD Studio は、標準 I/O(コンソール I/O)上で通信するサーバーのみをサポートします。

New LSP Manager.png

.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 キーを押します。

Code Completion C.png

メモ: 拡張 C++ コンパイラの場合、この機能は言語サーバー プロトコルのサーバーを使用します。 これは非同期であり、ブロッキングを行いません。
  • Delphi
  • Ctrl+Space キーを押します(常にコード補完が起動されます)。
  • . を入力(支援機能のオプション ページで、自動呼び出しが有効なときにのみ動作します)。
  • コード補完をキャンセルするには、Esc キーを押します。

Code Completion D.png

文字を入力する際、選択/マッチングの動作は、入力されるにつれ、次のように認識していきます。

  • 入力されたものと識別子で完全一致するものがあった場合、それを選択。
  • そうでなければ、入力されたもので始まる最初の識別子を選択。
  • そうでなければ、入力されたものを含む最初の識別子を選択。

たとえば、エディタで MyControl と入力、コード補完を呼び出し、その後 rect を入力すると、Rect で始まるプロパティやメソッドだけでなく、ClientRect、BoundsRect なども一致します。 識別子文字列内に rect を含むものはすべて表示されます。

コード補完は次のような状況で、正しい結果を含め、正しく機能します:

  • まだディスク上に存在しない
  • プロジェクトもユニットもディスク上に存在しない新しいプロジェクト
  • 現在の IDE コード内で補完結果に影響を与える変更が行われている、まだ保存されていない、変更済みユニット
  • ターゲット プラットフォームや他のプロジェクト オプションを変更したときの結果は正しい(そして正しく変更された)
  • ユニットが .inc ファイルをインクルードしている

Uses 句の補完におけるコード補完機能:

  • プロジェクトおよび検索パス上の PAS ファイルおよび DCU を表示します。
  • 検索パスからのユニットと、設定したネームスペースがついていないそれらの短縮形式を一覧します。
  • 選択されたユニットが、すでに現在のユニットで使用されているかどうかを示します。
メモ:
  • マッチングおよびフィルタリングでは、大文字小文字は区別されません。
  • コード補完は、外部で MSBuild を使用してコンパイル がオンの場合に機能します。
  • コード補完のドロップダウンでは:
    • 最短一致のシンボルが選択されます。
    • 一番上の項目が選択されます(それが最初に表示されたとき)。

コード補完の設定

コード補完を使用する際、インサイト オプション タブで設定できるコード補完フィルタがあります。 これらは、[ツール|オプション...|ユーザー インターフェイス|エディタ|言語][インサイト オプション]をクリックすることで確認できます。

Insight Options.png

このフィルタを用途に応じて使用します:

  • [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++

Parameter Completion C.png

メモ: 拡張 C++ コンパイラの場合、この機能は言語サーバー プロトコルのサーバーを使用します。 これは非同期であり、ブロッキングを行いません。
  • Delphi

Parameter Completion D.png

コード ヒント

コード ヒントでは、型や宣言元のファイルと行番号などのシンボルに関する情報をヒントとして表示します。 コード エディタ で作業中に、マウス ポインタをコード内の識別子の上に置くことで、コード ヒントを表示させることができます。

メモ:

ヘルプ インサイト機能が無効になっている場合には、コード ヒントは Delphi に対してのみ動作します。

ヘルプ インサイト機能を無効にするには、ツールチップのヘルプ インサイト[ツール|オプション...|エディタ設定|言語|コード補完]ダイアログ ボックス内)のチェックを外します。

例:

Code Hints D.png

ツールチップ式評価

ツールチップの式評価には、カーソルでポイントした、変数の現在の値が表示されます。 この機能は、デバッグ セッション中にプログラムの実行が一時停止したとき、使用できます。

例:

  • C++

Tooltip Expresion Evaluation C.png

  • Delphi

Tooltip Expresion Evaluation D.png

ツールチップ インサイト

ツールチップ インサイトは、マウスがシンボルの上にくると、ポップアップ ウィンドウに表示します。

ツールチップ|シンボル インサイト

ツールチップ シンボル インサイトは、コード エディタでカーソルがシンボルの上にくると、識別子について、ツールチップ ウィンドウ内に宣言情報が表示します。

例:

  • C++

Tooltip Symbol Insight C.png

  • Delphi

Tooltip Symbol Insight D.png

ツールチップ ヘルプ インサイト — Ctrl+Shift+H

ツールチップのヘルプ インサイトでは、宣言されている型、ファイル、行番号など、シンボルについての情報を、そのシンボルに関連づけられている XML ドキュメントと共に(もしそれがあれば)、表示します。 これは、ジェネリック型クラスに対しても機能し、例外情報および配列やセットの行番号を表示します。

ツールチップ ヘルプ インサイトを呼び出すには、コード エディタで作業中に、マウス ポインタをコード内の識別子の上に置きます。 Ctrl+Shift+H を押して、呼び出すこともできます。

例:

  • C++

Tooltip Help Insight C.png

メモ: これは、クラシック コンパイラの使用時のみ利用できます。
  • Delphi

Tooltip Help InsightD.png

メモ: ツールチップ はプロジェクトにまだリンク付けされていないユニットの定義場所を表示します。

宣言の検索 — Ctrl+クリック

宣言の検索では、型または変数が定義されている場所へナビゲートしてくれます。

コード エディタを使用する際、Ctrl+Click を使用して、識別子やその継承メソッドを定義しているコードに、自動的にジャンプすることができます。

コードを参照するには、クラス、変数、プロパティ、メソッド、その他の識別子の名前の上にマウス カーソルがあるときに Ctrl キーを押します。

マウス ポインタが手の形になり、識別子が下線付きで強調表示されます。 強調表示されている識別子をクリックすると、コード エディタは、必要に応じてソース ファイルを開き、その識別子の宣言部分にジャンプします。 識別子を右クリックし[定義の検索]を選択しても、同じ結果になります。 Alt + 左矢印を押すと、参照前の場所に戻れます。

また、Ctrl+Shift+上/下 矢印を使用して、メソッドの宣言と実装の間を移動できます。

アクティブではないマクロ/ifdef の内部で Ctrl+Shift+Down を押すと、次の宣言済みメソッドの実装にジャンプします。

[宣言の検索]機能 - Ctrl+Click は次と機能します:

  • シンボル(変数、メソッド、プロパティ、その他の識別子)
  • 型(クラス、列挙型、レコード、その他の型など)
  • uses の要素
  • マクロ (定義) は、IFDEF がある場合にメソッドの実装と宣言の間の切り替えがより適切に機能するようにします。 マクロ (定義) は、インクルード ファイルで宣言されている場合に見つかり、上記に影響します。

[宣言の検索]は、プロジェクトの検索パスまたはソース パス、もしくは、製品の参照パスライブラリ パスの中にある、ユニットのみを見つけ開くことができます。以下の順にディレクトリが検索されます。

  1. プロジェクトの検索パス(Delphi の場合)またはインクルード パス(C++ の場合)
  2. プロジェクトのソース パス(プロジェクトが保存されたディレクトリ)
  3. グローバル参照パス
  4. グローバル ライブラリ パス
  5. ライブラリ パス(IDE で開いているプロジェクトがない場合にのみ検索されます)

これらのパスは、それぞれ該当する値を編集することで、変更することができます:

例:

  • C++

Find Declaration C.png

  • Delphi

Find Declaration D.png

ブロック補完 — Enter

ブロック補完は、次のような状況で、コードが欠けている場合に発生します:

  • C++ では、補完対象と認識されるブロックは、大括弧 {} 内部にあるコードです。
  • Delphi では、補完対象と認識されるブロックは、begin-end 内部にあるコードです。

コード エディタで作業中に、正しく閉じられていないコード ブロックがある場合は、そこで Enter キーを押すと、現在のカーソル位置の後の空行に閉じるためのトークンが挿入されます。

ドロップダウン メニューでは、既存のステートメントを記号で囲む場合の補完動作を設定します。

  • 改行なし - 入力したコードの後にカーソルを置きます。
  • 改行あり - 入力したコードの内部にカーソルを置きます。
  • 新しいブロックのみ - 補完機能を新しいブロックの開始時にのみ呼び出します。

クラス補完 — Ctrl+Shift+C

クラス補完は、宣言されるクラス メンバのスケルトン コードを生成することで、新規クラスの定義と実装を簡略化します。

ユニットの interface セクションでクラス宣言内にカーソルを置き、Ctrl+Shift+C を押します。 未完成のプロパティ宣言があれば、すべて補完されます。

実装が必要なすべてのメソッドに対しては、空のメソッドが implementation セクションに追加されます。

クラス補完は、オプション[カーソル位置のクラスを補完]コード エディタのコンテキスト メニューから選択することで、実行できます。

エラー インサイト

エラー インサイト機能では、注意が必要なコードに下線が付きます。 これには、エラー(赤の下線)、警告(オレンジの下線)、および/またはヒント(青の下線)を発生させるコードがあります。エラーだけを表示させ、警告やヒントは表示させないなど、エディタに表示される問題を、深刻度で選択することができます。

無効なテキストをカーソルでポイントすると、ツールチップ ウィンドウが開き、可能性のあるエラーの原因が表示されます。

例:

  • C++

Error Insight CP.png

  • Delphi

Error Insight Del.png

さらに、その式で発生したエラーのリストが[構造]ビューの[エラー]ノードに表示されます。

Error Insight Structure View.png

エディタ ステータス バーでは、現在のファイルにエラー、警告、および/またはヒントがいくつ表示されているのか、エラー インサイトの概要を確認することができます。

Error Insight Summary.png

これらは、[ツール|オプション...|ユーザー インターフェイス|エディタ|言語][エラー インサイト]をクリックして、そのプロパティを設定することができます。

Error Insight.png

  • [表示するエラー インサイトのレベル]: コード エディタで確認したいエラー インサイトのレベルを決定します。 選択できるオプションには次のものがあります:
    • [なし]: コード エディタでいずれのレベルのエラー インサイトも表示しない場合には、このオプションを選択します。
    • [エラーのみ]: コード エディタにエラーのみを表示します。エラーは、赤の波線で表示されます。
    • [警告以上]:コード エディタに警告を表示します。 警告は、オレンジの波線で表示されます。
    • [ヒント以上]: コード エディタにヒントを表示します。 ヒントは、青の波線で表示されます。
    • [すべて]: コード エディタにすべてのレベルのエラー インサイトを表示します。
  • [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 に非常に負荷のかかる処理であり、それが完了するまで支援機能を使用することはできません。
  • プラットフォームを変更するときにサーバーを再起動すると、インデックスがクリアされます。

Language LSP Behavior.png

[LSP の動作]タブには 3 つの選択肢があります:

  • プロジェクトがアクティブになるたびにサーバーを再起動する: プロジェクト内のすべてのファイルと、エディタで開かれたすべてのファイルにインデックスを付けます。これは最も CPU を集中的に使用するオプションであり、プロジェクト全体をインデックスで使用できるという利点があります。 このオプションを使用すると、プロジェクト ビューで新しいアクティブなプロジェクトを選択するか、プロジェクト オプションまたはプラットフォーム オプションを変更するたびに、LSP サーバーが再起動されます。
メモ: すべての C++ プロジェクトにおいて、このオプションはデフォルトで on になっています。
  • エディタに開かれたファイルにのみインデックスを付ける: プロジェクトに関係なく、開いているファイルのみをインデックス化します。CPU への負荷は低くなり、支援機能をより迅速に利用できるようになります。 ただし、ファイルを開くたびに支援機能が使用可能になるまでに少し時間がかかるようになります。 このオプションにより、すべてのプロジェクトまたはプロジェクト グループを閉じるか、プロジェクト オプションまたはプラットフォーム オプションを変更しない限り、LSP サーバーがシャットダウンまたは再起動されることはありません。
  • プロジェクト グループ内のすべてのファイルにインデックスを付ける: プロジェクト グループがロードされたときに、すべてのプロジェクトののすべてのファイルにインデックスを付けます。 すべてのプロジェクトとプロジェクト グループを閉じるか、プロジェクト オプションまたはプラットフォーム オプションを変更しない限り、LSP サーバーがシャットダウンまたは再起動されることはありません。

詳細オプション

ツール API サポート

支援機能サポートは、主に LSP(Language Server Protocol)周りに焦点を当てており、上記のダイアログを使用して、新しい LSP サーバーを作成することができる、汎用 LSP サポートがあります。ただし、IDE は 2 つのことを実装しています: 汎用的な非同期の支援機能、そして次に LSP サポートです。これは、非同期支援機能の特殊な実装の 1 つにあたります。

ToolsAPI は、非同期支援機能に対して、数多くの新しい型とインターフェイスを定義しています。LSP はこれらのインターフェイスを使用していますが、必要に応じて非同期のコード支援機能プロバイダを、任意の実装で記述することができます。

インターフェイスは ToolsAPI.pas に置かれます:

  • IOTAAsyncCodeInsightManager は、汎用非同期支援機能マネージャの実装の、メイン インターフェイスです。これは、数多くのコールバックを使っており、そこで定義されています。
  • IOTACodeInsightUIOverride は、特定の UI の動作を上書きするために使用されます。

不具合のファイリングとログ ファイル

バグおよびログ ファイルを埋めるには、「トラブルシューティング:Delphi LSP」を参照してください。

次へ

リファクタリング