# API設計書

## 概要

本ドキュメントは、**serve-d**（D言語向けLanguage Server Protocol実装）が提供するJSON-RPC APIの設計を定義する。serve-dはMicrosoft Language Server Protocol (LSP) に準拠しつつ、D言語開発に特化したカスタムリクエスト・通知を追加で提供する。

通信はJSON-RPC 2.0を介して標準入出力（stdin/stdout）で行われ、HTTPは使用しない。

## 共通仕様

### ベースURL

```
なし（JSON-RPC over stdin/stdout）
```

serve-dはLSPサーバーであり、エディタクライアントとJSON-RPCプロトコルで通信する。HTTPエンドポイントは存在しない。

### 認証方式

認証なし（ローカルプロセス間通信のため不要）

### 共通ヘッダー

LSP仕様に準拠したJSON-RPCヘッダーを使用:

| ヘッダー名 | 必須 | 説明 |
| --- | --- | --- |
| Content-Length | ○ | メッセージボディのバイト数 |
| Content-Type | - | application/vscode-jsonrpc; charset=utf-8（デフォルト） |

### 共通エラーレスポンス

JSON-RPCエラーコード:

| エラーコード | 説明 |
| --- | --- |
| -32700 | Parse Error - JSONパースエラー |
| -32600 | Invalid Request - 不正なリクエスト |
| -32601 | Method Not Found - メソッド未検出 |
| -32602 | Invalid Params - パラメータ不正 |
| -32603 | Internal Error - 内部エラー |
| -32002 | Server Not Initialized - サーバー未初期化 |
| -32001 | Unknown Error Code - 不明なエラー |

## API一覧

### LSP標準メソッド

| カテゴリ | メソッド | 種別 | 説明 |
| --- | --- | --- | --- |
| ライフサイクル | shutdown | Request | サーバーのシャットダウン |
| トレース | $/setTrace | Notification | ログレベルの変更 |
| ワークスペース | workspace/didChangeWorkspaceFolders | Notification | ワークスペースフォルダの変更通知 |
| ワークスペース | workspace/didChangeWatchedFiles | Notification | ファイル監視の変更通知 |
| ワークスペース | workspace/symbol | Request | ワークスペース内シンボル検索 |
| ドキュメント同期 | textDocument/didOpen | Notification | ドキュメントの開封通知 |
| ドキュメント同期 | textDocument/didClose | Notification | ドキュメントの閉じ通知 |
| ドキュメント同期 | textDocument/didChange | Notification | ドキュメントの変更通知 |
| ドキュメント同期 | textDocument/didSave | Notification | ドキュメントの保存通知 |
| 補完 | textDocument/completion | Request | 自動補完の提供 |
| 補完 | completionItem/resolve | Request | 補完アイテムの詳細解決 |
| 定義 | textDocument/definition | Request | 定義へのジャンプ |
| ホバー | textDocument/hover | Request | ホバー情報の表示 |
| 署名ヘルプ | textDocument/signatureHelp | Request | 関数署名ヘルプの表示 |
| 参照 | textDocument/references | Request | シンボル参照の検索 |
| リネーム | textDocument/rename | Request | シンボルのリネーム |
| リネーム | textDocument/prepareRename | Request | リネーム準備（位置確認） |
| ハイライト | textDocument/documentHighlight | Request | ドキュメント内のハイライト |
| シンボル | textDocument/documentSymbol | Request | ドキュメントシンボル一覧 |
| フォーマット | textDocument/formatting | Request | ドキュメント全体のフォーマット |
| フォーマット | textDocument/rangeFormatting | Request | 範囲指定フォーマット |
| コードアクション | textDocument/codeAction | Request | コードアクションの提供 |
| コードアクション | codeAction/resolve | Request | コードアクションの解決 |
| コードレンズ | textDocument/codeLens | Request | コードレンズの提供 |
| コードレンズ | codeLens/resolve | Request | コードレンズの解決 |
| カラー | textDocument/documentColor | Request | ドキュメントカラーの検出 |
| カラー | textDocument/colorPresentation | Request | カラープレゼンテーション |
| 折りたたみ | textDocument/foldingRange | Request | 折りたたみ範囲の提供 |
| インレイヒント | textDocument/inlayHint | Request | インレイヒントの提供 |

