# 画面遷移図

本プロジェクト（Lua Language Server）はGUI画面を持たないLSP（Language Server Protocol）サーバーです。
ユーザーインタラクションはエディタ（VS Code等）を介して行われます。

以下の図は、LSP機能およびCLIコマンドのフローを示しています。

## LSP機能フロー

```mermaid
flowchart TB
    subgraph Editor["エディタ（クライアント）"]
        E_Open["ファイルを開く"]
        E_Edit["コード編集"]
        E_Save["ファイル保存"]
        E_Hover["ホバー"]
        E_Complete["補完トリガー"]
        E_Sig["関数呼び出し"]
        E_Goto["定義へ移動"]
        E_Refs["参照検索"]
        E_Rename["名前変更"]
        E_Action["コードアクション"]
        E_Format["フォーマット"]
        E_Symbol["シンボル検索"]
    end

    subgraph LSP["Lua Language Server"]
        L_Init["initialize / initialized"]
        L_Open["textDocument/didOpen"]
        L_Change["textDocument/didChange"]
        L_Save["textDocument/didSave"]
        L_Hover["textDocument/hover"]
        L_Complete["textDocument/completion"]
        L_Resolve["completionItem/resolve"]
        L_Sig["textDocument/signatureHelp"]
        L_Def["textDocument/definition"]
        L_TypeDef["textDocument/typeDefinition"]
        L_Impl["textDocument/implementation"]
        L_Refs["textDocument/references"]
        L_Highlight["textDocument/documentHighlight"]
        L_Rename["textDocument/rename"]
        L_PrepRename["textDocument/prepareRename"]
        L_Action["textDocument/codeAction"]
        L_Lens["textDocument/codeLens"]
        L_Format["textDocument/formatting"]
        L_RangeFormat["textDocument/rangeFormatting"]
        L_DocSymbol["textDocument/documentSymbol"]
        L_WsSymbol["workspace/symbol"]
        L_Semantic["textDocument/semanticTokens"]
        L_Folding["textDocument/foldingRange"]
        L_InlayHint["textDocument/inlayHint"]
        L_Diag["textDocument/diagnostic"]
        L_Color["textDocument/documentColor"]
    end

    subgraph Results["結果表示"]
        R_Hover["ホバー情報表示"]
        R_Complete["補完リスト表示"]
        R_Sig["シグネチャ表示"]
        R_Jump["定義位置へジャンプ"]
        R_RefList["参照一覧表示"]
        R_Actions["アクション一覧表示"]
        R_Diag["診断結果表示"]
    end

    %% ファイル操作フロー
    E_Open --> L_Open
    E_Edit --> L_Change
    E_Save --> L_Save

    %% ホバー・補完フロー
    E_Hover --> L_Hover --> R_Hover
    E_Complete --> L_Complete --> R_Complete
    R_Complete --> L_Resolve --> R_Complete
    E_Sig --> L_Sig --> R_Sig

    %% ナビゲーションフロー
    E_Goto --> L_Def --> R_Jump
    E_Goto --> L_TypeDef --> R_Jump
    E_Goto --> L_Impl --> R_Jump
    E_Refs --> L_Refs --> R_RefList
    E_Refs --> L_Highlight

    %% リファクタリングフロー
    E_Rename --> L_PrepRename --> L_Rename
    E_Action --> L_Action --> R_Actions

    %% フォーマット・診断フロー
    E_Format --> L_Format
    E_Format --> L_RangeFormat
    L_Change --> L_Diag --> R_Diag

    %% シンボル検索
    E_Symbol --> L_DocSymbol
    E_Symbol --> L_WsSymbol
```

## CLIコマンドフロー

