# 通知設計書 3-MWS_NOT_COMPLETE

## 概要

本ドキュメントは、Lua Language Server におけるワークスペース準備未完了通知（MWS_NOT_COMPLETE）の設計仕様を定義する。

### 本通知の処理概要

この通知は、ユーザーがワークスペースに対して操作（コード補完、定義ジャンプ等）を実行しようとした際に、ワークスペースの読み込み・解析がまだ完了していない場合に表示されるメッセージである。

**業務上の目的・背景**：Lua Language Server は起動時またはワークスペース変更時に、ファイルのスキャン・プリロード・解析を行う。この処理には時間がかかる場合があり、完了前に言語サーバー機能を使用しようとすると、正確な結果が得られない可能性がある。この通知により、ユーザーに現在の状態を伝え、少し待ってから再試行するよう促す。

**通知の送信タイミング**：ユーザーが言語サーバー機能（補完、定義ジャンプ、参照検索等）をリクエストした際に、ワークスペースの準備が完了していない場合に送信される。

**通知の受信者**：エディタを使用している開発者（ユーザー）。クライアント側でメッセージとして表示される。

**通知内容の概要**：「ワークスペースの準備がまだ完了していません。暫くしてからもう一度お試しください。」というメッセージが表示される。

**期待されるアクション**：ユーザーは少し待ってから再度操作を実行する。プログレスバーでワークスペースの読み込み状況を確認することも可能。

## 通知種別

アプリ内通知（LSP window/showMessage または hover レスポンス）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期 |
| 優先度 | 低 |
| リトライ | 無 |

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

リクエスト元の LSP クライアントに対して直接送信される。

## 通知テンプレート

### メッセージ通知の場合

| 項目 | 内容 |
|-----|------|
| メッセージタイプ | Info |
| ボタン | なし |

### 本文テンプレート

```
Workspace is not complete yet. You may try again later...
```

日本語:
```
ワークスペースの準備がまだ完了していません。暫くしてからもう一度お試しください。
```

中国語（簡体）:
```
工作目录还没有准备好，你可以稍后再试一下...
```

### 添付ファイル

なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| なし | 固定メッセージ | - | - |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| ユーザー操作 | コード補完リクエスト | workspace.isReady() == false | ワークスペース準備未完了時 |
| ユーザー操作 | 定義ジャンプリクエスト | workspace.isReady() == false | ワークスペース準備未完了時 |
| ユーザー操作 | 参照検索リクエスト | workspace.isReady() == false | ワークスペース準備未完了時 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| workspace.isReady() == true | ワークスペース準備完了時は送信しない |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[ユーザー操作リクエスト] --> B{workspace.isReady?}
    B -->|true| C[通常処理実行]
    B -->|false| D[MWS_NOT_COMPLETE メッセージ生成]
    D --> E[メッセージ返却]
    C --> F[結果返却]
    E --> G[終了]
    F --> G
```

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

### 参照テーブル一覧

本通知はデータベースを使用しない（インメモリ処理）。

### 参照データ

| データ | 取得元 | 用途 |
|--------|--------|------|
| ready状態 | scope:get('ready') | ワークスペース準備完了判定 |

### 更新テーブル一覧

なし

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| なし | - | - |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0 |
| リトライ間隔 | - |
| リトライ対象エラー | - |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 制限 | なし（リクエストごとに応答） |

### 配信時間帯

制限なし

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

- 固定メッセージのため機密情報は含まれない

## 備考

- MWS_COMPLETE（No.4）と対になる通知
- プログレスバー（WORKSPACE_LOADING）と併用されることが多い

---

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

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

### 推奨読解順序

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

メッセージ定義を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | script.lua | `locale/en-us/script.lua` | 193-194行目: MWS_NOT_COMPLETE 定義 |
| 1-2 | script.lua | `locale/ja-jp/script.lua` | 193-194行目: 日本語訳 |

**読解のコツ**: 固定メッセージで変数プレースホルダーなし。

#### Step 2: ワークスペース準備状態を理解する

ready 状態の管理機構を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | workspace.lua | `script/workspace/workspace.lua` | 544-547行目: isReady 関数 |
| 2-2 | workspace.lua | `script/workspace/workspace.lua` | 530-540行目: awaitReady 関数 |

**主要処理フロー**:
1. **544-547行**: isReady - scope:get('ready') で準備状態を確認
2. **530-540行**: awaitReady - 準備完了まで待機

#### Step 3: 使用箇所を理解する

MWS_NOT_COMPLETE がどこで使用されるかを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | workspace.lua | `script/workspace/workspace.lua` | 501-521行目: awaitReload での ready 設定 |

**主要処理フロー**:
- **504行**: scp:set('ready', false) - 準備中状態に設定
- **511行**: scp:set('ready', true) - 準備完了状態に設定

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

```
ユーザーリクエスト
    │
    ├─ workspace.isReady(uri) (workspace.lua:544)
    │      └─ scope.getScope(uri):get('ready')
    │
    ├─ [ready == false]
    │      └─ lang.script('MWS_NOT_COMPLETE')
    │             └─ メッセージ返却
    │
    └─ [ready == true]
           └─ 通常処理実行
```

### データフロー図

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

ユーザー操作        ───▶  isReady() チェック       ───▶  メッセージ or 結果
(補完、定義等)            │
                         ├─ scope:get('ready')
                         │
                         └─ [false] → MWS_NOT_COMPLETE
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| script.lua | `locale/en-us/script.lua` | ローカライズ | 英語メッセージ定義（193-194行） |
| script.lua | `locale/ja-jp/script.lua` | ローカライズ | 日本語メッセージ定義（193-194行） |
| workspace.lua | `script/workspace/workspace.lua` | ソース | isReady, awaitReady 実装 |
| scope.lua | `script/workspace/scope.lua` | ソース | スコープ状態管理 |
