# 通知設計書 52-WINDOW_LUA_STATUS_DIAGNOSIS_TITLE

## 概要

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

### 本通知の処理概要

本通知は、ユーザーがステータスバーをクリックした際に表示されるワークスペース診断ダイアログのタイトルとして使用される。このタイトルはダイアログの選択肢の一つとして表示され、ユーザーがワークスペース全体の診断を実行するかどうかを選択できるようにする。

**業務上の目的・背景**：大規模なLuaプロジェクトでは、ワークスペース全体の診断を実行することでコードの問題を包括的に検出できる。この通知はダイアログの選択肢として機能し、ユーザーが診断を開始するためのエントリーポイントを提供する。

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

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

**通知内容の概要**：「ワークスペースの診断を行います」というタイトルテキストが、メッセージダイアログの選択肢として表示される。

**期待されるアクション**：ユーザーがこの選択肢をクリックすると、ワークスペース全体の診断処理が開始される。

## 通知種別

アプリ内通知（メッセージダイアログの選択肢）

## 送信仕様

### 基本情報

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

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

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

## 通知テンプレート

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

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

### 本文テンプレート

英語版:
```
Perform workspace diagnosis
```

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

### 添付ファイル

該当なし

## テンプレート変数

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

## 送信トリガー・条件

### トリガー一覧

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

### 送信抑止条件

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

## 処理フロー

### 送信フロー

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

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

### 参照テーブル一覧

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

### 更新テーブル一覧

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

## エラー処理

### エラーケース一覧

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

### リトライ仕様

該当なし

## 配信設定

### レート制限

該当なし

### 配信時間帯

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

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

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

## 備考

- 開発モード（DEVELOP）の場合、追加の選択肢（Restart Server、Clear Node Cache、GC）も表示される
- この通知はWINDOW_LUA_STATUS_DIAGNOSIS_MSG（No.53）と連携して使用される

---

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

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

### 推奨読解順序

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

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

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

**読解のコツ**: `=` の後に続く文字列がメッセージ内容となる。

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

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

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

**主要処理フロー**:
1. **1228行目**: `titleDiagnostic = lang.script.WINDOW_LUA_STATUS_DIAGNOSIS_TITLE` - タイトル取得
2. **1229-1234行目**: `client.awaitRequestMessage` でダイアログ表示
3. **1238-1242行目**: タイトル選択時の診断処理実行

#### Step 3: 診断処理を理解する

診断実行の詳細を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | diagnostic.lua | `script/provider/diagnostic.lua` | `diagnosticsScope` 関数の実装 |

**主要処理フロー**:
- **1239-1242行目**: ワークスペースフォルダごとに `diagnostic.diagnosticsScope` を呼び出し

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

```
provider.lua
    │
    └─ m.register '$/status/click' [1225行目]
           │
           ├─ lang.script.WINDOW_LUA_STATUS_DIAGNOSIS_TITLE [1228行目] ← 本通知
           │
           ├─ client.awaitRequestMessage() [1229行目]
           │      └─ ダイアログ表示（タイトルを選択肢として含む）
           │
           └─ diagnostic.diagnosticsScope() [1241行目]
                  └─ ワークスペース診断実行
```

### データフロー図

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

ステータスバー ───▶ $/status/click ───▶ ダイアログ表示要求
    クリック           イベント               │
                                              ▼
                     lang.script() ───▶ WINDOW_LUA_STATUS_DIAGNOSIS_TITLE
                                              │
                                              ▼
                     awaitRequestMessage ───▶ [クライアント（エディタ）]
                                              │
                                              ▼
                                        メッセージダイアログ表示
                                              │
                                              ▼
                     ユーザー選択 ───▶ diagnosticsScope実行
```

### 関連ファイル一覧

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