### serve-dカスタムメソッド（served/*）

| カテゴリ | メソッド | 種別 | 説明 |
| --- | --- | --- | --- |
| DCD管理 | served/restartServer | Request | DCDサーバーの再起動 |
| DCD管理 | served/killServer | Notification | DCDサーバーの停止 |
| DCD管理 | served/updateDCD | Notification | DCDの更新トリガー |
| Dub設定 | served/listConfigurations | Request | Dub設定一覧の取得 |
| Dub設定 | served/switchConfig | Request | Dub設定の切り替え |
| Dub設定 | served/getConfig | Request | 現在のDub設定の取得 |
| Dub設定 | served/listArchTypes | Request | アーキテクチャ一覧の取得 |
| Dub設定 | served/switchArchType | Request | アーキテクチャの切り替え |
| Dub設定 | served/getArchType | Request | 現在のアーキテクチャの取得 |
| Dub設定 | served/listBuildTypes | Request | ビルドタイプ一覧の取得 |
| Dub設定 | served/switchBuildType | Request | ビルドタイプの切り替え |
| Dub設定 | served/getBuildType | Request | 現在のビルドタイプの取得 |
| Dub設定 | served/getCompiler | Request | 現在のコンパイラの取得 |
| Dub設定 | served/switchCompiler | Request | コンパイラの切り替え |
| Dub設定 | served/getActiveDubConfig | Request | アクティブなDubプロジェクト情報の取得 |
| Dub依存関係 | served/listDependencies | Request | 依存関係一覧の取得 |
| Dub依存関係 | served/installDependency | Notification | 依存関係のインストール |
| Dub依存関係 | served/updateDependency | Notification | 依存関係の更新 |
| Dub依存関係 | served/uninstallDependency | Notification | 依存関係のアンインストール |
| Dubタスク | served/buildTasks | Request | ビルドタスク一覧の取得 |
| Dubフォーマット | served/convertDubFormat | Notification | Dubレシピフォーマットの変換 |
| インポート | served/addImport | Request | インポート文の追加 |
| インポート | served/updateImports | Request | DCD内のインポート情報の更新 |
| インポート | served/sortImports | Request | インポート文のソート |
| コード生成 | served/implementMethods | Request | インターフェース/抽象クラスのメソッド実装 |
| スニペット | served/addDependencySnippet | Request | 依存関係スニペットの登録 |
| ファイル検索 | served/searchFile | Request | ファイル名による検索 |
| ファイル検索 | served/findFilesByModule | Request | モジュール名によるファイル検索 |
| 解析設定 | served/getDscannerConfig | Request | D-Scanner設定の取得 |
| 解析 | served/doDscanner | Notification | D-Scannerリンティングの手動実行 |
| テスト | served/rescanTests | Notification | テストの再スキャン |
| インデックス | served/reindexAll | Notification | 全ファイルの再インデックス |
| プロファイル | served/getProfileGCEntries | Request | GCプロファイルエントリの取得 |
| サーバー情報 | served/getInfo | Request | サーバー情報の取得 |
| プロジェクト | served/forceLoadProjects | Request | プロジェクトの強制ロード |

## 各APIエンドポイント定義

### ライフサイクル

#### 1. shutdown

