# Lua Language Server

## 概要

Lua Language Server は、Lua プログラミング言語向けの Language Server Protocol (LSP) 実装です。Visual Studio Code で100万以上のインストールを達成しており、Lua 開発者向けの最も人気の高い言語サーバーです。コード補完、定義ジャンプ、型チェック、診断機能など、統合開発環境に必要な機能を提供し、Lua 開発をより高速かつ効率的にします。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| マルチバージョン対応 | Lua 5.5, 5.4, 5.3, 5.2, 5.1, LuaJIT をサポート |
| 自動補完 | インテリジェントなコード補完機能 |
| 定義ジャンプ | Go to Definition 機能 |
| リファレンス検索 | Find References 機能でコード参照を検索 |
| ホバー情報 | 変数・関数の詳細情報をホバー表示 |
| 型チェック | 動的型推論とチェック機能 |
| 診断機能 | 65種類の診断ルールによる警告・エラー表示 |
| 構文チェック | 構文エラーの検出 |
| リネーム | Rename 機能によるリファクタリング |
| コード整形 | EmmyLuaCodeStyle 統合による自動フォーマット |
| アノテーション | 20以上のアノテーション対応（@param, @return, @type など） |
| Inlay Hints | コード内の型情報表示 |
| Code Lens | コード上の有用な情報表示 |
| スペルチェック | 識別子・コメントのスペルチェック |
| プラグイン | プラグインシステムによる機能拡張 |
| ドキュメント生成 | コードからの自動ドキュメント生成 |

## 技術スタック

### コア

- 言語: Lua, C/C++ (ネイティブバイナリ)
- プロトコル: Language Server Protocol (LSP)
- ビルドシステム: Luamake
- 対応プラットフォーム: Windows, Linux, macOS, Docker

### 主要ライブラリ

- bee.lua: ファイルシステム、スレッド、ソケット、RPC
- luamake: Lua 製ビルドシステム
- LPegLabel: パーサー生成（拡張 LPeg）
- EmmyLuaCodeStyle: コードフォーマッター
- json.lua: JSON 解析
- lua-glob: ファイルグロブマッチング
- vscode-languageclient: VS Code 統合

## ディレクトリ構成

```
lua-language-server/
├── 3rd/                    # 外部依存関係（サブモジュール）
│   ├── bee.lua/            # システム操作ライブラリ
│   ├── luamake/            # ビルドシステム
│   ├── lpeglabel/          # パーサー生成ツール
│   ├── EmmyLuaCodeStyle/   # フォーマッター
│   └── json.lua/           # JSON ライブラリ
├── doc/                    # 多言語ドキュメント
│   ├── en-us/              # 英語版
│   ├── zh-cn/              # 中国語（簡体字）版
│   └── ja-jp/              # 日本語版
├── script/                 # メイン Lua スクリプト
│   ├── core/               # コア機能
│   │   ├── completion/     # 自動補完エンジン
│   │   ├── diagnostics/    # 診断エンジン（65モジュール）
│   │   └── hover/          # ホバー情報表示
│   ├── provider/           # LSP プロバイダー（14モジュール）
│   ├── vm/                 # 仮想マシン・型システム（20モジュール）
│   ├── workspace/          # ワークスペース管理
│   ├── config/             # 設定管理
│   ├── cli/                # コマンドラインインターフェース
│   └── parser/             # パーサー機能
├── test/                   # テストディレクトリ（155ファイル）
├── meta/                   # ライブラリメタデータ
│   └── 3rd/                # 外部フレームワークメタ
├── locale/                 # 多言語ローカライズ（6言語対応）
├── make/                   # ビルド設定
├── main.lua                # エントリーポイント
├── make.lua                # Luamake ビルド定義
├── make.sh                 # Unix/Linux 用ビルドスクリプト
├── make.bat                # Windows 用ビルドスクリプト
├── test.lua                # テスト実行エントリー
├── .luarc.json             # Lua LSP 設定
└── Dockerfile              # Docker 設定
```

## セットアップ

### 必要条件

| OS | 要件 |
| --- | --- |
| Windows | MSVC、Ninja Build System |
| Linux | GCC-9 以上、G++-9 以上、Ninja Build System |
| macOS | Clang、Ninja Build System |

### ビルド手順

**Unix/Linux/macOS**:
```bash
git clone https://github.com/LuaLS/lua-language-server
cd lua-language-server
./make.sh
```

**Windows**:
```batch
git clone https://github.com/LuaLS/lua-language-server
cd lua-language-server
make.bat
```

### エディタ統合

**VS Code**:
マーケットプレイスから「sumneko.lua」で検索してインストール

**NeoVim**:
LSP クライアント設定で lua-language-server を接続

## 開発

### テスト実行

```bash
# すべてのテストを実行
bin/lua-language-server test.lua

# 特定のテストを実行
bin/lua-language-server test.lua --name=completion
```

### 主なテストカテゴリ

- `basic`: 基本テスト
- `parser_test`: パーサーテスト
- `definition`: 定義検索テスト
- `type_inference`: 型推論テスト
- `completion`: 補完テスト
- `diagnostics`: 診断テスト
- `hover`: ホバー機能テスト
- `rename`: 名前変更テスト

### コード整形

EmmyLuaCodeStyle が統合されており、コードフォーマットが自動適用されます。

### 設定

`.luarc.json` でプロジェクト固有の LSP 設定を行います。100以上の設定オプションが利用可能です。

### ログ・デバッグ

- ログ出力先: `/log/service.log`
- 環境変数 `LOGLEVEL` でログレベルを設定
- 環境変数 `DEVELOP` で開発モードを有効化
