Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions .tours/completion.tour
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
{
"$schema": "https://aka.ms/codetour-schema",
"title": "Completion",
"steps": [
{
"file": "server/src/server.ts",
"description": "サーバー初期化時にコード補完機能を提供する`completionProvider`を定義する",
"line": 45,
"selection": {
"start": {
"line": 43,
"character": 1
},
"end": {
"line": 45,
"character": 5
}
},
"title": "サーバーの初期化設定"
},
{
"file": "server/src/server.ts",
"description": "connection.onCompletionで補完機能を定義する",
"line": 57,
"selection": {
"start": {
"line": 57,
"character": 1
},
"end": {
"line": 57,
"character": 26
}
},
"title": "補完機能の定義"
},
{
"file": "server/src/server.ts",
"description": "引数`textDocumentPosition`からカーソルの位置を取得する",
"line": 60,
"selection": {
"start": {
"line": 58,
"character": 1
},
"end": {
"line": 60,
"character": 51
}
},
"title": "ファイル情報の取得"
},
{
"file": "server/src/server.ts",
"description": "`VS Code`や`Visual Studio Code`を補完するリストを返す.",
"line": 77,
"selection": {
"start": {
"line": 61,
"character": 1
},
"end": {
"line": 77,
"character": 7
}
},
"title": "補完要素リストの定義"
},
{
"file": "server/src/server.ts",
"description": "ファイル名を取得し,補完リストとして返す",
"line": 87,
"selection": {
"start": {
"line": 79,
"character": 1
},
"end": {
"line": 87,
"character": 6
}
},
"title": "ファイル名の取得"
},
{
"file": "server/src/server.ts",
"description": "補完リストのラベルに応じて詳細やドキュメントを定義する",
"line": 105,
"selection": {
"start": {
"line": 92,
"character": 1
},
"end": {
"line": 105,
"character": 4
}
},
"title": "詳細情報の定義"
}
],
"ref": "completions"
}
12 changes: 0 additions & 12 deletions .tours/intro.tour

This file was deleted.

37 changes: 6 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,10 @@
# vscode-language-server-template README
# vscode-language-server-template 補完機能版 README

"vscode-language-server-template"のREADMEテンプレートです。
実装の内容に従って以下のコンテンツを追加してください。
"vscode-language-server-template"を用いた補完機能を作成します。

## 機能

拡張機能の特徴を記入してください。
可能であればスクリーンショットを記載してください。

> Tip: 多くの人気拡張機能は動画を用意しています。利用動画があると使い方を直感的に理解できるようになります。

## 必要環境

必要な依存関係や環境設定があればここに記入してください。

## 設定

拡張機能で利用する設定があればここに記入してください。
![Usage](./usage.gif)

例:

本拡張機能は以下を[設定](https://code.visualstudio.com/docs/getstarted/settings)可能です:

* `sampleserver.enable`: 拡張機能を 有効/無効 にする。標準では有効になっています。

## コマンド

コマンドを作成している場合はここに記入してください。

例:

本拡張機能は以下のコマンドから呼び出すことができます:
## 機能

`Fix all auto-fixable problems`: ソースコードを上の警告を修正する。
* 1行目なら`VS Code`, `Visual Studio Code`を補完
* 2行目以降ならファイル名を補完
109 changes: 55 additions & 54 deletions server/src/server.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use strict';

import {
CompletionItem,
CompletionItemKind,
createConnection,
Diagnostic,
DiagnosticSeverity,
ProposedFeatures,
Range,
TextDocumentPositionParams,
TextDocuments,
TextDocumentSyncKind,
} from 'vscode-languageserver/node';
Expand Down Expand Up @@ -39,69 +39,70 @@ connection.onInitialize((_params, _cancel, progress) => {
save: {
includeText: false,
}
},
completionProvider: {
resolveProvider: true
}
},
};
});

/**
* テキストドキュメントを検証する
* @param doc 検証対象ドキュメント
*/
function validate(doc: TextDocument) {
// 警告などの状態を管理するリスト
const diagnostics: Diagnostic[] = [];
// 0行目(エディタ上の行番号は1から)の端から端までに警告
const range: Range = {start: {line: 0, character: 0},
end: {line: 0, character: Number.MAX_VALUE}};
// 警告を追加する
const diagnostic: Diagnostic = {
// 警告範囲
range: range,
// 警告メッセージ
message: 'Hello world',
// 警告の重要度、Error, Warning, Information, Hintのいずれかを選ぶ
severity: DiagnosticSeverity.Warning,
// 警告コード、警告コードを識別するために使用する
code: '',
// 警告を発行したソース、例: eslint, typescript
source: 'sample',
};
diagnostics.push(diagnostic);
//接続に警告を通知する
connection.sendDiagnostics({ uri: doc.uri, diagnostics });
}


/**
* ドキュメントの動作を監視する
*/
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行目以降はファイル名を返す
const fileUri = textDocumentPosition.textDocument.uri;
return [
{
label: fileUri.substr(fileUri.lastIndexOf('/') + 1),
kind: CompletionItemKind.Text,
data: 2
}
];
}
);

// 開いた時
documents.onDidOpen((event) => {
validate(event.document);
});

// 変更した時
documents.onDidChangeContent((change) => {
validate(change.document);
});

// 保存した時
documents.onDidSave((change) => {
validate(change.document);
});

// 閉じた時
documents.onDidClose((close) => {
// ドキュメントのURI(ファイルパス)を取得する
const uri = close.document.uri;
// 警告を削除する
connection.sendDiagnostics({ uri: uri, diagnostics: []});
});
// ラベル付けされた補完リストの詳細を取得する
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;
}
);
}

// Listen on the connection
Expand Down
Binary file added usage.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.