EmmyLua 配置指南

April 3, 2026 · View on GitHub

English

EmmyLua Analyzer Rust 推荐把配置写在项目根目录的 .emmyrc.json 中。

兼容的配置文件:

  • .emmyrc.json:推荐,功能最完整
  • .luarc.json:兼容已有 LuaLS 配置
  • .emmyrc.lua:适合动态生成配置

快速开始

把下面这份最小配置放到项目根目录即可:

{
  "$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"]
  }
}

Schema 支持

添加 $schema 后,编辑器可以提供:

  • 配置项补全
  • 字段类型校验
  • 枚举值提示
  • 悬浮说明
{
  "$schema": "https://raw.githubusercontent.com/EmmyLuaLs/emmylua-analyzer-rust/refs/heads/main/crates/emmylua_code_analysis/resources/schema.json"
}

路径规则

workspaceresource 中的路径会在加载时自动展开。

写法含义
./libs相对于工作区根目录
libs/runtime也会按工作区相对路径处理
~/lua相对于用户 Home 目录
${workspaceFolder}{workspaceFolder}工作区根目录
{env:NAME}环境变量 NAME
$NAME环境变量 NAME
{luarocks}LuaRocks deploy lua 目录

示例:

{
  "workspace": {
    "library": [
      "${workspaceFolder}/types",
      "{env:HOME}/.lua",
      "{luarocks}"
    ],
    "workspaceRoots": [
      "./src",
      "./test"
    ]
  }
}

推荐模板

这份模板适合大多数 Lua 项目:

{
  "$schema": "https://raw.githubusercontent.com/EmmyLuaLs/emmylua-analyzer-rust/refs/heads/main/crates/emmylua_code_analysis/resources/schema.json",
  "completion": {
    "autoRequire": true,
    "callSnippet": false,
    "postfix": "@"
  },
  "diagnostics": {
    "globals": [],
    "disable": ["undefined-global"],
  },
  "doc": {
    "syntax": "md"
  },
  "runtime": {
    "version": "LuaLatest",
    "requirePattern": ["?.lua", "?/init.lua"]
  }
}

完整配置示例

注意:当前格式化配置的顶层键名是 format,不是 reformat

点击展开完整示例
{
  "$schema": "https://raw.githubusercontent.com/EmmyLuaLs/emmylua-analyzer-rust/refs/heads/main/crates/emmylua_code_analysis/resources/schema.json",
  "codeAction": {
    "insertSpace": false
  },
  "codeLens": {
    "enable": true
  },
  "completion": {
    "enable": true,
    "autoRequire": true,
    "autoRequireFunction": "require",
    "autoRequireNamingConvention": "keep",
    "autoRequireSeparator": ".",
    "callSnippet": false,
    "postfix": "@",
    "baseFunctionIncludesName": true
  },
  "diagnostics": {
    "enable": true,
    "disable": [],
    "enables": [],
    "globals": [],
    "globalsRegex": [],
    "severity": {},
    "diagnosticInterval": 500
  },
  "doc": {
    "privateName": [],
    "knownTags": [],
    "syntax": "md"
  },
  "documentColor": {
    "enable": true
  },
  "format": {
    "externalTool": null,
    "externalToolRangeFormat": null,
    "useDiff": false
  },
  "hint": {
    "enable": true,
    "paramHint": true,
    "indexHint": true,
    "localHint": true,
    "overrideHint": true,
    "metaCallHint": true,
    "enumParamHint": false
  },
  "hover": {
    "enable": true,
    "customDetail": null
  },
  "inlineValues": {
    "enable": true
  },
  "references": {
    "enable": true,
    "fuzzySearch": true,
    "shortStringSearch": false
  },
  "resource": {
    "paths": []
  },
  "runtime": {
    "version": "LuaLatest",
    "requireLikeFunction": [],
    "frameworkVersions": [],
    "extensions": [],
    "requirePattern": [],
    "nonstandardSymbol": [],
    "special": {}
  },
  "semanticTokens": {
    "enable": true,
    "renderDocumentationMarkup": true
  },
  "signature": {
    "detailSignatureHelper": true
  },
  "strict": {
    "requirePath": false,
    "typeCall": false,
    "arrayIndex": true,
    "metaOverrideFileDefine": true,
    "docBaseConstMatchBaseType": true,
    "requireExportGlobal": false
  },
  "workspace": {
    "ignoreDir": [],
    "ignoreGlobs": [],
    "library": [],
    "packageDirs": [],
    "workspaceRoots": [],
    "preloadFileSize": 0,
    "encoding": "utf-8",
    "moduleMap": [],
    "reindexDuration": 5000,
    "enableReindex": false
  }
}

