このドキュメントでは自動的にVS Codeと補完する機能を実装します.
補完機能の実装用CodeTourを使うためには,ブランチを切り替える必要があります.
以下のコマンドを実行するか,エディタの左下のブランチ名main
をクリックし,origin/linter
を選んでください.
git checkout -b completions origin/completions
git checkout completions
補完機能を実装するためには,サーバーの初期化設定に以下のコードを追加する必要があります.
connection.onInitialize((params): InitializeResult => {
...
return {
capabilities: {
...
// Tell the client that the server supports code completion
completionProvider: {
resolveProvider: true
}
}
};
});
それでは実際に補完機能を実装します.
まずは,ドキュメントを監視し,補完する文字列を定義します.
setupDocumentsListeners
を以下のように書き換えましょう.
今回は1行目でvを入力するとVS Code
,Visual Studio Code
の2つを補完します.
ここでは,textDocumentPosition
からカーソルの位置を取得しています.
function setupDocumentsListeners() {
// ドキュメントを作成、変更、閉じる作業を監視するマネージャー
documents.listen(connection);
// 補完機能の要素リスト
connection.onCompletion(
(textDocumentPosition: TextDocumentPositionParams): CompletionItem[] => {
// 1行目の場合はVS CodeとVisual Studio Codeを返す
if (textDocumentPosition.position.line === 0) {
return [
{
// 補完を表示する文字列
label: 'VS Code',
// コード補完の種類、ここではTextを選ぶがMethodなどもある
kind: CompletionItemKind.Text,
// 補完リスト上でのラベル
data: 1
}, {
// 補完を表示する文字列
label: 'Visual Studio Code',
// コード補完の種類、ここではTextを選ぶがMethodなどもある
kind: CompletionItemKind.Text,
// 補完リスト上でのラベル
data: 1
}
];
}
}
);
}
さらに,2行目以降の動作を追加します.
textDocumentPosition
を使ってファイルパスを取得し,補完を行います.
connection.onCompletion(
...
// 2行目以降はファイル名を返す
const fileUri = textDocumentPosition.textDocument.uri;
return [
{
label: fileUri.substr(fileUri.lastIndexOf('/') + 1),
kind: CompletionItemKind.Text,
data: 2
}
];
...
);
次にsetupDocumentsListeners
の中でラベル付けされた補完リストの詳細を定義する関数を定義します.
function setupDocumentsListeners() {
...
// ラベル付けされた補完リストの詳細を取得する
connection.onCompletionResolve(
(item: CompletionItem): CompletionItem => {
if (item.data === 1) {
// 詳細名
item.detail = 'VS Code 詳細';
// 詳細ドキュメント
item.documentation = 'Visual Studio Code 詳細ドキュメント';
} else if (item.data === 2) {
item.detail = '現在のファイル名';
item.documentation = 'ファイル名 詳細ドキュメント';
}
return item;
}
);
}
Launch Client
またはF5キーで実行してみましょう.
冒頭のgifと同様に,1行目でvを入力するとVS Code
とVisual Studio Code
の2つが表示されます.
また,2行目以降でファイル名を入力すると現在のファイル名が表示されるはずです.
- 好きな言語の補完機能を実装してみましょう.(package.jsonでの対応言語設定(
activationEvent
)を忘れないように)- 標準入力 (
int(input())
など)と標準出力 (print文など)を補完してみましょう. - 補完機能を実装したら,テストしましょう.
- 標準入力 (
- (まだなら)コースAのリンター機能を実装してみましょう.