diff --git a/changelog.md b/changelog.md
index 2202e28856eac92af377c0627eadd1ee972e5c03..6fb01e28261846f4a70f3b1e0ee9e7fdbdcf6526 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,79 @@
 # changelog
 
+## 3.5.0
+`2022-7-19`
+* `NEW` `LuaDoc`: `---@operator`:
+  ```lua
+  ---@class fspath
+  ---@operator div(string|fspath): fspath
+
+  ---@type fspath
+  local root
+
+  local fileName = root / 'script' / 'main.lua' -- `fileName` is `fspath` here
+  ```
+* `NEW` `LuaDoc`: `---@source`:
+  ```lua
+  -- Also supports absolute path or relative path (based on current file path)
+  ---@source file:///xxx.c:50:20
+  XXX = 1 -- when finding definitions of `XXX`, returns `file:///xxx.c:50:20` instead here.
+  ```
+* `NEW` `LuaDoc`: `---@enum`:
+  ```lua
+  ---@enum animal
+  Animal = {
+    Cat = 1,
+    Dog = 2,
+  }
+
+  ---@param x animal
+  local function f(x) end
+
+  f() -- suggests `Animal.Cat`, `Animal.Dog`, `1`, `2` as the first parameter
+  ```
+* `NEW` diagnostics:
+  * `unknown-operator`
+  * `unreachable-code`
+* `NEW` settings:
+  * `diagnostics.unusedLocalExclude`
+* `NEW` VSCode: add support for [EmmyLuaUnity](https://marketplace.visualstudio.com/items?itemName=CppCXY.emmylua-unity)
+* `CHG` support multi-type:
+  ```lua
+  ---@type number, _, boolean
+  local a, b, c -- `a` is `number`, `b` is `unknown`, `c` is `boolean`
+  ```
+* `CHG` treat `_ENV = XXX` as `local _ENV = XXX`
+  * `_ENV = nil`: disable all globals
+  * `_ENV = {}`: allow all globals
+  * `_ENV = {} ---@type mathlib`: only allow globals in `mathlib`
+* `CHG` hover: dose not show unknown `---@XXX` as description
+* `CHG` contravariance is allowed at the class declaration
+  ```lua
+  ---@class BaseClass
+  local BaseClass
+
+  ---@class MyClass: BaseClass
+  local MyClass = BaseClass -- OK!
+  ```
+* `CHG` hover: supports path in link
+  ```lua
+  --![](image.png) --> will convert to `--![](file:///xxxx/image.png)`
+  local x
+  ```
+* `CHG` signature: only show signatures matching the entered parameters
+* `FIX` [#880](https://github.com/sumneko/lua-language-server/issues/880)
+* `FIX` [#1284](https://github.com/sumneko/lua-language-server/issues/1284)
+* `FIX` [#1292](https://github.com/sumneko/lua-language-server/issues/1292)
+* `FIX` [#1294](https://github.com/sumneko/lua-language-server/issues/1294)
+* `FIX` [#1306](https://github.com/sumneko/lua-language-server/issues/1306)
+* `FIX` [#1311](https://github.com/sumneko/lua-language-server/issues/1311)
+* `FIX` [#1317](https://github.com/sumneko/lua-language-server/issues/1317)
+* `FIX` [#1320](https://github.com/sumneko/lua-language-server/issues/1320)
+* `FIX` [#1330](https://github.com/sumneko/lua-language-server/issues/1330)
+* `FIX` [#1345](https://github.com/sumneko/lua-language-server/issues/1345)
+* `FIX` [#1346](https://github.com/sumneko/lua-language-server/issues/1346)
+* `FIX` [#1348](https://github.com/sumneko/lua-language-server/issues/1348)
+
 ## 3.4.2
 `2022-7-6`
 * `CHG` diagnostic: `type-check` ignores `nil` in `getfield`
diff --git a/package.json b/package.json
index 08e7d5946f27c1ea9ceb496918d747936a97c7f0..f380f08b6cfb22335f9f7f96a66779c39a37fc58 100644
--- a/package.json
+++ b/package.json
@@ -122,99 +122,101 @@
 					"default": [],
 					"items": {
 						"enum": [
-							"not-yieldable",
-							"redundant-parameter",
+							"action-after-return",
+							"ambiguity-1",
+							"args-after-dots",
+							"assign-type-mismatch",
+							"await-in-sync",
+							"block-after-else",
 							"break-outside",
-							"undefined-doc-class",
-							"unknown-symbol",
-							"miss-method",
-							"err-nonstandard-symbol",
-							"unknown-attribute",
-							"unexpect-efunc-name",
+							"cast-local-type",
+							"cast-type-mismatch",
+							"circle-doc-class",
+							"close-non-object",
+							"code-after-break",
+							"codestyle-check",
+							"count-down-loop",
+							"deprecated",
 							"different-requires",
-							"miss-end",
-							"await-in-sync",
-							"args-after-dots",
-							"err-eq-as-assign",
-							"newfield-call",
+							"discard-returns",
+							"doc-field-no-class",
+							"duplicate-doc-alias",
+							"duplicate-doc-field",
+							"duplicate-doc-param",
+							"duplicate-index",
+							"duplicate-set-field",
+							"empty-block",
 							"err-assign-as-eq",
-							"undefined-doc-param",
-							"param-type-mismatch",
+							"err-c-long-comment",
+							"err-comment-prefix",
+							"err-do-as-then",
+							"err-eq-as-assign",
+							"err-esc",
+							"err-nonstandard-symbol",
+							"err-then-as-do",
+							"exp-in-action",
 							"global-in-nil-env",
-							"missing-parameter",
-							"miss-sep-in-table",
-							"unknown-cast-variable",
-							"miss-loop-min",
+							"index-in-func-name",
+							"jump-local-scope",
+							"keyword",
+							"local-limit",
+							"lowercase-global",
 							"malformed-number",
-							"err-do-as-then",
-							"spell-check",
-							"undefined-env-child",
-							"missing-return-value",
-							"discard-returns",
-							"redundant-return",
+							"miss-end",
 							"miss-esc-x",
-							"redundant-value",
-							"duplicate-doc-alias",
-							"doc-field-no-class",
-							"no-visible-label",
 							"miss-exp",
+							"miss-exponent",
+							"miss-field",
 							"miss-loop-max",
+							"miss-loop-min",
+							"miss-method",
 							"miss-name",
-							"empty-block",
-							"unused-local",
-							"err-then-as-do",
-							"duplicate-doc-field",
-							"redefined-label",
-							"exp-in-action",
-							"set-const",
-							"circle-doc-class",
-							"unexpect-lfunc-name",
-							"unsupport-symbol",
-							"unused-label",
-							"action-after-return",
-							"unexpect-dots",
+							"miss-sep-in-table",
+							"miss-space-between",
+							"miss-symbol",
+							"missing-parameter",
+							"missing-return",
+							"missing-return-value",
+							"need-check-nil",
+							"newfield-call",
 							"newline-call",
-							"jump-local-scope",
-							"close-non-object",
-							"miss-field",
-							"count-down-loop",
-							"cast-type-mismatch",
-							"duplicate-index",
-							"unexpect-symbol",
-							"block-after-else",
-							"unicode-name",
-							"miss-exponent",
-							"err-esc",
+							"no-unknown",
+							"no-visible-label",
+							"not-yieldable",
+							"param-type-mismatch",
+							"redefined-label",
+							"redefined-local",
+							"redundant-parameter",
+							"redundant-return",
 							"redundant-return-value",
+							"redundant-value",
+							"return-type-mismatch",
+							"set-const",
+							"spell-check",
+							"trailing-space",
 							"unbalanced-assignments",
-							"err-c-long-comment",
+							"undefined-doc-class",
 							"undefined-doc-name",
-							"ambiguity-1",
-							"trailing-space",
-							"deprecated",
-							"codestyle-check",
-							"missing-return",
+							"undefined-doc-param",
+							"undefined-env-child",
+							"undefined-field",
 							"undefined-global",
-							"unused-function",
-							"code-after-break",
-							"assign-type-mismatch",
-							"local-limit",
-							"cast-local-type",
-							"need-check-nil",
-							"keyword",
+							"unexpect-dots",
+							"unexpect-efunc-name",
+							"unexpect-lfunc-name",
+							"unexpect-symbol",
+							"unicode-name",
+							"unknown-attribute",
+							"unknown-cast-variable",
 							"unknown-diag-code",
-							"unused-vararg",
-							"err-comment-prefix",
-							"lowercase-global",
-							"return-type-mismatch",
-							"duplicate-set-field",
-							"redefined-local",
-							"no-unknown",
-							"duplicate-doc-param",
-							"index-in-func-name",
-							"miss-symbol",
-							"undefined-field",
-							"miss-space-between"
+							"unknown-operator",
+							"unknown-symbol",
+							"unreachable-code",
+							"unsupport-symbol",
+							"unused-function",
+							"unused-label",
+							"unused-local",
+							"unused-vararg"
 						],
 						"type": "string"
 					},
@@ -1202,6 +1204,32 @@
 							],
 							"type": "string"
 						},
+						"unknown-operator": {
+							"default": "Any",
+							"description": "%config.diagnostics.unknown-operator%",
+							"enum": [
+								"Any",
+								"Opened",
+								"None",
+								"Any!",
+								"Opened!",
+								"None!"
+							],
+							"type": "string"
+						},
+						"unreachable-code": {
+							"default": "Opened",
+							"description": "%config.diagnostics.unreachable-code%",
+							"enum": [
+								"Any",
+								"Opened",
+								"None",
+								"Any!",
+								"Opened!",
+								"None!"
+							],
+							"type": "string"
+						},
 						"unused-function": {
 							"default": "Opened",
 							"description": "%config.diagnostics.unused-function%",
@@ -1983,6 +2011,36 @@
 							],
 							"type": "string"
 						},
+						"unknown-operator": {
+							"default": "Warning",
+							"description": "%config.diagnostics.unknown-operator%",
+							"enum": [
+								"Error",
+								"Warning",
+								"Information",
+								"Hint",
+								"Error!",
+								"Warning!",
+								"Information!",
+								"Hint!"
+							],
+							"type": "string"
+						},
+						"unreachable-code": {
+							"default": "Hint",
+							"description": "%config.diagnostics.unreachable-code%",
+							"enum": [
+								"Error",
+								"Warning",
+								"Information",
+								"Hint",
+								"Error!",
+								"Warning!",
+								"Information!",
+								"Hint!"
+							],
+							"type": "string"
+						},
 						"unused-function": {
 							"default": "Hint",
 							"description": "%config.diagnostics.unused-function%",
@@ -2048,6 +2106,15 @@
 					"title": "severity",
 					"type": "object"
 				},
+				"Lua.diagnostics.unusedLocalExclude": {
+					"default": [],
+					"items": {
+						"type": "string"
+					},
+					"markdownDescription": "%config.diagnostics.unusedLocalExclude%",
+					"scope": "resource",
+					"type": "array"
+				},
 				"Lua.diagnostics.workspaceDelay": {
 					"default": 3000,
 					"markdownDescription": "%config.diagnostics.workspaceDelay%",
@@ -2347,6 +2414,26 @@
 							],
 							"type": "string"
 						},
+						"table.clear": {
+							"default": "default",
+							"description": "%config.runtime.builtin.table.clear%",
+							"enum": [
+								"default",
+								"enable",
+								"disable"
+							],
+							"type": "string"
+						},
+						"table.new": {
+							"default": "default",
+							"description": "%config.runtime.builtin.table.new%",
+							"enum": [
+								"default",
+								"enable",
+								"disable"
+							],
+							"type": "string"
+						},
 						"utf8": {
 							"default": "default",
 							"description": "%config.runtime.builtin.utf8%",
@@ -2809,5 +2896,5 @@
 	"sponsor": {
 		"url": "https://github.com/sumneko/lua-language-server/issues/484"
 	},
-	"version": "3.4.2"
+	"version": "3.5.0"
 }
diff --git a/package.nls.json b/package.nls.json
index 4da06752a601ef952e9cecc725e6dc30b4d6d586..ed2d24506575875ff5e4eeb606a6c719e4855893 100644
--- a/package.nls.json
+++ b/package.nls.json
@@ -53,7 +53,7 @@
     "config.diagnostics.libraryFiles.Enable": "Always diagnose these files.",
     "config.diagnostics.libraryFiles.Opened": "Only when these files are opened will it be diagnosed.",
     "config.diagnostics.lowercase-global": "Enable lowercase global variable definition diagnostics.",
-    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
     "config.diagnostics.neededFileStatus": "* Opened:  only diagnose opened files\n* Any:     diagnose all files\n* None:    disable this diagnostic\n\nEnd with `!` means override the group setting `diagnostics.groupFileStatus`.\n",
     "config.diagnostics.newfield-call": "在字面量表中,2行代码之间缺少分隔符,在语法上被解析为了一次索引操作",
     "config.diagnostics.newline-call": "Enable newline call diagnostics. Is's raised when a line starting with `(` is encountered, which is syntactically parsed as a function call on the previous line.",
@@ -69,11 +69,12 @@
     "config.diagnostics.unbalanced": "* missing-parameter\n* missing-return\n* missing-return-value\n* redundant-parameter\n* redundant-return-value\n* redundant-value\n* unbalanced-assignments",
     "config.diagnostics.undefined-env-child": "Enable undefined environment variable diagnostics. It's raised when `_ENV` table is set to a new literal table, but the used global variable is no longer present in the global environment.",
     "config.diagnostics.undefined-global": "Enable undefined global variable diagnostics.",
-    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
     "config.diagnostics.unused-function": "Enable unused function diagnostics.",
     "config.diagnostics.unused-label": "Enable unused label diagnostics.",
     "config.diagnostics.unused-local": "Enable unused local variable diagnostics.",
     "config.diagnostics.unused-vararg": "Enable unused vararg diagnostics.",
+    "config.diagnostics.unusedLocalExclude": "Do not diagnose `unused-local` when the variable name matches the following pattern.",
     "config.diagnostics.workspaceDelay": "Latency (milliseconds) for workspace diagnostics. When you start the workspace, or edit any file, the entire workspace will be re-diagnosed in the background. Set to negative to disable workspace diagnostics.",
     "config.diagnostics.workspaceRate": "Workspace diagnostics run rate (%). Decreasing this value reduces CPU usage, but also reduces the speed of workspace diagnostics. The diagnosis of the file you are currently editing is always done at full speed and is not affected by this setting.",
     "config.format.defaultConfig": "The default format configuration. Has a lower priority than `.editorconfig` file in the workspace.\nRead [formatter docs](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs) to learn usage.\n",
diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json
index 1392720d355cc0fe1666c07112b863f5020b4c48..7d59e95912db5893dcf47b8b3ee19e08be764696 100644
--- a/package.nls.pt-br.json
+++ b/package.nls.pt-br.json
@@ -53,7 +53,7 @@
     "config.diagnostics.libraryFiles.Enable": "Always diagnose these files.",
     "config.diagnostics.libraryFiles.Opened": "Only when these files are opened will it be diagnosed.",
     "config.diagnostics.lowercase-global": "首字母小写的全局变量定义",
-    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
     "config.diagnostics.neededFileStatus": "* Opened:  only diagnose opened files\n* Any:     diagnose all files\n* None:    disable this diagnostic\n\nEnd with `!` means override the group setting `diagnostics.groupFileStatus`.\n",
     "config.diagnostics.newfield-call": "在字面量表中,2行代码之间缺少分隔符,在语法上被解析为了一次索引操作",
     "config.diagnostics.newline-call": "以 `(` 开始的新行,在语法上被解析为了上一行的函数调用",
@@ -69,11 +69,12 @@
     "config.diagnostics.unbalanced": "* missing-parameter\n* missing-return\n* missing-return-value\n* redundant-parameter\n* redundant-return-value\n* redundant-value\n* unbalanced-assignments",
     "config.diagnostics.undefined-env-child": "`_ENV` 被设置为了新的字面量表,但是试图获取的全局变量不再这张表中",
     "config.diagnostics.undefined-global": "未定义的全局变量",
-    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
     "config.diagnostics.unused-function": "未使用的函数",
     "config.diagnostics.unused-label": "未使用的标签",
     "config.diagnostics.unused-local": "未使用的局部变量",
     "config.diagnostics.unused-vararg": "未使用的不定参数",
+    "config.diagnostics.unusedLocalExclude": "Do not diagnose `unused-local` when the variable name matches the following pattern.",
     "config.diagnostics.workspaceDelay": "Latency (milliseconds) for workspace diagnostics. When you start the workspace, or edit any file, the entire workspace will be re-diagnosed in the background. Set to negative to disable workspace diagnostics.",
     "config.diagnostics.workspaceRate": "Workspace diagnostics run rate (%). Decreasing this value reduces CPU usage, but also reduces the speed of workspace diagnostics. The diagnosis of the file you are currently editing is always done at full speed and is not affected by this setting.",
     "config.format.defaultConfig": "The default format configuration. Has a lower priority than `.editorconfig` file in the workspace.\nRead [formatter docs](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs) to learn usage.\n",
diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json
index 9b7694f4b0c05cb463559403dc9e63c11c29f511..3d0fcb3a1e2b9517c15dcfa0ed427b03ec967e69 100644
--- a/package.nls.zh-cn.json
+++ b/package.nls.zh-cn.json
@@ -53,7 +53,7 @@
     "config.diagnostics.libraryFiles.Enable": "总是诊断这些文件。",
     "config.diagnostics.libraryFiles.Opened": "只有打开这些文件时才会诊断。",
     "config.diagnostics.lowercase-global": "首字母小写的全局变量定义",
-    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
     "config.diagnostics.neededFileStatus": "* Opened:  只诊断打开的文件\n* Any:     诊断任何文件\n* None:    禁用此诊断\n\n以 `!` 结尾的设置优先级高于组设置 `diagnostics.groupFileStatus`。\n",
     "config.diagnostics.newfield-call": "在字面量表中,2行代码之间缺少分隔符,在语法上被解析为了一次索引操作",
     "config.diagnostics.newline-call": "以 `(` 开始的新行,在语法上被解析为了上一行的函数调用",
@@ -69,11 +69,12 @@
     "config.diagnostics.unbalanced": "* missing-parameter\n* missing-return\n* missing-return-value\n* redundant-parameter\n* redundant-return-value\n* redundant-value\n* unbalanced-assignments",
     "config.diagnostics.undefined-env-child": "`_ENV` 被设置为了新的字面量表,但是试图获取的全局变量不再这张表中",
     "config.diagnostics.undefined-global": "未定义的全局变量",
-    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
     "config.diagnostics.unused-function": "未使用的函数",
     "config.diagnostics.unused-label": "未使用的标签",
     "config.diagnostics.unused-local": "未使用的局部变量",
     "config.diagnostics.unused-vararg": "未使用的不定参数",
+    "config.diagnostics.unusedLocalExclude": "如果变量名匹配以下规则,则不对其进行 `unused-local` 诊断。",
     "config.diagnostics.workspaceDelay": "进行工作区诊断的延迟(毫秒)。当你启动工作区,或编辑了任意文件后,将会在后台对整个工作区进行重新诊断。设置为负数可以禁用工作区诊断。",
     "config.diagnostics.workspaceRate": "工作区诊断的运行速率(百分比)。降低该值会减少CPU占用,但是也会降低工作区诊断的速度。你当前正在编辑的文件的诊断总是全速完成,不受该选项影响。",
     "config.format.defaultConfig": "默认的格式化配置,优先级低于工作区内的 `.editorconfig` 文件。\n请查阅[格式化文档](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs)了解用法。\n",
diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json
index 2568cd1029191a7b854c9bec42710d500da554b6..7ccc5016e562323bd8437467c46b083767b9ccd7 100644
--- a/package.nls.zh-tw.json
+++ b/package.nls.zh-tw.json
@@ -53,7 +53,7 @@
     "config.diagnostics.libraryFiles.Enable": "總是診斷這些檔案。",
     "config.diagnostics.libraryFiles.Opened": "只有打開這些檔案時才會診斷。",
     "config.diagnostics.lowercase-global": "首字母小寫的全域變數定義",
-    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+    "config.diagnostics.luadoc": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
     "config.diagnostics.neededFileStatus": "* Opened:  只診斷打開的檔案\n* Any:     診斷所有檔案\n* None:    停用此診斷\n\n以 `!` 結尾的設定優先順序高於組設定 `diagnostics.groupFileStatus`。\n",
     "config.diagnostics.newfield-call": "在字面常數表中,2行程式碼之間缺少分隔符,在語法上被解析為了一次索引操作",
     "config.diagnostics.newline-call": "以 `(` 開始的新行,在語法上被解析為了上一行的函式呼叫",
@@ -69,11 +69,12 @@
     "config.diagnostics.unbalanced": "* missing-parameter\n* missing-return\n* missing-return-value\n* redundant-parameter\n* redundant-return-value\n* redundant-value\n* unbalanced-assignments",
     "config.diagnostics.undefined-env-child": "`_ENV` 被設定為了新的字面常數表,但是試圖獲取的全域變數不在這張表中",
     "config.diagnostics.undefined-global": "未定義的全域變數",
-    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+    "config.diagnostics.unused": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
     "config.diagnostics.unused-function": "未使用的函式",
     "config.diagnostics.unused-label": "未使用的標籤",
     "config.diagnostics.unused-local": "未使用的區域變數",
     "config.diagnostics.unused-vararg": "未使用的不定引數",
+    "config.diagnostics.unusedLocalExclude": "Do not diagnose `unused-local` when the variable name matches the following pattern.",
     "config.diagnostics.workspaceDelay": "進行工作區診斷的延遲(毫秒)。當你啟動工作區,或編輯了任何檔案後,將會在背景對整個工作區進行重新診斷。設定為負數可以停用工作區診斷。",
     "config.diagnostics.workspaceRate": "工作區診斷的執行速率(百分比)。降低該值會減少CPU使用率,但是也會降低工作區診斷的速度。你目前正在編輯的檔案的診斷總是全速完成,不受該選項影響。",
     "config.format.defaultConfig": "預設的格式化組態,優先順序低於工作區內的 `.editorconfig` 檔案。\n請查閱[格式化文件](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs)了解用法。\n",
diff --git a/package/build.lua b/package/build.lua
index 842660f0aafabea57294868c0ec333aa2ec9b66b..daf97053d605a09afbbb0e70245962f2908ee000 100644
--- a/package/build.lua
+++ b/package/build.lua
@@ -1,6 +1,6 @@
 local json = require 'json-beautify'
 
-local VERSION = "3.4.2"
+local VERSION = "3.5.0"
 
 local package = require 'package.package'
 local fsu     = require 'fs-utility'
diff --git a/server b/server
index ffb9d5437ad78dbd392f72fd60b4c03f4cefb970..be85f2c855f9075cadae3219f4dc1f3ce1f920ca 160000
--- a/server
+++ b/server
@@ -1 +1 @@
-Subproject commit ffb9d5437ad78dbd392f72fd60b4c03f4cefb970
+Subproject commit be85f2c855f9075cadae3219f4dc1f3ce1f920ca
diff --git a/setting/schema-pt-br.json b/setting/schema-pt-br.json
index 794f59e52c76515ef58b27b9e76e18c5f6b95362..149150b78c2763d766565d074372fd78d8ddcaf0 100644
--- a/setting/schema-pt-br.json
+++ b/setting/schema-pt-br.json
@@ -157,6 +157,9 @@
                 "severity": {
                     "$ref": "#/properties/diagnostics.severity"
                 },
+                "unusedLocalExclude": {
+                    "$ref": "#/properties/diagnostics.unusedLocalExclude"
+                },
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
@@ -169,99 +172,101 @@
             "default": [],
             "items": {
                 "enum": [
-                    "not-yieldable",
-                    "redundant-parameter",
+                    "action-after-return",
+                    "ambiguity-1",
+                    "args-after-dots",
+                    "assign-type-mismatch",
+                    "await-in-sync",
+                    "block-after-else",
                     "break-outside",
-                    "undefined-doc-class",
-                    "unknown-symbol",
-                    "miss-method",
-                    "err-nonstandard-symbol",
-                    "unknown-attribute",
-                    "unexpect-efunc-name",
+                    "cast-local-type",
+                    "cast-type-mismatch",
+                    "circle-doc-class",
+                    "close-non-object",
+                    "code-after-break",
+                    "codestyle-check",
+                    "count-down-loop",
+                    "deprecated",
                     "different-requires",
-                    "miss-end",
-                    "await-in-sync",
-                    "args-after-dots",
-                    "err-eq-as-assign",
-                    "newfield-call",
+                    "discard-returns",
+                    "doc-field-no-class",
+                    "duplicate-doc-alias",
+                    "duplicate-doc-field",
+                    "duplicate-doc-param",
+                    "duplicate-index",
+                    "duplicate-set-field",
+                    "empty-block",
                     "err-assign-as-eq",
-                    "undefined-doc-param",
-                    "param-type-mismatch",
+                    "err-c-long-comment",
+                    "err-comment-prefix",
+                    "err-do-as-then",
+                    "err-eq-as-assign",
+                    "err-esc",
+                    "err-nonstandard-symbol",
+                    "err-then-as-do",
+                    "exp-in-action",
                     "global-in-nil-env",
-                    "missing-parameter",
-                    "miss-sep-in-table",
-                    "unknown-cast-variable",
-                    "miss-loop-min",
+                    "index-in-func-name",
+                    "jump-local-scope",
+                    "keyword",
+                    "local-limit",
+                    "lowercase-global",
                     "malformed-number",
-                    "err-do-as-then",
-                    "spell-check",
-                    "undefined-env-child",
-                    "missing-return-value",
-                    "discard-returns",
-                    "redundant-return",
+                    "miss-end",
                     "miss-esc-x",
-                    "redundant-value",
-                    "duplicate-doc-alias",
-                    "doc-field-no-class",
-                    "no-visible-label",
                     "miss-exp",
+                    "miss-exponent",
+                    "miss-field",
                     "miss-loop-max",
+                    "miss-loop-min",
+                    "miss-method",
                     "miss-name",
-                    "empty-block",
-                    "unused-local",
-                    "err-then-as-do",
-                    "duplicate-doc-field",
-                    "redefined-label",
-                    "exp-in-action",
-                    "set-const",
-                    "circle-doc-class",
-                    "unexpect-lfunc-name",
-                    "unsupport-symbol",
-                    "unused-label",
-                    "action-after-return",
-                    "unexpect-dots",
+                    "miss-sep-in-table",
+                    "miss-space-between",
+                    "miss-symbol",
+                    "missing-parameter",
+                    "missing-return",
+                    "missing-return-value",
+                    "need-check-nil",
+                    "newfield-call",
                     "newline-call",
-                    "jump-local-scope",
-                    "close-non-object",
-                    "miss-field",
-                    "count-down-loop",
-                    "cast-type-mismatch",
-                    "duplicate-index",
-                    "unexpect-symbol",
-                    "block-after-else",
-                    "unicode-name",
-                    "miss-exponent",
-                    "err-esc",
+                    "no-unknown",
+                    "no-visible-label",
+                    "not-yieldable",
+                    "param-type-mismatch",
+                    "redefined-label",
+                    "redefined-local",
+                    "redundant-parameter",
+                    "redundant-return",
                     "redundant-return-value",
+                    "redundant-value",
+                    "return-type-mismatch",
+                    "set-const",
+                    "spell-check",
+                    "trailing-space",
                     "unbalanced-assignments",
-                    "err-c-long-comment",
+                    "undefined-doc-class",
                     "undefined-doc-name",
-                    "ambiguity-1",
-                    "trailing-space",
-                    "deprecated",
-                    "codestyle-check",
-                    "missing-return",
+                    "undefined-doc-param",
+                    "undefined-env-child",
+                    "undefined-field",
                     "undefined-global",
-                    "unused-function",
-                    "code-after-break",
-                    "assign-type-mismatch",
-                    "local-limit",
-                    "cast-local-type",
-                    "need-check-nil",
-                    "keyword",
+                    "unexpect-dots",
+                    "unexpect-efunc-name",
+                    "unexpect-lfunc-name",
+                    "unexpect-symbol",
+                    "unicode-name",
+                    "unknown-attribute",
+                    "unknown-cast-variable",
                     "unknown-diag-code",
-                    "unused-vararg",
-                    "err-comment-prefix",
-                    "lowercase-global",
-                    "return-type-mismatch",
-                    "duplicate-set-field",
-                    "redefined-local",
-                    "no-unknown",
-                    "duplicate-doc-param",
-                    "index-in-func-name",
-                    "miss-symbol",
-                    "undefined-field",
-                    "miss-space-between"
+                    "unknown-operator",
+                    "unknown-symbol",
+                    "unreachable-code",
+                    "unsupport-symbol",
+                    "unused-function",
+                    "unused-label",
+                    "unused-local",
+                    "unused-vararg"
                 ],
                 "type": "string"
             },
@@ -356,7 +361,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Any",
                         "Opened",
@@ -422,7 +427,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Any",
                         "Opened",
@@ -502,7 +507,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Error",
                         "Warning",
@@ -574,7 +579,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Error",
                         "Warning",
@@ -1249,6 +1254,32 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Opened",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Opened",
                     "description": "未使用的函数",
@@ -2030,6 +2061,36 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Hint",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Hint",
                     "description": "未使用的函数",
@@ -2095,6 +2156,15 @@
             "title": "severity",
             "type": "object"
         },
+        "diagnostics.unusedLocalExclude": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Do not diagnose `unused-local` when the variable name matches the following pattern.",
+            "scope": "resource",
+            "type": "array"
+        },
         "diagnostics.workspaceDelay": {
             "default": 3000,
             "markdownDescription": "Latency (milliseconds) for workspace diagnostics. When you start the workspace, or edit any file, the entire workspace will be re-diagnosed in the background. Set to negative to disable workspace diagnostics.",
@@ -2495,6 +2565,26 @@
                     ],
                     "type": "string"
                 },
+                "table.clear": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.clear%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
+                "table.new": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.new%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "utf8": {
                     "default": "default",
                     "description": "%config.runtime.builtin.utf8%",
diff --git a/setting/schema-zh-cn.json b/setting/schema-zh-cn.json
index be0a10c6e05a3effaf63a95d97e0004137b8ab35..705a2f28f15b7f7a8a4ce74f543ef5bee611a955 100644
--- a/setting/schema-zh-cn.json
+++ b/setting/schema-zh-cn.json
@@ -157,6 +157,9 @@
                 "severity": {
                     "$ref": "#/properties/diagnostics.severity"
                 },
+                "unusedLocalExclude": {
+                    "$ref": "#/properties/diagnostics.unusedLocalExclude"
+                },
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
@@ -169,99 +172,101 @@
             "default": [],
             "items": {
                 "enum": [
-                    "not-yieldable",
-                    "redundant-parameter",
+                    "action-after-return",
+                    "ambiguity-1",
+                    "args-after-dots",
+                    "assign-type-mismatch",
+                    "await-in-sync",
+                    "block-after-else",
                     "break-outside",
-                    "undefined-doc-class",
-                    "unknown-symbol",
-                    "miss-method",
-                    "err-nonstandard-symbol",
-                    "unknown-attribute",
-                    "unexpect-efunc-name",
+                    "cast-local-type",
+                    "cast-type-mismatch",
+                    "circle-doc-class",
+                    "close-non-object",
+                    "code-after-break",
+                    "codestyle-check",
+                    "count-down-loop",
+                    "deprecated",
                     "different-requires",
-                    "miss-end",
-                    "await-in-sync",
-                    "args-after-dots",
-                    "err-eq-as-assign",
-                    "newfield-call",
+                    "discard-returns",
+                    "doc-field-no-class",
+                    "duplicate-doc-alias",
+                    "duplicate-doc-field",
+                    "duplicate-doc-param",
+                    "duplicate-index",
+                    "duplicate-set-field",
+                    "empty-block",
                     "err-assign-as-eq",
-                    "undefined-doc-param",
-                    "param-type-mismatch",
+                    "err-c-long-comment",
+                    "err-comment-prefix",
+                    "err-do-as-then",
+                    "err-eq-as-assign",
+                    "err-esc",
+                    "err-nonstandard-symbol",
+                    "err-then-as-do",
+                    "exp-in-action",
                     "global-in-nil-env",
-                    "missing-parameter",
-                    "miss-sep-in-table",
-                    "unknown-cast-variable",
-                    "miss-loop-min",
+                    "index-in-func-name",
+                    "jump-local-scope",
+                    "keyword",
+                    "local-limit",
+                    "lowercase-global",
                     "malformed-number",
-                    "err-do-as-then",
-                    "spell-check",
-                    "undefined-env-child",
-                    "missing-return-value",
-                    "discard-returns",
-                    "redundant-return",
+                    "miss-end",
                     "miss-esc-x",
-                    "redundant-value",
-                    "duplicate-doc-alias",
-                    "doc-field-no-class",
-                    "no-visible-label",
                     "miss-exp",
+                    "miss-exponent",
+                    "miss-field",
                     "miss-loop-max",
+                    "miss-loop-min",
+                    "miss-method",
                     "miss-name",
-                    "empty-block",
-                    "unused-local",
-                    "err-then-as-do",
-                    "duplicate-doc-field",
-                    "redefined-label",
-                    "exp-in-action",
-                    "set-const",
-                    "circle-doc-class",
-                    "unexpect-lfunc-name",
-                    "unsupport-symbol",
-                    "unused-label",
-                    "action-after-return",
-                    "unexpect-dots",
+                    "miss-sep-in-table",
+                    "miss-space-between",
+                    "miss-symbol",
+                    "missing-parameter",
+                    "missing-return",
+                    "missing-return-value",
+                    "need-check-nil",
+                    "newfield-call",
                     "newline-call",
-                    "jump-local-scope",
-                    "close-non-object",
-                    "miss-field",
-                    "count-down-loop",
-                    "cast-type-mismatch",
-                    "duplicate-index",
-                    "unexpect-symbol",
-                    "block-after-else",
-                    "unicode-name",
-                    "miss-exponent",
-                    "err-esc",
+                    "no-unknown",
+                    "no-visible-label",
+                    "not-yieldable",
+                    "param-type-mismatch",
+                    "redefined-label",
+                    "redefined-local",
+                    "redundant-parameter",
+                    "redundant-return",
                     "redundant-return-value",
+                    "redundant-value",
+                    "return-type-mismatch",
+                    "set-const",
+                    "spell-check",
+                    "trailing-space",
                     "unbalanced-assignments",
-                    "err-c-long-comment",
+                    "undefined-doc-class",
                     "undefined-doc-name",
-                    "ambiguity-1",
-                    "trailing-space",
-                    "deprecated",
-                    "codestyle-check",
-                    "missing-return",
+                    "undefined-doc-param",
+                    "undefined-env-child",
+                    "undefined-field",
                     "undefined-global",
-                    "unused-function",
-                    "code-after-break",
-                    "assign-type-mismatch",
-                    "local-limit",
-                    "cast-local-type",
-                    "need-check-nil",
-                    "keyword",
+                    "unexpect-dots",
+                    "unexpect-efunc-name",
+                    "unexpect-lfunc-name",
+                    "unexpect-symbol",
+                    "unicode-name",
+                    "unknown-attribute",
+                    "unknown-cast-variable",
                     "unknown-diag-code",
-                    "unused-vararg",
-                    "err-comment-prefix",
-                    "lowercase-global",
-                    "return-type-mismatch",
-                    "duplicate-set-field",
-                    "redefined-local",
-                    "no-unknown",
-                    "duplicate-doc-param",
-                    "index-in-func-name",
-                    "miss-symbol",
-                    "undefined-field",
-                    "miss-space-between"
+                    "unknown-operator",
+                    "unknown-symbol",
+                    "unreachable-code",
+                    "unsupport-symbol",
+                    "unused-function",
+                    "unused-label",
+                    "unused-local",
+                    "unused-vararg"
                 ],
                 "type": "string"
             },
@@ -356,7 +361,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Any",
                         "Opened",
@@ -422,7 +427,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Any",
                         "Opened",
@@ -502,7 +507,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Error",
                         "Warning",
@@ -574,7 +579,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Error",
                         "Warning",
@@ -1249,6 +1254,32 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Opened",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Opened",
                     "description": "未使用的函数",
@@ -2030,6 +2061,36 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Hint",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Hint",
                     "description": "未使用的函数",
@@ -2095,6 +2156,15 @@
             "title": "severity",
             "type": "object"
         },
+        "diagnostics.unusedLocalExclude": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "如果变量名匹配以下规则,则不对其进行 `unused-local` 诊断。",
+            "scope": "resource",
+            "type": "array"
+        },
         "diagnostics.workspaceDelay": {
             "default": 3000,
             "markdownDescription": "进行工作区诊断的延迟(毫秒)。当你启动工作区,或编辑了任意文件后,将会在后台对整个工作区进行重新诊断。设置为负数可以禁用工作区诊断。",
@@ -2495,6 +2565,26 @@
                     ],
                     "type": "string"
                 },
+                "table.clear": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.clear%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
+                "table.new": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.new%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "utf8": {
                     "default": "default",
                     "description": "%config.runtime.builtin.utf8%",
diff --git a/setting/schema-zh-tw.json b/setting/schema-zh-tw.json
index fc21e9f0daf2425414b1945fd9f7e959250c7149..3a8192a22e42b34c1a13ee100f44c06d147f8ce8 100644
--- a/setting/schema-zh-tw.json
+++ b/setting/schema-zh-tw.json
@@ -157,6 +157,9 @@
                 "severity": {
                     "$ref": "#/properties/diagnostics.severity"
                 },
+                "unusedLocalExclude": {
+                    "$ref": "#/properties/diagnostics.unusedLocalExclude"
+                },
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
@@ -169,99 +172,101 @@
             "default": [],
             "items": {
                 "enum": [
-                    "not-yieldable",
-                    "redundant-parameter",
+                    "action-after-return",
+                    "ambiguity-1",
+                    "args-after-dots",
+                    "assign-type-mismatch",
+                    "await-in-sync",
+                    "block-after-else",
                     "break-outside",
-                    "undefined-doc-class",
-                    "unknown-symbol",
-                    "miss-method",
-                    "err-nonstandard-symbol",
-                    "unknown-attribute",
-                    "unexpect-efunc-name",
+                    "cast-local-type",
+                    "cast-type-mismatch",
+                    "circle-doc-class",
+                    "close-non-object",
+                    "code-after-break",
+                    "codestyle-check",
+                    "count-down-loop",
+                    "deprecated",
                     "different-requires",
-                    "miss-end",
-                    "await-in-sync",
-                    "args-after-dots",
-                    "err-eq-as-assign",
-                    "newfield-call",
+                    "discard-returns",
+                    "doc-field-no-class",
+                    "duplicate-doc-alias",
+                    "duplicate-doc-field",
+                    "duplicate-doc-param",
+                    "duplicate-index",
+                    "duplicate-set-field",
+                    "empty-block",
                     "err-assign-as-eq",
-                    "undefined-doc-param",
-                    "param-type-mismatch",
+                    "err-c-long-comment",
+                    "err-comment-prefix",
+                    "err-do-as-then",
+                    "err-eq-as-assign",
+                    "err-esc",
+                    "err-nonstandard-symbol",
+                    "err-then-as-do",
+                    "exp-in-action",
                     "global-in-nil-env",
-                    "missing-parameter",
-                    "miss-sep-in-table",
-                    "unknown-cast-variable",
-                    "miss-loop-min",
+                    "index-in-func-name",
+                    "jump-local-scope",
+                    "keyword",
+                    "local-limit",
+                    "lowercase-global",
                     "malformed-number",
-                    "err-do-as-then",
-                    "spell-check",
-                    "undefined-env-child",
-                    "missing-return-value",
-                    "discard-returns",
-                    "redundant-return",
+                    "miss-end",
                     "miss-esc-x",
-                    "redundant-value",
-                    "duplicate-doc-alias",
-                    "doc-field-no-class",
-                    "no-visible-label",
                     "miss-exp",
+                    "miss-exponent",
+                    "miss-field",
                     "miss-loop-max",
+                    "miss-loop-min",
+                    "miss-method",
                     "miss-name",
-                    "empty-block",
-                    "unused-local",
-                    "err-then-as-do",
-                    "duplicate-doc-field",
-                    "redefined-label",
-                    "exp-in-action",
-                    "set-const",
-                    "circle-doc-class",
-                    "unexpect-lfunc-name",
-                    "unsupport-symbol",
-                    "unused-label",
-                    "action-after-return",
-                    "unexpect-dots",
+                    "miss-sep-in-table",
+                    "miss-space-between",
+                    "miss-symbol",
+                    "missing-parameter",
+                    "missing-return",
+                    "missing-return-value",
+                    "need-check-nil",
+                    "newfield-call",
                     "newline-call",
-                    "jump-local-scope",
-                    "close-non-object",
-                    "miss-field",
-                    "count-down-loop",
-                    "cast-type-mismatch",
-                    "duplicate-index",
-                    "unexpect-symbol",
-                    "block-after-else",
-                    "unicode-name",
-                    "miss-exponent",
-                    "err-esc",
+                    "no-unknown",
+                    "no-visible-label",
+                    "not-yieldable",
+                    "param-type-mismatch",
+                    "redefined-label",
+                    "redefined-local",
+                    "redundant-parameter",
+                    "redundant-return",
                     "redundant-return-value",
+                    "redundant-value",
+                    "return-type-mismatch",
+                    "set-const",
+                    "spell-check",
+                    "trailing-space",
                     "unbalanced-assignments",
-                    "err-c-long-comment",
+                    "undefined-doc-class",
                     "undefined-doc-name",
-                    "ambiguity-1",
-                    "trailing-space",
-                    "deprecated",
-                    "codestyle-check",
-                    "missing-return",
+                    "undefined-doc-param",
+                    "undefined-env-child",
+                    "undefined-field",
                     "undefined-global",
-                    "unused-function",
-                    "code-after-break",
-                    "assign-type-mismatch",
-                    "local-limit",
-                    "cast-local-type",
-                    "need-check-nil",
-                    "keyword",
+                    "unexpect-dots",
+                    "unexpect-efunc-name",
+                    "unexpect-lfunc-name",
+                    "unexpect-symbol",
+                    "unicode-name",
+                    "unknown-attribute",
+                    "unknown-cast-variable",
                     "unknown-diag-code",
-                    "unused-vararg",
-                    "err-comment-prefix",
-                    "lowercase-global",
-                    "return-type-mismatch",
-                    "duplicate-set-field",
-                    "redefined-local",
-                    "no-unknown",
-                    "duplicate-doc-param",
-                    "index-in-func-name",
-                    "miss-symbol",
-                    "undefined-field",
-                    "miss-space-between"
+                    "unknown-operator",
+                    "unknown-symbol",
+                    "unreachable-code",
+                    "unsupport-symbol",
+                    "unused-function",
+                    "unused-label",
+                    "unused-local",
+                    "unused-vararg"
                 ],
                 "type": "string"
             },
@@ -356,7 +361,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Any",
                         "Opened",
@@ -422,7 +427,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Any",
                         "Opened",
@@ -502,7 +507,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Error",
                         "Warning",
@@ -574,7 +579,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Error",
                         "Warning",
@@ -1249,6 +1254,32 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Opened",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Opened",
                     "description": "未使用的函式",
@@ -2030,6 +2061,36 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Hint",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Hint",
                     "description": "未使用的函式",
@@ -2095,6 +2156,15 @@
             "title": "severity",
             "type": "object"
         },
+        "diagnostics.unusedLocalExclude": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Do not diagnose `unused-local` when the variable name matches the following pattern.",
+            "scope": "resource",
+            "type": "array"
+        },
         "diagnostics.workspaceDelay": {
             "default": 3000,
             "markdownDescription": "進行工作區診斷的延遲(毫秒)。當你啟動工作區,或編輯了任何檔案後,將會在背景對整個工作區進行重新診斷。設定為負數可以停用工作區診斷。",
@@ -2495,6 +2565,26 @@
                     ],
                     "type": "string"
                 },
+                "table.clear": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.clear%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
+                "table.new": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.new%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "utf8": {
                     "default": "default",
                     "description": "%config.runtime.builtin.utf8%",
diff --git a/setting/schema.json b/setting/schema.json
index c2799a8309f6a0bc0f5aee14a086ece7de2f2825..2f160b04ebe3ab86569a2369980a7f3e78e50987 100644
--- a/setting/schema.json
+++ b/setting/schema.json
@@ -157,6 +157,9 @@
                 "severity": {
                     "$ref": "#/properties/diagnostics.severity"
                 },
+                "unusedLocalExclude": {
+                    "$ref": "#/properties/diagnostics.unusedLocalExclude"
+                },
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
@@ -169,99 +172,101 @@
             "default": [],
             "items": {
                 "enum": [
-                    "not-yieldable",
-                    "redundant-parameter",
+                    "action-after-return",
+                    "ambiguity-1",
+                    "args-after-dots",
+                    "assign-type-mismatch",
+                    "await-in-sync",
+                    "block-after-else",
                     "break-outside",
-                    "undefined-doc-class",
-                    "unknown-symbol",
-                    "miss-method",
-                    "err-nonstandard-symbol",
-                    "unknown-attribute",
-                    "unexpect-efunc-name",
+                    "cast-local-type",
+                    "cast-type-mismatch",
+                    "circle-doc-class",
+                    "close-non-object",
+                    "code-after-break",
+                    "codestyle-check",
+                    "count-down-loop",
+                    "deprecated",
                     "different-requires",
-                    "miss-end",
-                    "await-in-sync",
-                    "args-after-dots",
-                    "err-eq-as-assign",
-                    "newfield-call",
+                    "discard-returns",
+                    "doc-field-no-class",
+                    "duplicate-doc-alias",
+                    "duplicate-doc-field",
+                    "duplicate-doc-param",
+                    "duplicate-index",
+                    "duplicate-set-field",
+                    "empty-block",
                     "err-assign-as-eq",
-                    "undefined-doc-param",
-                    "param-type-mismatch",
+                    "err-c-long-comment",
+                    "err-comment-prefix",
+                    "err-do-as-then",
+                    "err-eq-as-assign",
+                    "err-esc",
+                    "err-nonstandard-symbol",
+                    "err-then-as-do",
+                    "exp-in-action",
                     "global-in-nil-env",
-                    "missing-parameter",
-                    "miss-sep-in-table",
-                    "unknown-cast-variable",
-                    "miss-loop-min",
+                    "index-in-func-name",
+                    "jump-local-scope",
+                    "keyword",
+                    "local-limit",
+                    "lowercase-global",
                     "malformed-number",
-                    "err-do-as-then",
-                    "spell-check",
-                    "undefined-env-child",
-                    "missing-return-value",
-                    "discard-returns",
-                    "redundant-return",
+                    "miss-end",
                     "miss-esc-x",
-                    "redundant-value",
-                    "duplicate-doc-alias",
-                    "doc-field-no-class",
-                    "no-visible-label",
                     "miss-exp",
+                    "miss-exponent",
+                    "miss-field",
                     "miss-loop-max",
+                    "miss-loop-min",
+                    "miss-method",
                     "miss-name",
-                    "empty-block",
-                    "unused-local",
-                    "err-then-as-do",
-                    "duplicate-doc-field",
-                    "redefined-label",
-                    "exp-in-action",
-                    "set-const",
-                    "circle-doc-class",
-                    "unexpect-lfunc-name",
-                    "unsupport-symbol",
-                    "unused-label",
-                    "action-after-return",
-                    "unexpect-dots",
+                    "miss-sep-in-table",
+                    "miss-space-between",
+                    "miss-symbol",
+                    "missing-parameter",
+                    "missing-return",
+                    "missing-return-value",
+                    "need-check-nil",
+                    "newfield-call",
                     "newline-call",
-                    "jump-local-scope",
-                    "close-non-object",
-                    "miss-field",
-                    "count-down-loop",
-                    "cast-type-mismatch",
-                    "duplicate-index",
-                    "unexpect-symbol",
-                    "block-after-else",
-                    "unicode-name",
-                    "miss-exponent",
-                    "err-esc",
+                    "no-unknown",
+                    "no-visible-label",
+                    "not-yieldable",
+                    "param-type-mismatch",
+                    "redefined-label",
+                    "redefined-local",
+                    "redundant-parameter",
+                    "redundant-return",
                     "redundant-return-value",
+                    "redundant-value",
+                    "return-type-mismatch",
+                    "set-const",
+                    "spell-check",
+                    "trailing-space",
                     "unbalanced-assignments",
-                    "err-c-long-comment",
+                    "undefined-doc-class",
                     "undefined-doc-name",
-                    "ambiguity-1",
-                    "trailing-space",
-                    "deprecated",
-                    "codestyle-check",
-                    "missing-return",
+                    "undefined-doc-param",
+                    "undefined-env-child",
+                    "undefined-field",
                     "undefined-global",
-                    "unused-function",
-                    "code-after-break",
-                    "assign-type-mismatch",
-                    "local-limit",
-                    "cast-local-type",
-                    "need-check-nil",
-                    "keyword",
+                    "unexpect-dots",
+                    "unexpect-efunc-name",
+                    "unexpect-lfunc-name",
+                    "unexpect-symbol",
+                    "unicode-name",
+                    "unknown-attribute",
+                    "unknown-cast-variable",
                     "unknown-diag-code",
-                    "unused-vararg",
-                    "err-comment-prefix",
-                    "lowercase-global",
-                    "return-type-mismatch",
-                    "duplicate-set-field",
-                    "redefined-local",
-                    "no-unknown",
-                    "duplicate-doc-param",
-                    "index-in-func-name",
-                    "miss-symbol",
-                    "undefined-field",
-                    "miss-space-between"
+                    "unknown-operator",
+                    "unknown-symbol",
+                    "unreachable-code",
+                    "unsupport-symbol",
+                    "unused-function",
+                    "unused-label",
+                    "unused-local",
+                    "unused-vararg"
                 ],
                 "type": "string"
             },
@@ -356,7 +361,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Any",
                         "Opened",
@@ -422,7 +427,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Any",
                         "Opened",
@@ -502,7 +507,7 @@
                 },
                 "luadoc": {
                     "default": "Fallback",
-                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code",
+                    "description": "* cast-type-mismatch\n* circle-doc-class\n* doc-field-no-class\n* duplicate-doc-alias\n* duplicate-doc-field\n* duplicate-doc-param\n* undefined-doc-class\n* undefined-doc-name\n* undefined-doc-param\n* unknown-cast-variable\n* unknown-diag-code\n* unknown-operator",
                     "enum": [
                         "Error",
                         "Warning",
@@ -574,7 +579,7 @@
                 },
                 "unused": {
                     "default": "Fallback",
-                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
+                    "description": "* code-after-break\n* empty-block\n* redundant-return\n* trailing-space\n* unreachable-code\n* unused-function\n* unused-label\n* unused-local\n* unused-vararg",
                     "enum": [
                         "Error",
                         "Warning",
@@ -1249,6 +1254,32 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Opened",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Opened",
                     "description": "Enable unused function diagnostics.",
@@ -2030,6 +2061,36 @@
                     ],
                     "type": "string"
                 },
+                "unknown-operator": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.unknown-operator%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
+                "unreachable-code": {
+                    "default": "Hint",
+                    "description": "%config.diagnostics.unreachable-code%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "unused-function": {
                     "default": "Hint",
                     "description": "Enable unused function diagnostics.",
@@ -2095,6 +2156,15 @@
             "title": "severity",
             "type": "object"
         },
+        "diagnostics.unusedLocalExclude": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Do not diagnose `unused-local` when the variable name matches the following pattern.",
+            "scope": "resource",
+            "type": "array"
+        },
         "diagnostics.workspaceDelay": {
             "default": 3000,
             "markdownDescription": "Latency (milliseconds) for workspace diagnostics. When you start the workspace, or edit any file, the entire workspace will be re-diagnosed in the background. Set to negative to disable workspace diagnostics.",
@@ -2495,6 +2565,26 @@
                     ],
                     "type": "string"
                 },
+                "table.clear": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.clear%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
+                "table.new": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.table.new%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "utf8": {
                     "default": "default",
                     "description": "%config.runtime.builtin.utf8%",