顶层分组速览

分组用途常用字段
completion补全与自动 requireautoRequirecallSnippetpostfix
diagnostics诊断开关、白名单、级别覆盖disableglobalsseverity
doc文档注释解析与渲染syntaxknownTagsprivateName
runtimeLua 版本、扩展语法与 require 规则versionextensionsrequirePattern
workspace工作区目录、库目录、忽略规则libraryworkspaceRootsignoreGlobs
strict更严格的类型和可见性约束arrayIndexrequireExportGlobal
format外部格式化工具对接externalToolexternalToolRangeFormat
hint内联提示paramHintlocalHintenumParamHint
hover悬浮说明enablecustomDetail
references引用查找fuzzySearchshortStringSearch

配置参考

completion

字段类型默认值说明
enablebooleantrue启用补全
autoRequirebooleantrue自动插入跨模块符号需要的 require
autoRequireFunctionstring"require"自动 require 使用的函数名
autoRequireNamingConventionstring"keep"文件名转换方式:keepsnake-casepascal-casecamel-casekeep-class
autoRequireSeparatorstring"."自动 require 路径分隔符
callSnippetbooleanfalse补全函数时是否带调用片段
postfixstring"@"后缀补全触发符
baseFunctionIncludesNamebooleantrue生成函数模板时包含函数名

diagnostics

字段类型默认值说明
enablebooleantrue启用诊断
disablestring[][]禁用的诊断规则
enablesstring[][]额外启用的诊断规则
globalsstring[][]全局变量白名单
globalsRegexstring[][]全局变量正则白名单
severityobject{}自定义规则级别
diagnosticInterval`numbernull`500

严重程度可选值:errorwarninginformationhint

示例:

{
  "diagnostics": {
    "disable": ["undefined-global"],
    "severity": {
      "undefined-global": "warning",
      "unused": "hint"
    },
    "enables": ["unknown-doc-tag"]
  }
}
查看诊断规则

默认是 error

  • syntax-error
  • doc-syntax-error
  • undefined-global
  • local-const-reassign
  • annotation-usage-error
  • iter-variable-reassign(Lua 5.5 及以上默认启用)

默认是 hint

  • unreachable-code
  • unused
  • deprecated
  • redefined-local
  • duplicate-require
  • preferred-local-alias

默认关闭:

  • code-style-check
  • incomplete-signature-doc
  • missing-global-doc
  • unknown-doc-tag
  • non-literal-expressions-in-assert

其余规则默认级别为 warning

  • type-not-found
  • missing-return
  • param-type-mismatch
  • missing-parameter
  • redundant-parameter
  • access-invisible
  • discard-returns
  • undefined-field
  • duplicate-type
  • redefined-label
  • need-check-nil
  • await-in-sync
  • return-type-mismatch
  • missing-return-value
  • redundant-return-value
  • undefined-doc-param
  • duplicate-doc-field
  • missing-fields
  • inject-field
  • circle-doc-class
  • assign-type-mismatch
  • unbalanced-assignments
  • unnecessary-assert
  • unnecessary-if
  • duplicate-set-field
  • duplicate-index
  • generic-constraint-mismatch
  • cast-type-mismatch
  • unresolved-require
  • require-module-not-visible
  • enum-value-mismatch
  • read-only
  • global-in-non-module
  • attribute-param-type-mismatch
  • attribute-missing-parameter
  • attribute-redundant-parameter
  • invert-if
  • call-non-callable

doc

字段类型默认值说明
privateNamestring[][]把符合模式的字段视为私有成员,例如 m_*
knownTagsstring[][]额外识别的文档标签
syntaxstring"md"文档语法:nonemdmystrst
rstPrimaryDomain`stringnull`null
rstDefaultRole`stringnull`null

runtime

