| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A high-performance Lua language server, code formatter, linter, and documentation generator — built with Rust.
Quick Start · Components · Features · Usage · Configuration · Documentation · Development
| Crate | Binary | Description |
|---|---|---|
| emmylua_ls | emmylua_ls | Language server with completion, diagnostics, hover, rename, semantic tokens, and more |
| emmylua_formatter | luafmt | Deterministic, width-aware Lua & EmmyLua code formatter |
| emmylua_check | emmylua_check | Static analyzer / linter with 50+ diagnostics, CI friendly |
| emmylua_doc_cli | emmylua_doc_cli | Documentation generator from source code and annotations (HTML/Markdown/JSON) |
| emmylua_parser | — | Lua and EmmyLua parser library |
| emmylua_code_analysis | — | Code analysis library powering the language server |
| emmylua_parser_desc | — | Parser for markup within Lua comments |
| schema_to_emmylua | — | Tool to convert JSON Schema to EmmyLua annotations |
# Via Cargo
cargo install emmylua_ls # Language server
cargo install emmylua_formatter # Code formatter (binary: luafmt)
cargo install emmylua_check # Static analyzer / linter
cargo install emmylua_doc_cli # Documentation generatorOr download pre-built binaries from the Releases page.
Before connecting your editor:
See the Configuration Guide for all supported options.
VS CodeRecommended setup:
This is the easiest way to get completion, diagnostics, hover, formatting, semantic tokens, and project indexing with minimal manual setup.
NeovimNeovim 0.11+ example:
vim.lsp.config("emmylua_ls", {
cmd = { "emmylua_ls" },
filetypes = { "lua" },
root_markers = { ".emmyrc.json", ".luarc.json", ".git" },
})
vim.lsp.enable("emmylua_ls")If you manage servers manually, replace cmd with the full path to your binary.
IntelliJ IDEInstall the EmmyLua2 Plugin from the JetBrains Marketplace.
For most projects, no extra setup is required beyond opening the workspace. Add .emmyrc.json if you need custom workspace roots, library paths, or stricter diagnostics.
Other editorsAny editor with LSP support can use emmylua_ls over stdio, which is the default and recommended mode.
Typical client command:
{
"command": "emmylua_ls",
"args": []
}Use TCP only when you explicitly want a remote or debug-friendly setup:
emmylua_ls -c tcp --ip 127.0.0.1 --port 5007Useful client root markers:
| Version | Status |
|---|---|
| Lua 5.1 – 5.5 | ✅ Full support |
| LuaJIT / LuaJIT2 / LuaJIT3 | ✅ Full support |
| EmmyLua / Luacats annotations | ✅ Supported |
| Area | Capabilities |
|---|---|
| Navigation | Go to Definition, Go to Implementation, Find References, Call Hierarchy, Document Highlights |
| Symbols | Document Symbols, Workspace Symbols, Selection Range |
| Editing | Completion, Rename, Code Actions, Document Formatting, Range Formatting, On-type Formatting |
| Insight | Hover, Signature Help, Diagnostics, Semantic Tokens, Inlay Hints, Code Lens, Document Color |
| Structure | Folding Range, Document Links |
In practice, this gives you a full day-to-day Lua editing workflow: symbol navigation, annotation-aware type feedback, project-wide references, incremental diagnostics, and formatting support in editors that expose standard LSP features.
# Default stdio mode
emmylua_ls
# TCP mode for remote debugging
emmylua_ls -c tcp --port 5007 --log-level debug --log-path ./logs
# Specify editor for editor-specific optimizations
emmylua_ls --editor intellij| Parameter | Description |
|---|---|
| -c, --communication | stdio (default) or tcp |
| --port | TCP port (default: 5007) |
| --log-level | debug / info / warn / error |
| --log-path | Log output directory |
| --editor | vscode / intellij / neovim |
luafmt src --write # Format and write files in src
luafmt . --check --exclude "vendor/**" # Verify formatting (git-diff style output)
luafmt --stdin < script.lua # Read from stdin
luafmt --dump-default-config # Print the default configurationMain options: --write, --check, --list-different, --config <FILE>, --include / --exclude glob filters, --level <Lua51|Lua52|Lua53|Lua54|Lua55|LuaJIT>, --color, --diff-style <marker|git>.
See the Formatter Guide for behavior, options, and profiles.
emmylua_check . # Analyze the current directory
emmylua_check ./src -c ./config/.emmyrc.json # Use a specific config file
emmylua_check . -i "vender/**,test/**" # Ignore files/directories
emmylua_check . --severity warn # Only show warnings and above
emmylua_check . -f json --output ./diag.json # Output diagnostics as JSON
emmylua_check . -f sarif # Output diagnostics as SARIF
emmylua_check . -f github # GitHub Actions inline annotations| Parameter | Description |
|---|---|
| -c, --config | Path to config file (.emmyrc.json / .luarc.json searched by default) |
| -i, --ignore | Comma-separated glob patterns to ignore |
| -f, --output-format | text (default), json, sarif, github |
| --output | Output target (stdout or file) |
| --warnings-as-errors | Treat warnings as errors |
| --severity | Minimum severity: error / warn / info / hint |
emmylua_doc_cli ./src -o ./docs # Generate HTML docs from ./src
emmylua_doc_cli . -f markdown -o ./docs # Generate Markdown docs
emmylua_doc_cli . -f json -o ./api.json # Generate a JSON AST
emmylua_doc_cli . -o ./docs --site-name "My Project"
emmylua_doc_cli . -o ./docs --exclude "third_party/**,test/**"| Parameter | Description |
|---|---|
| -f, --output-format | markdown (default), json |
| -o, --output | Output destination |
| --include / --exclude | Comma-separated glob patterns |
| --site-name | Site name (default: Docs) |
| --override-template | Path to a custom template |
| --mixin | Path to a mixin Markdown file (guides, tutorials, etc.) |
The project reads configuration from the workspace root, in order of preference:
| File | Notes |
|---|---|
| .emmyrc.json | Recommended, full feature support, JSON schema available |
| .luarc.json | Useful when migrating from LuaLS |
| .emmyrc.lua | Lua-based config, evaluated with the embedded luars runtime |
Example .emmyrc.json:
{
"$schema": "https://raw.githubusercontent.com/EmmyLuaLs/emmylua-analyzer-rust/refs/heads/main/crates/emmylua_code_analysis/resources/schema.json",
"runtime": {
"version": "LuaLatest"
},
"workspace": {
"workspaceRoots": ["./src"]
},
"diagnostics": {
"disable": ["undefined-global"]
}
}See the Configuration Guide for all supported options.
Requires a recent stable Rust toolchain (Rust Edition 2024).
git clone https://github.com/EmmyLuaLs/emmylua-analyzer-rust.git
cd emmylua-analyzer-rust
cargo build --release # Build everything
cargo build --release -p emmylua_ls # Build only the language servercargo test # Run all tests
cargo test -p emmylua_parser # Run parser tests onlyWe welcome contributions! See CONTRIBUTING.md for details.
Thanks to all contributors and the Lua community.
| Back | FazBrowse Home | New Git URL |