LSP標準のシャットダウンリクエスト。バックエンドを停止し、1秒後にRPCが終了しない場合はエラーをスローする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `shutdown` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
null
```

---

### トレース

#### 2. $/setTrace

ログトレースレベルの設定。`verbose`を設定するとログレベルが`trace`に変更される。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `$/setTrace` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "value": "off | messages | verbose"
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| value | TraceValue | ○ | トレースレベル（off / messages / verbose） |

---

### ワークスペース管理

#### 3. workspace/didChangeWorkspaceFolders

ワークスペースフォルダの追加・削除を通知する。削除されたフォルダはバックエンドから解除され、追加されたフォルダは設定同期後にスタートアップ処理が実行される。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `workspace/didChangeWorkspaceFolders` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "event": {
    "added": [{ "uri": "file:///path/to/folder", "name": "folder" }],
    "removed": [{ "uri": "file:///path/to/folder", "name": "folder" }]
  }
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| event.added | WorkspaceFolder[] | ○ | 追加されたワークスペースフォルダ |
| event.removed | WorkspaceFolder[] | ○ | 削除されたワークスペースフォルダ |

---

#### 4. workspace/didChangeWatchedFiles

ファイルシステムの変更監視通知。ファイルリネーム検出やprofilegc.log監視に使用される。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `workspace/didChangeWatchedFiles` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "changes": [
    { "uri": "file:///path/to/file", "type": 1 }
  ]
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| changes | FileEvent[] | ○ | ファイル変更イベントの配列 |

---

#### 5. workspace/symbol

ワークスペース内のシンボルをファジーマッチで検索し返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `workspace/symbol` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "query": "symbolName"
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| query | string | ○ | 検索クエリ文字列 |

**レスポンス（成功時）**

```json
[
  {
    "name": "symbolName",
    "kind": 12,
    "location": {
      "uri": "file:///path/to/file.d",
      "range": { "start": { "line": 0, "character": 0 }, "end": { "line": 0, "character": 10 } }
    }
  }
]
```

---

### ドキュメント同期

#### 6. textDocument/didOpen

ドキュメントの開封通知。設定に応じて開封時にリンティングを実行する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/didOpen` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": {
    "uri": "file:///path/to/file.d",
    "languageId": "d",
    "version": 1,
    "text": "module app;\n..."
  }
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| textDocument | TextDocumentItem | ○ | 開かれたドキュメント情報 |

---

#### 7. textDocument/didClose

ドキュメントの閉じ通知。外部プロジェクトのファイルの場合はリント警告をクリアする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/didClose` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": {
    "uri": "file:///path/to/file.d"
  }
}
```

---

#### 8. textDocument/didChange

ドキュメントの変更通知。D言語ファイルの場合はD-Scannerリンティングとdfmtリンティングをトリガーする。50KiB超のファイルでは遅延が増加する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/didChange` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": {
    "uri": "file:///path/to/file.d",
    "version": 2
  },
  "contentChanges": [
    { "text": "updated content" }
  ]
}
```

---

#### 9. textDocument/didSave

ドキュメントの保存通知。D/Dietファイルの場合、リンティング設定に応じてD-ScannerとDubリンティングを実行する。Dubレシピファイル（dub.json/dub.sdl）の保存時はDub依存関係のリロードもトリガーする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/didSave` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": {
    "uri": "file:///path/to/file.d"
  }
}
```

---

### 自動補完

#### 10. textDocument/completion

テキスト位置に基づく自動補完候補の提供。DCDコンポーネントを使用してD言語の補完を行う。トリガー文字は `.`, `=`, `/`, `*`, `+`, `-`。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/completion` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 5 }
}
```

**レスポンス（成功時）**

```json
{
  "isIncomplete": false,
  "items": [
    {
      "label": "writeln",
      "kind": 3,
      "detail": "void writeln(T...)(T args)",
      "insertText": "writeln"
    }
  ]
}
```

---

#### 11. completionItem/resolve