字段类型默认值说明
versionstring"LuaLatest"Lua 版本:Lua5.1LuaJITLua5.2Lua5.3Lua5.4Lua5.5LuaLatest
requireLikeFunctionstring[][]视为 require 的函数名
frameworkVersionsstring[][]框架版本标识
extensionsstring[][]额外识别的 Lua 文件扩展名
requirePatternstring[][]require 搜索模式,例如 ?.lua?/init.lua
nonstandardSymbolstring[][]允许的非标准语法符号
specialobject{}特殊函数映射

nonstandardSymbol 支持的值:

  • //
  • /**/
  • `
  • +=
  • -=
  • *=
  • /=
  • %=
  • ^=
  • //=
  • |=
  • &=
  • <<=
  • >>=
  • ||
  • &&
  • !
  • !=
  • continue

special 支持的值:nonerequireerrorasserttypesetmetatable

workspace

字段类型默认值说明
ignoreDirstring[][]忽略目录
ignoreGlobsstring[][]按 glob 忽略文件
library`string[]object[]`[]
packages`string[]object[]`[]
workspaceRootsstring[][]工作区源代码根目录
preloadFileSizenumber0预留字段,目前未使用
encodingstring"utf-8"文件编码
moduleMapobject[][]模块名映射规则
reindexDurationnumber5000全量重建索引延迟,单位毫秒
enableReindexbooleanfalse文件变化后启用全量重建索引

librarypackages 既可以写路径字符串,也可以写对象:

{
  "workspace": {
    "library": [
      "./types",
      {
        "path": "./vendor",
        "ignoreDir": ["test"],
        "ignoreGlobs": ["**/*.spec.lua"]
      }
    ]
  }
}

moduleMap 示例:

{
  "workspace": {
    "moduleMap": [
      {
        "pattern": "^lib(.*)$",
        "replace": "script\$1"
      }
    ]
  }
}

strict

字段类型默认值说明
requirePathbooleanfalse强制 require 路径必须命中配置的模块路径
typeCallbooleanfalse更严格地检查类型调用
arrayIndexbooleantrue更严格地检查数组索引
metaOverrideFileDefinebooleantrue元定义覆盖文件内定义
docBaseConstMatchBaseTypebooleantrue允许文档中的基础常量类型与基础类型匹配
requireExportGlobalbooleanfalse第三方库必须显式使用 ---@export global 才可导入

format

更多说明请参见 外部格式化工具选项

字段类型默认值说明
externalTool`objectnull`null
externalToolRangeFormat`objectnull`null
useDiffbooleanfalse通过 diff 合并格式化结果

外部工具配置对象:

字段类型默认值说明
programstring""可执行文件
argsstring[][]参数列表
timeoutnumber5000超时时间,单位毫秒

其他分组

分组字段默认值说明
codeActioninsertSpacefalse插入 @diagnostic disable-next-line 时在 --- 后补空格
codeLensenabletrue启用 CodeLens
documentColorenabletrue识别颜色字符串并显示颜色预览
hintenabletrue总开关
hintparamHinttrue参数名与参数类型提示
hintindexHinttrue数组索引命名提示
hintlocalHinttrue局部变量类型提示
hintoverrideHinttrue覆写方法提示
hintmetaCallHinttrue元表 __call 提示
hintenumParamHintfalse枚举字面量提示
hoverenabletrue启用悬浮说明
hovercustomDetailnull自定义悬浮细节等级,通常为 1255
inlineValuesenabletrue调试时显示内联值
referencesenabletrue启用引用查找
referencesfuzzySearchtrue常规查找失败后尝试模糊查找
referencesshortStringSearchfalse同时在短字符串中查找引用
resourcepaths[]资源根目录,用于路径补全与跳转
semanticTokensenabletrue启用语义高亮
semanticTokensrenderDocumentationMarkuptrue渲染文档标记,需要配合 doc.syntax
signaturedetailSignatureHelpertrue显示详细签名帮助

建议

  • 新项目优先使用 .emmyrc.json
  • 有现成 LuaLS 项目时,可先沿用 .luarc.json
  • workspace.libraryworkspace.workspaceRoots 建议尽早配置,否则跳转、补全和诊断的结果会比较分散
  • 若项目依赖第三方库可见性约束,可考虑启用 strict.requireExportGlobal

返回顶部