# 通知設計書 7-spacevim#debugging#Info

## 概要

本ドキュメントは、space-vimにおけるデバッグ情報表示関数 `spacevim#debugging#Info` の通知仕様を定義するものである。

### 本通知の処理概要

`spacevim#debugging#Info` は、現在のファイルタイプとspace-vim関連のグローバル変数を表示するデバッグ情報通知関数である。この関数は `:SpaceInfo` コマンドから呼び出され、トラブルシューティングや設定確認に使用される。

**業務上の目的・背景**：space-vimは多数のグローバル変数と設定オプションを持ち、問題が発生した際の原因特定が困難になることがある。この関数により、現在の設定状態を一覧表示することで、ユーザーや開発者が問題を診断しやすくなる。特に、GitHub issueで問題を報告する際に、環境情報を共有する手段として重要である。

**通知の送信タイミング**：ユーザーが `:SpaceInfo` コマンドを実行した際に通知が送信される。手動でのコマンド実行が必要であり、自動的には送信されない。

**通知の受信者**：Vimエディタを操作しているユーザー本人がメッセージの受信者となる。メッセージはVimのコマンドライン領域に表示される。

**通知内容の概要**：現在のファイルタイプ（FileType）と、`g:spacevim` で始まるすべてのグローバル変数が表示される。辞書型の変数は展開されて各キー・値のペアが表示される。

**期待されるアクション**：ユーザーは表示された情報を確認し、設定が意図したとおりになっているか検証する。問題がある場合は設定ファイルを修正するか、情報をコピーしてissueに報告する。

## 通知種別

アプリ内通知（Vimコマンドライン表示）

## 送信仕様

### 基本情報

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

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

現在Vimエディタを操作しているユーザーのコマンドライン領域に直接表示される。特別な送信先決定ロジックは存在しない。

## 通知テンプレート

### アプリ内通知の場合

| 項目 | 内容 |
|-----|------|
| 表示位置 | Vimコマンドライン領域 |
| ハイライト | Type（セクションタイトル）、Normal（値） |
| プレフィックス | なし |
| 形式 | テキスト |

### 本文テンプレート

```
    Current FileType: {filetype}
    Global Variables:
    let g:{variable_name} = {value}
    ...
```

辞書型変数の場合：
```
    let g:{variable_name} = {
        key = value,
        ...
    }
```

### 添付ファイル

