# 画面設計書 7-Vista（シンボルアウトライン）

## 概要

本ドキュメントは、space-vimにおけるVista（シンボルアウトライン）の画面設計について記載する。Vistaはliuchengxu/vista.vimプラグインにより提供されるLSPベースのシンボルビューア画面であり、Tagbarの代替として機能する。Language Server Protocol（LSP）からシンボル情報を取得し、より正確なシンボル解析を実現する。

### 本画面の処理概要

**業務上の目的・背景**：TagbarがctagsベースでシンボルEを解析するのに対し、Vistaはlsp（coc.nvim等）からシンボル情報を取得することで、より正確で言語セマンティクスに基づいたシンボル一覧を表示できる。モダンな開発環境ではLSPが標準となっているため、LSPベースのシンボルビューアの需要が高まっている。また、ctagsをサポートしていない言語でもLSPサーバーがあればシンボル一覧を表示できる。

**画面へのアクセス方法**：以下の方法でVista画面にアクセスできる。
- `:Vista`コマンド：Vistaを開く
- `:Vista!`コマンド：Vistaを閉じる
- `:Vista!!`コマンド：Vistaトグル

**主要な操作・処理内容**：
1. LSPからシンボル情報を取得して一覧表示
2. シンボルを選択してコード内の定義位置へジャンプ
3. シンボルのプレビュー表示
4. FZFとの連携によるファジー検索（`:Vista finder`）
5. シンボルのアウトライン表示

**画面遷移**：
- エディタ画面 -> `:Vista` -> Vista画面（サイドバー）
- Vista画面 -> シンボル選択 -> エディタ画面（シンボル定義位置）
- Vista画面 -> `:Vista!` -> エディタ画面（Vista閉じる）

**権限による表示制御**：特になし。LSPサーバーの対応言語に依存する。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 66 | タグ管理 | 主機能 | vista.vimによるLSPベースのシンボルビューア表示 |
| 29 | coc.nvim連携 | API連携 | LSPからシンボル情報を取得 |

## 画面種別

サイドバー / シンボルビュー

## URL/ルーティング

- 開くコマンド: `:Vista`
- 閉じるコマンド: `:Vista!`
- トグルコマンド: `:Vista!!`
- ファインダー: `:Vista finder`

## 入出力項目

| 項目名 | 入力/出力 | データ型 | 説明 |
|--------|----------|---------|------|
| g:vista_default_executive | 入力（設定） | String | デフォルトのシンボル取得方法（'ctags'/'coc'等） |
| g:vista_fzf_preview | 入力（設定） | List | FZFプレビュー設定 |
| LSPシンボル情報 | 入力 | List | LSPサーバーからのシンボルデータ |
| シンボル一覧 | 出力 | List | 表示用シンボルツリー |
| 選択シンボル位置 | 出力 | Number | ジャンプ先の行番号 |

## 表示項目

| 項目 | 表示内容 | 説明 |
|-----|---------|------|
| シンボルタイプ | function/class/variable等 | LSPで定義されたシンボル種別 |
| シンボル名 | 関数名/クラス名/変数名 | シンボルの識別子 |
| シンボルアイコン | 種別に応じたアイコン | Nerd Fonts対応 |
| 行番号 | 定義位置 | シンボルが定義されている行 |

## イベント仕様

### 1-Vista開く

`:Vista`コマンド実行時、Vistaサイドバーが表示され、現在のバッファのシンボルがLSPから取得・表示される。

### 2-シンボルジャンプ

Vista内でシンボルを選択すると、選択されたシンボルの定義位置にカーソルがジャンプする。

### 3-Vista finder

`:Vista finder`コマンドで、FZFを使用したシンボルのファジー検索が可能。

### 4-自動更新

バッファを切り替えると、Vistaは自動的に新しいバッファのシンボルをLSPから取得・表示する。

## データベース更新仕様

### 操作別データベース影響一覧

該当なし（シンボル解析のみ）

## メッセージ仕様

| 種別 | メッセージ | 表示条件 |
|------|----------|---------|
| エラー | Vista: No LSP server | LSPサーバーが見つからない時 |
| 情報 | Vista: No symbols found | シンボルが見つからない時 |

## 例外処理

| 状態 | 処理 |
|------|------|
| LSPサーバーが未起動 | ctagsにフォールバック |
| 対応していない言語 | 空のVistaを表示またはctagsを使用 |
| coc.nvimが未インストール | 他のLSPクライアントまたはctagsを使用 |

## 備考

- Vistaプラグインは`liuchengxu/vista.vim`により提供される
- Tagbarの代替として機能するが、LSPベースのためより正確なシンボル情報を提供
- coc.nvim、LanguageClient-neovim、vim-lsp等のLSPクライアントに対応
- ctagsへのフォールバック機能あり
- FZFとの連携でシンボルのファジー検索が可能

---

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

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

### 推奨読解順序

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

Vistaの設定とLSP連携を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | packages.vim | `layers/+programming/programming/packages.vim` | Vistaプラグインの登録を確認 |

**読解のコツ**: Vistaはvista.vimプラグインにより提供され、LSPクライアント（coc.nvim等）と連携してシンボル情報を取得する。

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

プラグインのロードとLSP連携を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | packages.vim | `layers/+programming/programming/packages.vim` | プラグイン登録を確認 |
| 2-2 | packages.vim | `layers/+tools/lsp/packages.vim` | LSPクライアントの設定を確認 |

**主要処理フロー**:
1. **programming/packages.vim 27行目**: vista.vimプラグインの登録
2. **lsp/packages.vim**: coc.nvim等のLSPクライアント登録

#### Step 3: LSP連携を理解する

coc.nvimとの連携方法を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | packages.vim | `layers/+tools/lsp/packages.vim` | coc.nvimの設定を確認 |

**主要処理フロー**:
- **1-9行目**: coc.nvimのセットアップ
- Vistaはcoc.nvimからシンボル情報を取得

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

```
:Vista コマンド
    │
    └─ vista.vim プラグイン
           │
           ├─ [coc.nvim利用時]
           │      │
           │      └─ CocAction('documentSymbols')
           │             │
           │             └─ LSPサーバーへシンボル要求
           │
           ├─ [vim-lsp利用時]
           │      │
           │      └─ lsp#get_text_document_symbol()
           │
           └─ [フォールバック]
                  │
                  └─ ctags実行
```

### データフロー図

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

:Vista ───────────────▶ vista.vim ────────────────▶ サイドバー表示
コマンド                  (プラグイン起動)

現在のバッファ ───────▶ LSPクライアント ──────────▶ シンボル要求
                        (coc.nvim等)

LSPサーバー ──────────▶ vista.vim ────────────────▶ シンボル一覧
シンボル応答              (解析・表示)

シンボル選択 ─────────▶ vista.vim ────────────────▶ 定義位置ジャンプ
                        (ジャンプ処理)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| packages.vim | `layers/+programming/programming/packages.vim` | ソース | プラグイン登録 |
| packages.vim | `layers/+tools/lsp/packages.vim` | ソース | LSPクライアント登録 |
| vista.vim | 外部プラグイン（liuchengxu/vista.vim） | プラグイン | Vista本体機能 |
| coc.nvim | 外部プラグイン（neoclide/coc.nvim） | プラグイン | LSPクライアント |