補完アイテムの詳細情報を解決する。スニペット機能（`--provide context-snippets`）が有効な場合にスニペットの詳細展開を行う。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `completionItem/resolve` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "label": "writeln",
  "kind": 3,
  "data": {}
}
```

**レスポンス（成功時）**

```json
{
  "label": "writeln",
  "kind": 3,
  "detail": "void writeln(T...)(T args)",
  "documentation": { "kind": "markdown", "value": "..." }
}
```

---

### 定義・ホバー

#### 12. textDocument/definition

カーソル位置のシンボルの定義箇所へジャンプする。DCDコンポーネントを使用。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/definition` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 5 }
}
```

**レスポンス（成功時）**

```json
[
  {
    "uri": "file:///path/to/definition.d",
    "range": {
      "start": { "line": 20, "character": 0 },
      "end": { "line": 20, "character": 10 }
    }
  }
]
```

---

#### 13. textDocument/hover

カーソル位置のシンボルに関するホバー情報（型情報、ドキュメント等）を返す。DCDコンポーネントを使用。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/hover` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 5 }
}
```

**レスポンス（成功時）**

```json
{
  "contents": {
    "kind": "markdown",
    "value": "```d\nvoid writeln(T...)(T args)\n```\nWrites formatted output."
  }
}
```

---

### 署名ヘルプ

#### 14. textDocument/signatureHelp

関数呼び出し時の署名ヘルプ情報を提供する。トリガー文字は `(`, `[`, `,`。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/signatureHelp` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 15 }
}
```

**レスポンス（成功時）**

```json
{
  "signatures": [
    {
      "label": "void writeln(T...)(T args)",
      "parameters": [
        { "label": "T args" }
      ]
    }
  ],
  "activeSignature": 0,
  "activeParameter": 0
}
```

---

### 参照・リネーム

#### 15. textDocument/references

カーソル位置のシンボルのすべての参照を非同期で検索する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/references` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 5 },
  "context": { "includeDeclaration": true }
}
```

**レスポンス（成功時）**

```json
[
  {
    "uri": "file:///path/to/file.d",
    "range": { "start": { "line": 10, "character": 5 }, "end": { "line": 10, "character": 15 } }
  }
]
```

---

#### 16. textDocument/rename

カーソル位置のシンボルをリネームする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/rename` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 5 },
  "newName": "newSymbolName"
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| textDocument | TextDocumentIdentifier | ○ | 対象ドキュメント |
| position | Position | ○ | カーソル位置 |
| newName | string | ○ | 新しいシンボル名 |

**レスポンス（成功時）**

```json
{
  "changes": {
    "file:///path/to/file.d": [
      {
        "range": { "start": { "line": 10, "character": 5 }, "end": { "line": 10, "character": 15 } },
        "newText": "newSymbolName"
      }
    ]
  }
}
```

---

#### 17. textDocument/prepareRename

リネーム操作の事前確認。リネーム可能な範囲を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/prepareRename` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 5 }
}
```

**レスポンス（成功時）**

```json
{
  "start": { "line": 10, "character": 5 },
  "end": { "line": 10, "character": 15 }
}
```

---

### ドキュメントハイライト・シンボル

#### 18. textDocument/documentHighlight

カーソル位置のシンボルと同じシンボルのドキュメント内の出現箇所をハイライトする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/documentHighlight` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "position": { "line": 10, "character": 5 }
}
```

**レスポンス（成功時）**

```json
[
  {
    "range": { "start": { "line": 10, "character": 5 }, "end": { "line": 10, "character": 15 } },
    "kind": 1
  }
]
```

---

#### 19. textDocument/documentSymbol

ドキュメント内のシンボル一覧を階層構造またはフラット構造で返す。クライアントの機能に応じて形式を選択する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/documentSymbol` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" }
}
```

**レスポンス（成功時）**

```json
[
  {
    "name": "main",
    "kind": 12,
    "range": { "start": { "line": 0, "character": 0 }, "end": { "line": 10, "character": 1 } },
    "selectionRange": { "start": { "line": 0, "character": 4 }, "end": { "line": 0, "character": 8 } }
  }
]
```

---

### フォーマット

#### 20. textDocument/formatting

ドキュメント全体をdfmtを使用してフォーマットする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/formatting` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "options": { "tabSize": 4, "insertSpaces": false }
}
```

**レスポンス（成功時）**

```json
[
  {
    "range": { "start": { "line": 0, "character": 0 }, "end": { "line": 100, "character": 0 } },
    "newText": "formatted content..."
  }
]
```

---

#### 21. textDocument/rangeFormatting

ドキュメントの指定範囲をdfmtでフォーマットする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/rangeFormatting` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "range": {
    "start": { "line": 5, "character": 0 },
    "end": { "line": 15, "character": 0 }
  },
  "options": { "tabSize": 4, "insertSpaces": false }
}
```