該当なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| filetype | 現在のファイルタイプ | &filetype | Yes |
| variable_name | グローバル変数名 | g: テーブルのキー（spacevimで始まるもの） | Yes |
| value | グローバル変数の値 | g:[variable_name] | Yes |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| コマンド実行 | :SpaceInfo コマンド | 常時（呼び出されたら実行） | ユーザーが手動でコマンドを実行 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| なし | コマンドが呼び出された場合は常に表示される |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[:SpaceInfo コマンド実行] --> B[spacevim#debugging#Info呼び出し]
    B --> C[s:GetGlobalVariables呼び出し]
    C --> D[g:テーブルからspacevimで始まる変数を抽出]
    D --> E[変数リストをソート]
    E --> F[Current FileType表示]
    F --> G[Global Variables表示]
    G --> H{変数の型判定}
    H -->|辞書型| I[s:PrettyPrintDictで展開表示]
    H -->|その他| J[string()で値を表示]
    I --> K[次の変数へ]
    J --> K
    K --> L{すべて処理完了?}
    L -->|No| H
    L -->|Yes| M[終了]
```

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

### 参照テーブル一覧

| テーブル名 | 用途 | 備考 |
|-----------|------|------|
| g: | グローバル変数テーブル | Vimの組み込みグローバル名前空間 |

### テーブル別参照項目詳細

#### g:

| 参照項目（カラム名） | 用途 | 取得条件 |
|-------------------|------|---------|
| spacevim* | space-vim関連のすべての変数 | キー名が「spacevim」で始まるもの |

### 更新テーブル一覧

該当なし（参照のみ）

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| なし | 特になし | 処理は常に成功する |

### リトライ仕様

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

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 1分あたり上限 | 制限なし |
| 1日あたり上限 | 制限なし |

### 配信時間帯

制限なし（Vimが起動している間は常に表示可能）

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

- 表示される情報にはファイルパスや設定値が含まれる可能性がある
- ローカル環境での表示のため特別な保護は不要
- 外部への送信は行わない（ただし、InfoToClipboard関数でクリップボードにコピーされる場合あり）

## 備考

- 変数リストはアルファベット順にソートされて表示される
- 辞書型の変数はネストされた形式で整形表示される
- 表示量が多い場合は「Press ENTER or type command to continue」プロンプトが表示される

---

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

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

### 推奨読解順序

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

本関数は `g:` テーブル（Vimのグローバル変数名前空間）を参照する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | debugging.vim | `core/autoload/spacevim/debugging.vim` | g:テーブルへのアクセス方法を確認 |

**読解のコツ**: Vim scriptでは `g:` はグローバル変数の名前空間を示す。`keys(g:)` でグローバル変数名の一覧を取得できる。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | debugging.vim | `core/autoload/spacevim/debugging.vim` | spacevim#debugging#Info関数の定義（23-39行目） |

**主要処理フロー**:
1. **23行目**: `function! spacevim#debugging#Info() abort` - 関数定義
2. **24行目**: `let global_variables = s:GetGlobalVariables()` - 変数リスト取得
3. **26-27行目**: `echohl Type | echo '    Current FileType: ' | echohl NONE | echon &filetype` - ファイルタイプ表示
4. **28行目**: `echohl Type | echo '    Global Variables:' | echohl NONE` - セクション見出し
5. **29-38行目**: 変数ループで各変数を表示

#### Step 3: 補助関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | debugging.vim | `core/autoload/spacevim/debugging.vim` | s:GetGlobalVariables関数（9-21行目） |
| 3-2 | debugging.vim | `core/autoload/spacevim/debugging.vim` | s:PrettyPrintDict関数（1-7行目） |

**主要処理フロー（s:GetGlobalVariables）**:
- **10行目**: `let variable_list = []` - 空のリストを初期化
- **12-15行目**: g:テーブルをループし、spacevimで始まるキーを抽出
- **18行目**: `call sort(variable_list)` - ソート

**主要処理フロー（s:PrettyPrintDict）**:
- **2行目**: `let keys = sort(keys(a:var))` - 辞書のキーをソート
- **3-5行目**: 各キー・値ペアを整形して表示

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

```
:SpaceInfo (コマンド)
    │
    └─ spacevim#debugging#Info()
           │
           ├─ s:GetGlobalVariables()
           │      └─ keys(g:) - グローバル変数一覧取得
           │             └─ filter - spacevimで始まるものを抽出
           │                    └─ sort - アルファベット順にソート
           │
           ├─ echohl Type + echo - FileType見出し表示
           │
           ├─ echon &filetype - FileType値表示
           │
           └─ for variable in global_variables
                  │
                  ├─ [辞書型の場合]
                  │      └─ s:PrettyPrintDict(var)
                  │             └─ 各キー・値を整形表示
                  │
                  └─ [その他の型]
                         └─ echo + string(var)
```

### データフロー図

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

g: テーブル ───▶ s:GetGlobalVariables() ───▶ 変数リスト
                         │
                         ▼
                  spacevimで始まるキーをフィルタ
                         │
                         ▼
                      ソート
                         │
                         ▼
              spacevim#debugging#Info()
                         │
          ┌──────────────┴──────────────┐
          │                             │
          ▼                             ▼
   &filetype取得              変数ループ処理
          │                             │
          ▼                             ▼
コマンドライン表示       コマンドライン表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| debugging.vim | `core/autoload/spacevim/debugging.vim` | ソース | Info/InfoToClipboard関数の実装 |