```mermaid
flowchart TB
    subgraph CLI["コマンドライン"]
        C_Start["lua-language-server 起動"]
        C_Help["--help"]
        C_Version["--version"]
        C_Check["--check"]
        C_Doc["--doc"]
        C_Visualize["--visualize"]
    end

    subgraph Handlers["ハンドラー"]
        H_Help["cli/help.lua"]
        H_Version["cli/version.lua"]
        H_Check["cli/check.lua"]
        H_CheckWorker["cli/check_worker.lua"]
        H_Doc["cli/doc/init.lua"]
        H_Visualize["cli/visualize.lua"]
    end

    subgraph Outputs["出力"]
        O_Help["ヘルプメッセージ出力"]
        O_Version["バージョン出力"]
        O_CheckReport["診断レポート（JSON/Pretty）"]
        O_Docs["ドキュメントファイル"]
        O_AST["Graphviz DOT形式AST"]
    end

    C_Start --> C_Help --> H_Help --> O_Help
    C_Start --> C_Version --> H_Version --> O_Version
    C_Start --> C_Check --> H_Check
    H_Check --> H_CheckWorker --> O_CheckReport
    C_Start --> C_Doc --> H_Doc --> O_Docs
    C_Start --> C_Visualize --> H_Visualize --> O_AST
```

## LSPコマンド実行フロー

```mermaid
flowchart LR
    subgraph Commands["workspace/executeCommand"]
        Cmd_RemoveSpace["lua.removeSpace"]
        Cmd_Solve["lua.solve"]
        Cmd_JsonToLua["lua.jsonToLua"]
        Cmd_SetConfig["lua.setConfig"]
        Cmd_GetConfig["lua.getConfig"]
        Cmd_AutoRequire["lua.autoRequire"]
        Cmd_ExportDoc["lua.exportDocument"]
        Cmd_ReloadFFI["lua.reloadFFIMeta"]
    end

    subgraph Handlers["コマンドハンドラー"]
        H_RemoveSpace["core/command/removeSpace.lua"]
        H_Solve["core/command/solve.lua"]
        H_JsonToLua["core/command/jsonToLua.lua"]
        H_SetConfig["core/command/setConfig.lua"]
        H_GetConfig["core/command/getConfig.lua"]
        H_AutoRequire["core/command/autoRequire.lua"]
        H_ExportDoc["core/command/exportDocument.lua"]
        H_ReloadFFI["core/command/reloadFFIMeta.lua"]
    end

    Cmd_RemoveSpace --> H_RemoveSpace
    Cmd_Solve --> H_Solve
    Cmd_JsonToLua --> H_JsonToLua
    Cmd_SetConfig --> H_SetConfig
    Cmd_GetConfig --> H_GetConfig
    Cmd_AutoRequire --> H_AutoRequire
    Cmd_ExportDoc --> H_ExportDoc
    Cmd_ReloadFFI --> H_ReloadFFI
```

## 診断・エラー表示フロー

```mermaid
flowchart TB
    subgraph Trigger["トリガー"]
        T_Open["ファイルを開く"]
        T_Change["コード変更"]
        T_Save["ファイル保存"]
    end

    subgraph Diagnostic["診断処理"]
        D_Parse["構文解析"]
        D_TypeCheck["型チェック"]
        D_Lint["リンター"]
        D_Spell["スペルチェック"]
    end

    subgraph Results["診断結果"]
        R_Error["エラー"]
        R_Warning["警告"]
        R_Info["情報"]
        R_Hint["ヒント"]
    end

    subgraph Display["表示"]
        Disp_Underline["下線表示"]
        Disp_Problems["問題パネル"]
        Disp_Hover["ホバーで詳細"]
        Disp_Action["クイックフィックス"]
    end

    T_Open --> D_Parse
    T_Change --> D_Parse
    T_Save --> D_Parse

    D_Parse --> D_TypeCheck --> D_Lint --> D_Spell

    D_Spell --> R_Error
    D_Spell --> R_Warning
    D_Spell --> R_Info
    D_Spell --> R_Hint

    R_Error --> Disp_Underline
    R_Warning --> Disp_Underline
    R_Info --> Disp_Underline
    R_Hint --> Disp_Underline

    Disp_Underline --> Disp_Problems
    Disp_Underline --> Disp_Hover
    Disp_Hover --> Disp_Action
```

## 備考

- 本プロジェクトはLSPサーバーであり、UIはクライアント（エディタ）側で提供されます
- 上記の遷移図は論理的なデータフローを示しており、従来のGUI画面遷移とは異なります
- 各LSPメソッドは独立して呼び出され、状態を持たないリクエスト/レスポンス形式です