---

### コードアクション

#### 22. textDocument/codeAction

指定範囲のコードアクション（クイックフィックス、リファクタリング等）を提供する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/codeAction` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "range": {
    "start": { "line": 5, "character": 0 },
    "end": { "line": 5, "character": 10 }
  },
  "context": {
    "diagnostics": []
  }
}
```

**レスポンス（成功時）**

```json
[
  {
    "title": "Sort imports",
    "kind": "source.organizeImports",
    "edit": { "changes": {} }
  }
]
```

---

#### 23. codeAction/resolve

コードアクションの遅延解決。編集内容を解決して返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `codeAction/resolve` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "title": "Sort imports",
  "kind": "source.organizeImports",
  "data": {}
}
```

---

### コードレンズ

#### 24. textDocument/codeLens

ドキュメントのコードレンズ（インラインアクション）を提供する。単体テストのCodeLensやGCプロファイル情報などを含む。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/codeLens` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" }
}
```

**レスポンス（成功時）**

```json
[
  {
    "range": { "start": { "line": 10, "character": 0 }, "end": { "line": 10, "character": 0 } },
    "command": { "title": "Run Test", "command": "code-d.runTest" },
    "data": {}
  }
]
```

---

#### 25. codeLens/resolve

コードレンズの詳細を解決する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `codeLens/resolve` |
| 種別 | Request |
| 認証 | 不要 |

---

### カラー

#### 26. textDocument/documentColor

ドキュメント内のカラーリテラル（D言語のカラー型）を検出して返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/documentColor` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" }
}
```

---

#### 27. textDocument/colorPresentation

カラー値のテキスト表現を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/colorPresentation` |
| 種別 | Request |
| 認証 | 不要 |

---

### 折りたたみ・インレイヒント

#### 28. textDocument/foldingRange

ドキュメントの折りたたみ可能な範囲を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/foldingRange` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" }
}
```

---

#### 29. textDocument/inlayHint

インレイヒント（パラメータ名、型情報等のインライン表示）を提供する。DCDコンポーネントを使用。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `textDocument/inlayHint` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "range": {
    "start": { "line": 0, "character": 0 },
    "end": { "line": 50, "character": 0 }
  }
}
```

---

### DCD管理（served/*）

#### 30. served/restartServer

すべてのDCDサーバーを再起動する。完了後`true`を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/restartServer` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
true
```

---

#### 31. served/killServer

すべてのDCDサーバーを停止する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/killServer` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

なし

---

#### 32. served/updateDCD

DCDの更新を手動でトリガーする。ソースからのコンパイルまたはプリビルドバイナリのダウンロードを行う。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/updateDCD` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

なし

---

### Dub設定管理（served/*）

#### 33. served/listConfigurations

アクティブなDubインスタンスの設定一覧を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/listConfigurations` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
["executable", "unittest", "unittest-optimized"]
```

---

#### 34. served/switchConfig

Dubの設定を切り替える。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/switchConfig` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
"executable"
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| (root) | string | ○ | 切り替え先の設定名 |

**レスポンス（成功時）**

```json
true
```

---

#### 35. served/getConfig

現在のDub設定を取得する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getConfig` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
"executable"
```

---

#### 36. served/listArchTypes

利用可能なアーキテクチャタイプの一覧を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/listArchTypes` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "withMeaning": true
}
```

| フィールド名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| withMeaning | boolean | - | false | trueの場合、ラベル付きのArchTypeInfo[]を返す |

**レスポンス（成功時）**

`withMeaning: false`の場合:
```json
["x86_64", "x86"]
```

`withMeaning: true`の場合:
```json
[
  { "value": "x86_64", "label": "x86-64" },
  { "value": "x86", "label": "x86 (32-bit)" }
]
```

---

#### 37. served/switchArchType

アーキテクチャタイプを切り替える。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/switchArchType` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
"x86_64"
```

**レスポンス（成功時）**

```json
true
```

---

#### 38. served/getArchType

現在のアーキテクチャタイプを取得する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getArchType` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
"x86_64"
```

