# 画面遷移図

本プロジェクト（serve-d）はLSP（Language Server Protocol）サーバーであり、従来のGUI画面を持つアプリケーションではありません。
以下の遷移図は、エディタ（LSPクライアント）とserve-dサーバー間のインタラクションフローを示しています。

## 全体フロー

```mermaid
flowchart TD
    subgraph 起動フロー
        A[クライアント起動] --> B[initialize リクエスト]
        B --> C[グローバルスタートアップ]
        C --> D{DCD最新?}
        D -->|古い| E[DCD更新確認ダイアログ]
        E -->|コンパイル/ダウンロード| F[DCD更新処理]
        E -->|無視| G[DCD更新スキップ]
        D -->|最新| H[コンポーネント登録完了]
        F --> H
        G --> H
        H --> I[ワークスペーススタートアップ]
    end

    subgraph ワークスペース初期化
        I --> J{dubレシピ存在?}
        J -->|あり| K[dub初期化]
        J -->|なし| L[fsworkspace初期化]
        K --> M{依存関係不足?}
        M -->|あり| N[依存関係ダウンロード確認ダイアログ]
        N -->|Upgrade| O[依存関係ダウンロード]
        N -->|Always| O
        N -->|Never| P[スキップ]
        O --> Q[DUBツリー初期化通知]
        M -->|なし| Q
        K -->|失敗| L
        L --> R[DCDサーバー起動]
        Q --> R
        R -->|失敗| S[DCD起動失敗通知]
    end

    subgraph サブプロジェクト管理
        I --> T{サブプロジェクト数 > 閾値?}
        T -->|はい| U[サブプロジェクト読み込み確認ダイアログ]
        U -->|Load| V[プロジェクト読み込み]
        U -->|Skip| W[スキップ済み通知]
        T -->|いいえ| V
    end
```

## コード編集フロー

```mermaid
flowchart TD
    subgraph ドキュメント操作
        A[ファイルを開く] --> B[textDocument/didOpen]
        B --> C{リント設定?}
        C -->|always| D[DScanner リント実行]
        C -->|project| E{プロジェクトファイル?}
        E -->|はい| D
        E -->|いいえ| F[リントスキップ]

        G[ファイル編集] --> H[textDocument/didChange]
        H --> D
        H --> I[dfmt リント実行]

        J[ファイル保存] --> K[textDocument/didSave]
        K --> L{D/dietファイル?}
        L -->|はい| M[DScanner リント]
        L -->|はい| N[DUB ビルドリント]
        K --> O{dub.json/dub.sdl?}
        O -->|はい| P[DUB依存関係更新]
        P --> Q[DUBツリー更新通知]
        P --> R[インポートパス更新]
    end
```

## コード補完フロー

```mermaid
flowchart TD
    subgraph コード補完
        A[補完トリガー] --> B[textDocument/completion]
        B --> C{ファイルタイプ}
        C -->|D言語| D[DCD補完]
        C -->|diet| E[dietテンプレート補完]
        C -->|DML| F[DlangUI補完]
        C -->|dscanner.ini| G[DScanner設定補完]

        D --> H[識別子補完]
        D --> I[ドキュメント補完]
        D --> J[スニペット補完]
        D --> K[自動インポート補完]

        H --> L[補完リスト表示]
        I --> L
        J --> L
        K --> L

        L --> M[補完アイテム選択]
        M --> N[completionItem/resolve]
        N --> O{追加インポート必要?}
        O -->|はい| P[インポート文追加]
        O -->|いいえ| Q[テキスト挿入]
        P --> Q
    end
```

## コードアクション・リファクタリングフロー

```mermaid
flowchart TD
    subgraph コードアクション
        A[コード選択/カーソル位置] --> B[textDocument/codeAction]
        B --> C[コードアクション一覧表示]
        C --> D{アクション選択}
        D -->|インポート追加| E[served/addImport]
        D -->|インターフェース実装| F[served/implementMethods]
        D -->|インポートソート| G[served/sortImports]
        D -->|その他修正| H[テキスト編集適用]
    end

    subgraph シンボル操作
        I[シンボル上にカーソル] --> J{操作}
        J -->|定義へ移動| K[textDocument/definition]
        J -->|参照検索| L[textDocument/references]
        J -->|リネーム| M[textDocument/rename]
        J -->|ホバー| N[textDocument/hover]
        J -->|ハイライト| O[textDocument/documentHighlight]
        J -->|シグネチャヘルプ| P[textDocument/signatureHelp]
    end
```

## DUB管理フロー

```mermaid
flowchart TD
    subgraph DUB設定管理
        A[コマンドパレット] --> B{操作選択}
        B --> C[served/listConfigurations]
        B --> D[served/listArchTypes]
        B --> E[served/listBuildTypes]

        C --> F[served/switchConfig]
        D --> G[served/switchArchType]
        E --> H[served/switchBuildType]

        B --> I[served/switchCompiler]

        F --> J[設定反映]
        G --> J
        H --> J
        I --> J
    end

    subgraph DUB依存関係管理
        K[依存関係ツリー表示] --> L[served/listDependencies]
        L --> M{操作}
        M -->|追加| N[served/installDependency]
        M -->|更新| O[served/updateDependency]
        M -->|削除| P[served/uninstallDependency]
        N --> Q[dub upgrade実行]
        O --> Q
        P --> Q
        Q --> R[インポートパス更新]
        R --> S[DUBツリー更新通知]
    end

    subgraph ビルド・テスト
        T[served/buildTasks] --> U[ビルドタスク一覧]
        U --> V{タスク選択}
        V --> W[Run]
        V --> X[Build]
        V --> Y[Rebuild]
        V --> Z[Test]
    end
```

## DCD管理フロー

```mermaid
flowchart TD
    subgraph DCD管理
        A{DCD状態} -->|古い| B[DCD更新確認ダイアログ]
        B -->|更新| C[served/updateDCD]
        C --> D{ソースからコンパイル?}
        D -->|はい| E[gitクローン & dubビルド]
        D -->|いいえ| F[バイナリダウンロード]
        E --> G[インストール完了通知]
        F --> G
        G --> H[DCDパス設定更新]
        H --> I[DCDサーバー起動]

        J[served/restartServer] --> K[全DCDサーバー再起動]
        L[served/killServer] --> M[全DCDサーバー停止]
    end
```

## DUBフォーマット変換フロー

```mermaid
flowchart TD
    A[served/convertDubFormat] --> B{ファイル検証}
    B -->|不正なファイル| C[エラーメッセージ表示]
    B -->|有効| D[dub convert実行]
    D -->|成功| E[workspace/applyEdit]
    D -->|失敗| F[変換失敗メッセージ表示]
```
