# 通知設計書 53-WINDOW_LUA_STATUS_DIAGNOSIS_MSG

## 概要

本ドキュメントは、Lua Language Serverにおけるワークスペース診断メッセージ通知（WINDOW_LUA_STATUS_DIAGNOSIS_MSG）の設計仕様を定義するものである。

### 本通知の処理概要

本通知は、ユーザーがステータスバーをクリックした際に表示されるワークスペース診断ダイアログの本文メッセージとして使用される。ユーザーに対してワークスペース診断を実行するかどうかを確認するメッセージを表示する。

**業務上の目的・背景**：ワークスペース全体の診断は計算コストが高いため、ユーザーの明示的な同意を得てから実行する必要がある。この通知は、診断を実行する前にユーザーに確認を求め、意図しない重い処理の実行を防ぐ役割を果たす。

**通知の送信タイミング**：ユーザーがステータスバーをクリックした際に、`$/status/click` イベントハンドラーが呼び出され、メッセージダイアログが表示される。このメッセージはダイアログの本文として表示される。

**通知の受信者**：エディタ（VSCode等のLSPクライアント）を使用しているユーザー。メッセージダイアログの本文として表示される。

**通知内容の概要**：「ワークスペースの診断を行いますか。」という確認メッセージが表示される。

**期待されるアクション**：ユーザーが提示された選択肢（WINDOW_LUA_STATUS_DIAGNOSIS_TITLE等）から適切なオプションを選択する。

## 通知種別

アプリ内通知（メッセージダイアログ本文）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期（ユーザー操作に応答） |
| 優先度 | 中 |
| リトライ | 無 |

### 送信先決定ロジック

- 送信先はLSPクライアント（エディタ）
- ステータスバークリック時に全ユーザーに表示

## 通知テンプレート

### ダイアログ通知の場合

| 項目 | 内容 |
|-----|------|
| 表示場所 | メッセージダイアログ本文 |
| 形式 | テキスト |

### 本文テンプレート

英語版:
```
Do you want to perform workspace diagnosis?
```

日本語版:
```
ワークスペースの診断を行いますか。
```

### 添付ファイル

該当なし

## テンプレート変数

該当なし（固定メッセージ）

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| ユーザー操作 | ステータスバークリック | 常時 | `$/status/click` イベント発生時 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| なし | 常にダイアログの本文として表示される |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[ステータスバークリック] --> B[$/status/click イベント発生]
    B --> C[awaitRequestMessage呼び出し]
    C --> D[ダイアログ表示]
    D --> E[本通知がメッセージ本文として表示]
    E --> F{ユーザー選択}
    F -->|診断実行| G[diagnosticsScope実行]
    F -->|その他| H[対応する処理実行]
    F -->|キャンセル| I[処理終了]
    G --> J[終了]
    H --> J
    I --> J
```

## データベース参照・更新仕様

### 参照テーブル一覧

該当なし（データベースを使用しない）

### 更新テーブル一覧

該当なし（データベースを使用しない）

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| ダイアログ表示失敗 | クライアントが対応していない場合 | エラーログを出力し処理終了 |

### リトライ仕様

該当なし

## 配信設定

### レート制限

該当なし

### 配信時間帯

制限なし（ユーザー操作に応答）

## セキュリティ考慮事項

- 個人情報を含まない固定メッセージのため、特別な考慮は不要

## 備考

- この通知はWINDOW_LUA_STATUS_DIAGNOSIS_TITLE（No.52）と連携して使用される
- ダイアログはInfoタイプで表示される

---

## コードリーディングガイド

本通知を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、通知メッセージの定義を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | script.lua | `locale/en-us/script.lua` | WINDOW_LUA_STATUS_DIAGNOSIS_MSGの英語メッセージ定義（579-580行目） |
| 1-2 | script.lua | `locale/ja-jp/script.lua` | WINDOW_LUA_STATUS_DIAGNOSIS_MSGの日本語メッセージ定義（579-580行目） |

**読解のコツ**: メッセージは疑問形で、ユーザーに確認を求める形式になっている。

#### Step 2: エントリーポイントを理解する

処理の起点となるプロバイダーモジュールを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | provider.lua | `script/provider/provider.lua` | `$/status/click` ハンドラー（1225-1257行目） |

**主要処理フロー**:
1. **1229行目**: `client.awaitRequestMessage('Info', lang.script.WINDOW_LUA_STATUS_DIAGNOSIS_MSG, ...)` - 本通知をメッセージ本文として使用
2. **1230-1234行目**: 選択肢として診断タイトルや開発者オプションを提供
3. **1235-1256行目**: ユーザーの選択に応じた処理を実行

#### Step 3: クライアント通信を理解する

メッセージダイアログ表示の仕組みを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | client.lua | `script/client.lua` | `awaitRequestMessage` 関数（153-157行目） |

**主要処理フロー**:
- **153-157行目**: awaitで同期的にユーザー応答を待機

### プログラム呼び出し階層図

```
provider.lua
    │
    └─ m.register '$/status/click' [1225行目]
           │
           ├─ lang.script.WINDOW_LUA_STATUS_DIAGNOSIS_MSG [1229行目] ← 本通知
           │
           ├─ client.awaitRequestMessage('Info', ...) [1229行目]
           │      │
           │      └─ window/showMessageRequest LSPリクエスト
           │
           └─ ユーザー応答に基づく処理分岐 [1235-1256行目]
```

### データフロー図

```
[入力]               [処理]                    [出力]

ステータスバー ───▶ $/status/click ───▶ メッセージ取得
    クリック           イベント               │
                                              ▼
                     lang.script() ───▶ WINDOW_LUA_STATUS_DIAGNOSIS_MSG
                                              │
                                              ▼
                     awaitRequestMessage ───▶ window/showMessageRequest
                                              │
                                              ▼
                                        [クライアント（エディタ）]
                                              │
                                              ▼
                                        メッセージダイアログ表示
                                        （本通知が本文として表示）
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| provider.lua | `script/provider/provider.lua` | ソース | ステータスクリックハンドラー実装 |
| script.lua | `locale/en-us/script.lua` | 設定 | 英語メッセージ定義 |
| script.lua | `locale/ja-jp/script.lua` | 設定 | 日本語メッセージ定義 |
| client.lua | `script/client.lua` | ソース | メッセージダイアログ表示 |
| define.lua | `script/proto/define.lua` | ソース | MessageTypeの定義 |