---

#### 39. served/listBuildTypes

利用可能なビルドタイプの一覧を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/listBuildTypes` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
["debug", "release", "unittest"]
```

---

#### 40. served/switchBuildType

ビルドタイプを切り替える。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/switchBuildType` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
"release"
```

**レスポンス（成功時）**

```json
true
```

---

#### 41. served/getBuildType

現在のビルドタイプを取得する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getBuildType` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
"debug"
```

---

#### 42. served/getCompiler

現在使用中のコンパイラ名を取得する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getCompiler` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
"dmd"
```

---

#### 43. served/switchCompiler

コンパイラを切り替える。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/switchCompiler` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
"ldc2"
```

**レスポンス（成功時）**

```json
true
```

---

#### 44. served/getActiveDubConfig

アクティブなDubプロジェクトの詳細設定情報を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getActiveDubConfig` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
{
  "packagePath": "/path/to/project",
  "packageName": "serve-d",
  "targetPath": "/path/to/target",
  "targetName": "serve-d",
  "workingDirectory": "/path/to/project",
  "mainSourceFile": "source/app.d",
  "dflags": ["-lowmem"],
  "lflags": [],
  "libs": [],
  "linkerFiles": [],
  "sourceFiles": ["source/app.d"],
  "copyFiles": [],
  "versions": [],
  "debugVersions": [],
  "importPaths": ["source/"],
  "stringImportPaths": ["views"],
  "importFiles": [],
  "stringImportFiles": [],
  "preGenerateCommands": [],
  "postGenerateCommands": [],
  "preBuildCommands": [],
  "postBuildCommands": [],
  "preRunCommands": [],
  "postRunCommands": []
}
```

---

### Dub依存関係管理（served/*）

#### 45. served/listDependencies

指定パッケージの依存関係一覧を返す。パッケージ名が空の場合はルート依存関係を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/listDependencies` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "packageName": ""
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| packageName | string | - | パッケージ名（空の場合はルート依存関係） |

**レスポンス（成功時）**

```json
[
  {
    "name": "libddoc",
    "version": "0.8.0",
    "path": "/path/to/libddoc",
    "description": "D documentation parser",
    "homepage": "",
    "authors": [],
    "copyright": "",
    "license": "MIT",
    "subPackages": [],
    "hasDependencies": true,
    "root": true
  }
]
```

---

#### 46. served/installDependency

Dubレシピファイルに依存関係を追加し、dub upgradeを実行してインポートを更新する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/installDependency` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "name": "vibe-d",
  "version": "~>0.9.0"
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| name | string | ○ | 依存関係のパッケージ名 |
| version | string | ○ | バージョン指定 |

---

#### 47. served/updateDependency

Dubレシピファイルの依存関係バージョンを更新する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/updateDependency` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "name": "vibe-d",
  "version": "~>0.10.0"
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| name | string | ○ | 依存関係のパッケージ名 |
| version | string | ○ | 新しいバージョン指定 |

---

#### 48. served/uninstallDependency

Dubレシピファイルから依存関係を削除する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/uninstallDependency` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "name": "vibe-d"
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| name | string | ○ | 削除する依存関係のパッケージ名 |

---

### Dubビルドタスク・フォーマット変換（served/*）

#### 49. served/buildTasks

全Dubインスタンスのビルドタスク一覧（Build, Run, Rebuild, Test等）を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/buildTasks` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
[
  {
    "definition": {},
    "scope": "workspace",
    "exec": ["dub", "build"],
    "name": "Build serve-d",
    "isBackground": false,
    "source": "dub",
    "group": "build",
    "problemMatchers": ["$dmd"]
  }
]
```

---

#### 50. served/convertDubFormat

Dubレシピファイルを指定フォーマット（json/sdl）に変換する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/convertDubFormat` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/dub.json" },
  "newFormat": "sdl"
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| textDocument | TextDocumentIdentifier | ○ | 変換対象のDubレシピファイル |
| newFormat | string | ○ | 変換先フォーマット（json / sdl） |

---

### インポート管理（served/*）

#### 51. served/addImport

指定位置にインポート文を追加するための編集情報を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/addImport` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "name": "std.stdio",
  "location": 150,
  "insertOutermost": true
}
```

| フィールド名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| textDocument | TextDocumentIdentifier | ○ | - | 対象ドキュメント |
| name | string | ○ | - | 追加するインポート名 |
| location | int | ○ | - | カーソル位置（バイトオフセット） |
| insertOutermost | boolean | - | true | falseの場合、最も内側のブロックに追加 |

**レスポンス（成功時）**

```json
{
  "rename": "",
  "replacements": [
    {
      "range": [0, 0],
      "content": "import std.stdio;\n"
    }
  ]
}
```

---

#### 52. served/updateImports

DCDのインポート情報をリフレッシュする。成功時は`coded/updateDubTree`通知を送信する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/updateImports` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "reportProgress": true
}
```

| フィールド名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| reportProgress | boolean | - | true | UI進捗更新を送信するか |

**レスポンス（成功時）**

```json
true
```

---

#### 53. served/sortImports

指定位置のインポートブロックをソートする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/sortImports` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "location": 150
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| textDocument | TextDocumentIdentifier | ○ | 対象ドキュメント |
| location | int | ○ | カーソル位置（バイトオフセット）。-1でドキュメント全体 |

**レスポンス（成功時）**

```json
[
  {
    "range": { "start": { "line": 1, "character": 0 }, "end": { "line": 5, "character": 0 } },
    "newText": "import std.algorithm;\nimport std.array;\nimport std.stdio;\n"
  }
]
```

---

### コード生成（served/*）

#### 54. served/implementMethods

インターフェースまたは抽象クラスのメソッドを自動実装する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/implementMethods` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" },
  "location": 250
}
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| textDocument | TextDocumentIdentifier | ○ | 対象ドキュメント |
| location | int | ○ | カーソル位置（バイトオフセット） |
| snippets | boolean | - | スニペット形式で返すかのオーバーライド |

**レスポンス（成功時）**

```json
[
  {
    "range": { "start": { "line": 15, "character": 0 }, "end": { "line": 15, "character": 0 } },
    "newText": "\tvoid doSomething() {\n\t\t// TODO: implement\n\t}\n"
  }
]
```

---

### スニペット管理（served/*）

#### 55. served/addDependencySnippet

カスタムスニペットをserve-d全体に登録する。`--provide context-snippets`が必要。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/addDependencySnippet` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "snippet": {
    "label": "custom_snippet",
    "description": "Custom snippet description",
    "shortcut": "cs",
    "text": "customCode(${1:arg})"
  },
  "requiredDependencies": ["vibe-d"]
}
```

**レスポンス（成功時）**

```json
true
```

---

### ファイル検索（served/*）

#### 56. served/searchFile

ファイル名（サブフォルダ含む）でプロジェクトおよび依存関係内を検索する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/searchFile` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
"app.d"
```

**レスポンス（成功時）**

```json
["file:///path/to/source/app.d"]
```

---

#### 57. served/findFilesByModule

モジュール名でプロジェクトおよび依存関係内のファイルを検索する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/findFilesByModule` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
"std.stdio"
```

**レスポンス（成功時）**

```json
["/usr/include/dlang/dmd/std/stdio.d"]
```

---

### D-Scanner設定・解析（served/*）

#### 58. served/getDscannerConfig

指定URIのD-Scanner設定を取得する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getDscannerConfig` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" }
}
```

**レスポンス（成功時）**

```json
[
  {
    "description": "Analysis settings",
    "name": "analysis",
    "features": [
      {
        "description": "Check for duplicate attributes",
        "name": "duplicate_attribute",
        "enabled": "enabled"
      }
    ]
  }
]
```

---

#### 59. served/doDscanner

指定ファイルに対してD-Scannerリンティングを手動実行する。`coded/doDscanner`は非推奨エイリアス。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/doDscanner` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "textDocument": { "uri": "file:///path/to/file.d" }
}
```

---

### テスト管理（served/*）

#### 60. served/rescanTests

テストの再スキャンをトリガーする。`--provide test-runner`が必要。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/rescanTests` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "uri": "file:///path/to/workspace"
}
```

---

### インデックス管理（served/*）

#### 61. served/reindexAll

すべてのワークスペースファイルの再インデックスを実行する。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/reindexAll` |
| 種別 | Notification |
| 認証 | 不要 |

**リクエストパラメータ**

なし

---

### プロファイル（served/*）

#### 62. served/getProfileGCEntries

profilegc.logのエントリをパースして結合した結果を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getProfileGCEntries` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

なし

**レスポンス（成功時）**

```json
[
  {
    "bytesAllocated": 1024,
    "allocationCount": 5,
    "type": "void[] std.array.array",
    "uri": "file:///path/to/file.d",
    "displayFile": "source/app.d",
    "line": 42
  }
]
```

---

### サーバー情報（served/*）

#### 63. served/getInfo

serve-dサーバーの詳細情報（設定、インデックス、タスク一覧等）を返す。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/getInfo` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
{
  "includeConfig": true,
  "includeIndex": false,
  "includeTasks": true
}
```

| フィールド名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| includeConfig | boolean | - | false | 現在の設定を含めるか |
| includeIndex | boolean | - | false | モジュールインデックスを含めるか |
| includeTasks | boolean | - | false | 実行中タスク一覧を含めるか |

**レスポンス（成功時）**

```json
{
  "serverInfo": {
    "name": "serve-d",
    "version": "v0.8.0"
  },
  "currentConfiguration": { "d": {}, "dfmt": {} },
  "globalWorkspace": {
    "uri": "file:///path/to/workspace",
    "name": "my-project",
    "initialized": true,
    "selected": true,
    "pendingErrors": {}
  },
  "workspaces": [],
  "selectedWorkspaceIndex": 0,
  "runningTasks": [
    {
      "name": "textDocument/completion",
      "queued": 0.5,
      "started": 0.3,
      "ended": 0,
      "running": true,
      "numSteps": 2,
      "timeSpent": 0.1
    }
  ]
}
```

---

### プロジェクト管理（served/*）

#### 64. served/forceLoadProjects

manyProjects制限を無視してプロジェクトを強制ロードする。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| メソッド | `served/forceLoadProjects` |
| 種別 | Request |
| 認証 | 不要 |

**リクエストパラメータ**

```json
["/path/to/project1", "/path/to/project2"]
```

| フィールド名 | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| (root) | string[] | ○ | 強制ロードするプロジェクトのファイルパス配列 |

**レスポンス（成功時）**

```json
[true, false]
```

---

## クライアント向け通知（coded/*）

以下はserve-dからクライアント（エディタ）に向けて送信される通知・リクエストである。

| メソッド | 種別 | 説明 |
| --- | --- | --- |
| coded/updateSetting | Notification | クライアント設定の更新要求 |
| coded/logInstall | Notification | インストールログメッセージ |
| coded/initDubTree | Notification | Dub依存ツリー初期化完了通知 |
| coded/updateDubTree | Notification | Dub依存ツリー更新通知 |
| coded/changedSelectedWorkspace | Notification | アクティブワークスペース変更通知 |
| coded/skippedLoads | Notification | スキップされたプロジェクトロードの通知 |
| coded/interactiveDownload | Request | ファイルダウンロード要求（`--provide http`時） |

## 備考

- serve-dはD言語のLSPサーバーであり、通信は全てJSON-RPC 2.0 over stdin/stdoutで行われる
- `served/`プレフィックスのメソッドはクライアントからserve-dへのカスタムリクエスト/通知
- `coded/`プレフィックスのメソッドはserve-dからクライアントへの通知/リクエスト
- 一部機能は`--provide`コマンドラインオプションにより有効化が必要（http, implement-snippets, context-snippets, default-snippets, test-runner, tasks-current, async-ask-load）
- アクティブインスタンスは最後に関連コマンドが実行されたワークスペースインスタンスを指す
- D-Scanner、DCD、dfmt等の外部ツールコンポーネントとの連携が各機能の基盤となっている
