diff --git a/changelog.md b/changelog.md
index 802f7d35b70f4732c5d626a0204684b6e1053104..6baedd8a64a3ece0ce652e4fcffbd873e36d5e73 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,200 @@
 # changelog
 
+## 3.6.0
+* `NEW` supports `private`/`protected`/`public`/`package`
+  * mark in `doc.field`
+    ```lua
+    ---@class unit
+    ---@field private uuid integer
+    ```
+  * mark with `---@private`, `---@protected`, `---@public` and `---@package`
+    ```lua
+    ---@class unit
+    local mt = {}
+
+    ---@private
+    function mt:init()
+    end
+
+    ---@protected
+    function mt:update()
+    end
+    ```
+  * mark by settings `Lua.doc.privateName`, `Lua.doc.protectedName` and `Lua.doc.packageName`
+    ```lua
+    ---@class unit
+    ---@field _uuid integer --> treat as private when `Lua.doc.privateName` has `"_*"`
+    ```
+* `NEW` settings:
+  * `Lua.misc.executablePath`: [#1557] specify the executable path in VSCode
+  * `Lua.diagnostics.workspaceEvent`: [#1626] set the time to trigger workspace diagnostics.
+  * `Lua.doc.privateName`: treat matched fields as private
+  * `Lua.doc.protectedName`: treat matched fields as protected
+  * `Lua.doc.packageName`: treat matched fields as package
+* `NEW` CLI `--doc [path]` to make docs.  
+server will generate `doc.json` and `doc.md` in `LOGPATH`.  
+`doc.md` is generated by `doc.json` by example code `script/cli/doc2md.lua`.
+* `CHG` [#1558] detect multi libraries
+* `CHG` [#1458] `semantic-tokens`: global variable is setted to `variable.global`
+  ```jsonc
+  // color global variables to red
+  "editor.semanticTokenColorCustomizations": {
+      "rules": {
+          "variable.global": "#ff0000"
+      }
+  }
+  ```
+* `CHG` [#1177] re-support for symlinks, users need to maintain the correctness of symlinks themselves
+* `CHG` [#1561] infer definitions and types across chain expression
+  ```lua
+  ---@class myClass
+  local myClass = {}
+
+  myClass.a.b.c.e.f.g = 1
+
+  ---@type myClass
+  local class
+
+  print(class.a.b.c.e.f.g) --> inferred as integer
+  ```
+* `CHG` [#1582] the following diagnostics consider `overload`
+  * `missing-return`
+  * `missing-return-value`
+  * `redundant-return-value`
+  * `return-type-mismatch`
+* `CHG` workspace-symbol: supports chain fields based on global variables and types. try `io.open` or `iolib.open`
+* `CHG` [#1641] if a function only has varargs and has `---@overload`, the varargs will be ignored
+* `CHG` [#1575] search definitions by first argument of `setmetatable`
+  ```lua
+  ---@class Object
+  local obj = setmetatable({
+    initValue = 1,
+  }, mt)
+
+  print(obj.initValue) --> `obj.initValue` is integer
+  ```
+* `CHG` [#1153] infer type by generic parameters or returns of function
+  ```lua
+  ---@generic T
+  ---@param f fun(x: T)
+  ---@return T[]
+  local function x(f) end
+
+  ---@type fun(x: integer)
+  local cb
+
+  local arr = x(cb) --> `arr` is inferred as `integer[]`
+  ```
+* `CHG` [#1201] infer parameter type by expected returned function of parent function
+  ```lua
+  ---@return fun(x: integer)
+  local function f()
+      return function (x) --> `x` is inferred as `integer`
+      end
+  end
+  ```
+* `CHG` [#1332] infer parameter type when function in table
+  ```lua
+  ---@class A
+  ---@field f fun(x: string)
+
+  ---@type A
+  local t = {
+      f = function (x) end --> `x` is inferred as `string`
+  }
+  ```
+* `CHG` find reference: respect `includeDeclaration` (although I don't know how to turn off this option in VSCode)
+* `CHG` [#1344] improve `---@see`
+* `CHG` [#1484] setting `runtime.special` supports fields
+  ```jsonc
+  {
+    "runtime.special": {
+      "sandbox.require": "require"
+    }
+  }
+  ```
+* `CHG` [#1533] supports completion with table field of function
+* `CHG` [#1457] infer parameter type by function type
+  ```lua
+  ---@type fun(x: number)
+  local function f(x) --> `x` is inferred as `number`
+  end
+  ```
+* `CHG` [#1663] check parameter types of generic extends
+  ```lua
+  ---@generic T: string | boolean
+  ---@param x T
+  ---@return T
+  local function f(x)
+      return x
+  end
+
+  local x = f(1) --> Warning: Cannot assign `integer` to parameter `<T:boolean|string>`.
+  ```
+* `CHG` [#1434] type check: check the fields in table:
+  ```lua
+  ---@type table<string, string>
+  local x
+
+  ---@type table<string, number>
+  local y
+
+  x = y --> Warning: Cannot assign `<string, number>` to `<string, string>`
+  ```
+* `CHG` [#1374] type check: supports array part in literal table
+  ```lua
+  ---@type boolean[]
+  local t = { 1, 2, 3 } --> Warning: Cannot assign `integer` to `boolean`
+  ```
+* `CHG` `---@enum` supports runtime values
+* `FIX` [#1479]
+* `FIX` [#1480]
+* `FIX` [#1567]
+* `FIX` [#1593]
+* `FIX` [#1595]
+* `FIX` [#1599]
+* `FIX` [#1606]
+* `FIX` [#1608]
+* `FIX` [#1637]
+* `FIX` [#1640]
+* `FIX` [#1642]
+* `FIX` [#1662]
+* `FIX` [#1672]
+
+[#1153]: https://github.com/sumneko/lua-language-server/issues/1153
+[#1177]: https://github.com/sumneko/lua-language-server/issues/1177
+[#1202]: https://github.com/sumneko/lua-language-server/issues/1202
+[#1332]: https://github.com/sumneko/lua-language-server/issues/1332
+[#1344]: https://github.com/sumneko/lua-language-server/issues/1344
+[#1374]: https://github.com/sumneko/lua-language-server/issues/1374
+[#1434]: https://github.com/sumneko/lua-language-server/issues/1434
+[#1457]: https://github.com/sumneko/lua-language-server/issues/1457
+[#1458]: https://github.com/sumneko/lua-language-server/issues/1458
+[#1479]: https://github.com/sumneko/lua-language-server/issues/1479
+[#1480]: https://github.com/sumneko/lua-language-server/issues/1480
+[#1484]: https://github.com/sumneko/lua-language-server/issues/1484
+[#1533]: https://github.com/sumneko/lua-language-server/issues/1533
+[#1557]: https://github.com/sumneko/lua-language-server/issues/1557
+[#1558]: https://github.com/sumneko/lua-language-server/issues/1558
+[#1561]: https://github.com/sumneko/lua-language-server/issues/1561
+[#1567]: https://github.com/sumneko/lua-language-server/issues/1567
+[#1575]: https://github.com/sumneko/lua-language-server/issues/1575
+[#1582]: https://github.com/sumneko/lua-language-server/issues/1582
+[#1593]: https://github.com/sumneko/lua-language-server/issues/1593
+[#1595]: https://github.com/sumneko/lua-language-server/issues/1595
+[#1599]: https://github.com/sumneko/lua-language-server/issues/1599
+[#1606]: https://github.com/sumneko/lua-language-server/issues/1606
+[#1608]: https://github.com/sumneko/lua-language-server/issues/1608
+[#1626]: https://github.com/sumneko/lua-language-server/issues/1626
+[#1637]: https://github.com/sumneko/lua-language-server/issues/1637
+[#1640]: https://github.com/sumneko/lua-language-server/issues/1640
+[#1641]: https://github.com/sumneko/lua-language-server/issues/1641
+[#1642]: https://github.com/sumneko/lua-language-server/issues/1642
+[#1662]: https://github.com/sumneko/lua-language-server/issues/1662
+[#1663]: https://github.com/sumneko/lua-language-server/issues/1663
+[#1670]: https://github.com/sumneko/lua-language-server/issues/1670
+[#1672]: https://github.com/sumneko/lua-language-server/issues/1672
+
 ## 3.5.6
 `2022-9-16`
 * `FIX` [#1439](https://github.com/sumneko/lua-language-server/issues/1439)
diff --git a/package.json b/package.json
index 80ae1617b118dfadf1ed17a285a7f29666793562..256db19599481cba4d84a9ea522e042740883af5 100644
--- a/package.json
+++ b/package.json
@@ -32,15 +32,6 @@
 				"title": "Lua Psi Viewer"
 			}
 		],
-		"menus": {
-			"editor/context": [
-				{
-					"when": "resourceLangId == lua",
-					"command": "lua.psi.view",
-					"group": "z_commands"
-				}
-			]
-		},
 		"configuration": {
 			"properties": {
 				"Lua.completion.autoRequire": {
@@ -173,6 +164,7 @@
 							"exp-in-action",
 							"global-in-nil-env",
 							"index-in-func-name",
+							"invisible",
 							"jump-local-scope",
 							"keyword",
 							"local-limit",
@@ -196,6 +188,7 @@
 							"luadoc-miss-operator-name",
 							"luadoc-miss-param-extends",
 							"luadoc-miss-param-name",
+							"luadoc-miss-see-name",
 							"luadoc-miss-sign-name",
 							"luadoc-miss-symbol",
 							"luadoc-miss-type-name",
@@ -894,6 +887,19 @@
 							],
 							"type": "string"
 						},
+						"invisible": {
+							"default": "Any",
+							"description": "%config.diagnostics.invisible%",
+							"enum": [
+								"Any",
+								"Opened",
+								"None",
+								"Any!",
+								"Opened!",
+								"None!"
+							],
+							"type": "string"
+						},
 						"lowercase-global": {
 							"default": "Any",
 							"description": "%config.diagnostics.lowercase-global%",
@@ -1647,6 +1653,21 @@
 							],
 							"type": "string"
 						},
+						"invisible": {
+							"default": "Warning",
+							"description": "%config.diagnostics.invisible%",
+							"enum": [
+								"Error",
+								"Warning",
+								"Information",
+								"Hint",
+								"Error!",
+								"Warning!",
+								"Information!",
+								"Hint!"
+							],
+							"type": "string"
+						},
 						"lowercase-global": {
 							"default": "Information",
 							"description": "%config.diagnostics.lowercase-global%",
@@ -2162,12 +2183,55 @@
 					"scope": "resource",
 					"type": "integer"
 				},
+				"Lua.diagnostics.workspaceEvent": {
+					"default": "OnSave",
+					"enum": [
+						"OnChange",
+						"OnSave",
+						"None"
+					],
+					"markdownDescription": "%config.diagnostics.workspaceEvent%",
+					"markdownEnumDescriptions": [
+						"%config.diagnostics.workspaceEvent.OnChange%",
+						"%config.diagnostics.workspaceEvent.OnSave%",
+						"%config.diagnostics.workspaceEvent.None%"
+					],
+					"scope": "resource",
+					"type": "string"
+				},
 				"Lua.diagnostics.workspaceRate": {
 					"default": 100,
 					"markdownDescription": "%config.diagnostics.workspaceRate%",
 					"scope": "resource",
 					"type": "integer"
 				},
+				"Lua.doc.packageName": {
+					"default": [],
+					"items": {
+						"type": "string"
+					},
+					"markdownDescription": "%config.doc.packageName%",
+					"scope": "resource",
+					"type": "array"
+				},
+				"Lua.doc.privateName": {
+					"default": [],
+					"items": {
+						"type": "string"
+					},
+					"markdownDescription": "%config.doc.privateName%",
+					"scope": "resource",
+					"type": "array"
+				},
+				"Lua.doc.protectedName": {
+					"default": [],
+					"items": {
+						"type": "string"
+					},
+					"markdownDescription": "%config.doc.protectedName%",
+					"scope": "resource",
+					"type": "array"
+				},
 				"Lua.format.defaultConfig": {
 					"additionalProperties": false,
 					"default": {},
@@ -2302,6 +2366,12 @@
 					"scope": "resource",
 					"type": "integer"
 				},
+				"Lua.misc.executablePath": {
+					"default": "",
+					"markdownDescription": "%config.misc.executablePath%",
+					"scope": "resource",
+					"type": "string"
+				},
 				"Lua.misc.parameters": {
 					"default": [],
 					"items": {
@@ -2828,7 +2898,8 @@
 					"comments": "inline",
 					"other": "on",
 					"strings": "on"
-				}
+				},
+				"editor.semanticHighlighting.enabled": true
 			}
 		},
 		"jsonValidation": [
@@ -2848,6 +2919,15 @@
 				"id": "jsonc"
 			}
 		],
+		"menus": {
+			"editor/context": [
+				{
+					"command": "lua.psi.view",
+					"group": "z_commands",
+					"when": "resourceLangId == lua"
+				}
+			]
+		},
 		"semanticTokenScopes": [
 			{
 				"language": "lua",
@@ -2939,6 +3019,9 @@
 					"type.modification": [
 						"storage.type.generic.lua"
 					],
+					"type.readonly": [
+						"storage.type.self.lua"
+					],
 					"typeParameter": [
 						"string.tag.lua"
 					],
@@ -2957,11 +3040,11 @@
 					"variable.definition": [
 						"variable.language.self.lua"
 					],
+					"variable.global": [
+						"variable.global.lua"
+					],
 					"variable.readonly": [
 						"variable.other.constant.lua"
-					],
-					"variable.static": [
-						"variable.global.lua"
 					]
 				}
 			}
@@ -2989,5 +3072,5 @@
 	"sponsor": {
 		"url": "https://github.com/sumneko/lua-language-server/issues/484"
 	},
-	"version": "3.5.6"
+	"version": "3.6.0"
 }
diff --git a/package.nls.json b/package.nls.json
index 69070efe2f37e9c110ad5308de84eb1855e005eb..575a045394f59cfb17d9b3e5cac5ad978bbbdb97 100644
--- a/package.nls.json
+++ b/package.nls.json
@@ -90,7 +90,7 @@
     "config.diagnostics.return-type-mismatch": "Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.",
     "config.diagnostics.severity": "Modify the diagnostic severity.\n\nEnd with `!` means override the group setting `diagnostics.groupSeverity`.\n",
     "config.diagnostics.spell-check": "Enable diagnostics for typos in strings.",
-    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns",
+    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
     "config.diagnostics.strong": "* no-unknown",
     "config.diagnostics.trailing-space": "Enable trailing space diagnostics.",
     "config.diagnostics.type-check": "* assign-type-mismatch\n* cast-local-type\n* cast-type-mismatch\n* need-check-nil\n* param-type-mismatch\n* return-type-mismatch\n* undefined-field",
@@ -112,8 +112,15 @@
     "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.workspaceDelay": "Latency (milliseconds) for workspace diagnostics.",
+    "config.diagnostics.workspaceEvent": "Set the time to trigger workspace diagnostics.",
+    "config.diagnostics.workspaceEvent.None": "Disable workspace diagnostics.",
+    "config.diagnostics.workspaceEvent.OnChange": "Trigger workspace diagnostics when the file is changed.",
+    "config.diagnostics.workspaceEvent.OnSave": "Trigger workspace diagnostics when the file is saved.",
     "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.doc.packageName": "Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.",
+    "config.doc.privateName": "Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.",
+    "config.doc.protectedName": "Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.",
     "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",
     "config.format.enable": "Enable code formatter.",
     "config.hint.arrayIndex": "Show hints of array index when constructing a table.",
@@ -142,7 +149,8 @@
     "config.hover.viewStringMax": "The maximum length of a hover to view the contents of a string.",
     "config.intelliSense.fastGlobal": "In the global variable completion, and view `_G` suspension prompt. This will slightly reduce the accuracy of type speculation, but it will have a significant performance improvement for projects that use a lot of global variables.",
     "config.intelliSense.searchDepth": "Set the search depth for IntelliSense. Increasing this value increases accuracy, but decreases performance. Different workspace have different tolerance for this setting. Please adjust it to the appropriate value.",
-    "config.misc.parameters": "[Command line parameters](https://github.com/sumneko/lua-telemetry-server/tree/master/method) when starting the language service in VSCode.",
+    "config.misc.executablePath": "Specify the executable path in VSCode.",
+    "config.misc.parameters": "[Command line parameters](https://github.com/sumneko/lua-telemetry-server/tree/master/method) when starting the language server in VSCode.",
     "config.runtime.builtin": "Adjust the enabled state of the built-in library. You can disable (or redefine) the non-existent library according to the actual runtime environment.\n\n* `default`: Indicates that the library will be enabled or disabled according to the runtime version\n* `enable`: always enable\n* `disable`: always disable\n",
     "config.runtime.fileEncoding": "File encoding. The `ansi` option is only available under the `Windows` platform.",
     "config.runtime.meta": "Format of the directory name of the meta files.",
diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json
index 716e7adf61d497b14229ecd4661cfac37b738a7a..338599845e0b050188cd7ab5af212de37a97cd90 100644
--- a/package.nls.pt-br.json
+++ b/package.nls.pt-br.json
@@ -90,7 +90,7 @@
     "config.diagnostics.return-type-mismatch": "Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.",
     "config.diagnostics.severity": "Modify the diagnostic severity.\n\nEnd with `!` means override the group setting `diagnostics.groupSeverity`.\n",
     "config.diagnostics.spell-check": "Enable diagnostics for typos in strings.",
-    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns",
+    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
     "config.diagnostics.strong": "* no-unknown",
     "config.diagnostics.trailing-space": "后置空格",
     "config.diagnostics.type-check": "* assign-type-mismatch\n* cast-local-type\n* cast-type-mismatch\n* need-check-nil\n* param-type-mismatch\n* return-type-mismatch\n* undefined-field",
@@ -112,8 +112,15 @@
     "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.workspaceDelay": "Latency (milliseconds) for workspace diagnostics.",
+    "config.diagnostics.workspaceEvent": "Set the time to trigger workspace diagnostics.",
+    "config.diagnostics.workspaceEvent.None": "Disable workspace diagnostics.",
+    "config.diagnostics.workspaceEvent.OnChange": "Trigger workspace diagnostics when the file is changed.",
+    "config.diagnostics.workspaceEvent.OnSave": "Trigger workspace diagnostics when the file is saved.",
     "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.doc.packageName": "Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.",
+    "config.doc.privateName": "Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.",
+    "config.doc.protectedName": "Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.",
     "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",
     "config.format.enable": "Enable code formatter.",
     "config.hint.arrayIndex": "Show hints of array index when constructing a table.",
@@ -142,6 +149,7 @@
     "config.hover.viewStringMax": "The maximum length of a hover to view the contents of a string.",
     "config.intelliSense.fastGlobal": "In the global variable completion, and view `_G` suspension prompt. This will slightly reduce the accuracy of type speculation, but it will have a significant performance improvement for projects that use a lot of global variables.",
     "config.intelliSense.searchDepth": "Set the search depth for IntelliSense. Increasing this value increases accuracy, but decreases performance. Different workspace have different tolerance for this setting. Please adjust it to the appropriate value.",
+    "config.misc.executablePath": "Specify the executable path in VSCode.",
     "config.misc.parameters": "[Command line parameters](https://github.com/sumneko/lua-telemetry-server/tree/master/method) when starting the language service in VSCode.",
     "config.runtime.builtin": "Adjust the enabled state of the built-in library. You can disable (or redefine) the non-existent library according to the actual runtime environment.\n\n* `default`: Indicates that the library will be enabled or disabled according to the runtime version\n* `enable`: always enable\n* `disable`: always disable\n",
     "config.runtime.fileEncoding": "File encoding. The `ansi` option is only available under the `Windows` platform.",
diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json
index 94e532e20587dee7bc6b0fd704cf0312ef78f416..ea382757c52ae1d792f0c83a7278769b3ea96762 100644
--- a/package.nls.zh-cn.json
+++ b/package.nls.zh-cn.json
@@ -90,7 +90,7 @@
     "config.diagnostics.return-type-mismatch": "Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.",
     "config.diagnostics.severity": "修改诊断等级。\n以 `!` 结尾的设置优先级高于组设置 `diagnostics.groupSeverity`。\n",
     "config.diagnostics.spell-check": "Enable diagnostics for typos in strings.",
-    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns",
+    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
     "config.diagnostics.strong": "* no-unknown",
     "config.diagnostics.trailing-space": "后置空格",
     "config.diagnostics.type-check": "* assign-type-mismatch\n* cast-local-type\n* cast-type-mismatch\n* need-check-nil\n* param-type-mismatch\n* return-type-mismatch\n* undefined-field",
@@ -112,8 +112,15 @@
     "config.diagnostics.unused-local": "未使用的局部变量",
     "config.diagnostics.unused-vararg": "未使用的不定参数",
     "config.diagnostics.unusedLocalExclude": "如果变量名匹配以下规则,则不对其进行 `unused-local` 诊断。",
-    "config.diagnostics.workspaceDelay": "进行工作区诊断的延迟(毫秒)。当你启动工作区,或编辑了任意文件后,将会在后台对整个工作区进行重新诊断。设置为负数可以禁用工作区诊断。",
+    "config.diagnostics.workspaceDelay": "进行工作区诊断的延迟(毫秒)。",
+    "config.diagnostics.workspaceEvent": "设置触发工作区诊断的时机。",
+    "config.diagnostics.workspaceEvent.None": "关闭工作区诊断。",
+    "config.diagnostics.workspaceEvent.OnChange": "当文件发生变化时触发工作区诊断。",
+    "config.diagnostics.workspaceEvent.OnSave": "当文件保存时触发工作区诊断。",
     "config.diagnostics.workspaceRate": "工作区诊断的运行速率(百分比)。降低该值会减少CPU占用,但是也会降低工作区诊断的速度。你当前正在编辑的文件的诊断总是全速完成,不受该选项影响。",
+    "config.doc.packageName": "将特定名称的字段视为package,例如 `m_*` 意味着 `XXX.m_id` 与 `XXX.m_type` 只能在定义所在的文件中访问。",
+    "config.doc.privateName": "将特定名称的字段视为私有,例如 `m_*` 意味着 `XXX.m_id` 与 `XXX.m_type` 是私有字段,只能在定义所在的类中访问。",
+    "config.doc.protectedName": "将特定名称的字段视为受保护,例如 `m_*` 意味着 `XXX.m_id` 与 `XXX.m_type` 是受保护的字段,只能在定义所在的类极其子类中访问。",
     "config.format.defaultConfig": "默认的格式化配置,优先级低于工作区内的 `.editorconfig` 文件。\n请查阅[格式化文档](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs)了解用法。\n",
     "config.format.enable": "启用代码格式化程序。",
     "config.hint.arrayIndex": "在构造表时提示数组索引。",
@@ -142,6 +149,7 @@
     "config.hover.viewStringMax": "悬停提示查看字符串内容时的最大长度。",
     "config.intelliSense.fastGlobal": "在对全局变量进行补全,及查看 `_G` 的悬浮提示时进行优化。这会略微降低类型推测的准确度,但是对于大量使用全局变量的项目会有大幅的性能提升。",
     "config.intelliSense.searchDepth": "设置智能感知的搜索深度。增大该值可以增加准确度,但会降低性能。不同的项目对该设置的容忍度差异较大,请自己调整为合适的值。",
+    "config.misc.executablePath": "VSCode中指定可执行文件路径。",
     "config.misc.parameters": "VSCode中启动语言服务时的[命令行参数](https://github.com/sumneko/lua-language-server/wiki/Getting-Started#arguments)。",
     "config.runtime.builtin": "调整内置库的启用状态,你可以根据实际运行环境禁用掉不存在的库(或重新定义)。\n\n* `default`: 表示库会根据运行版本启用或禁用\n* `enable`: 总是启用\n* `disable`: 总是禁用\n",
     "config.runtime.fileEncoding": "文件编码,`ansi` 选项只在 `Windows` 平台下有效。",
diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json
index 73c0982fb2a98697813eb138e3d9b0d4753b5d5b..a98555dcc182d6a58d5c612c56519e761b7ce316 100644
--- a/package.nls.zh-tw.json
+++ b/package.nls.zh-tw.json
@@ -90,7 +90,7 @@
     "config.diagnostics.return-type-mismatch": "Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.",
     "config.diagnostics.severity": "修改診斷等級。\n以 `!` 結尾的設定優先順序高於組設定 `diagnostics.groupSeverity`。\n",
     "config.diagnostics.spell-check": "Enable diagnostics for typos in strings.",
-    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns",
+    "config.diagnostics.strict": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
     "config.diagnostics.strong": "* no-unknown",
     "config.diagnostics.trailing-space": "後置空格",
     "config.diagnostics.type-check": "* assign-type-mismatch\n* cast-local-type\n* cast-type-mismatch\n* need-check-nil\n* param-type-mismatch\n* return-type-mismatch\n* undefined-field",
@@ -112,8 +112,15 @@
     "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.workspaceDelay": "進行工作區診斷的延遲(毫秒)。",
+    "config.diagnostics.workspaceEvent": "Set the time to trigger workspace diagnostics.",
+    "config.diagnostics.workspaceEvent.None": "Disable workspace diagnostics.",
+    "config.diagnostics.workspaceEvent.OnChange": "Trigger workspace diagnostics when the file is changed.",
+    "config.diagnostics.workspaceEvent.OnSave": "Trigger workspace diagnostics when the file is saved.",
     "config.diagnostics.workspaceRate": "工作區診斷的執行速率(百分比)。降低該值會減少CPU使用率,但是也會降低工作區診斷的速度。你目前正在編輯的檔案的診斷總是全速完成,不受該選項影響。",
+    "config.doc.packageName": "Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.",
+    "config.doc.privateName": "Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.",
+    "config.doc.protectedName": "Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.",
     "config.format.defaultConfig": "預設的格式化組態,優先順序低於工作區內的 `.editorconfig` 檔案。\n請查閱[格式化文件](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs)了解用法。\n",
     "config.format.enable": "啟用程式碼格式化程式。",
     "config.hint.arrayIndex": "在建構表時提示陣列索引。",
@@ -142,6 +149,7 @@
     "config.hover.viewStringMax": "懸浮提示檢視字串內容時的最大長度。",
     "config.intelliSense.fastGlobal": "在對全域變數進行補全,及檢視 `_G` 的懸浮提示時進行最佳化。這會略微降低類型推測的準確度,但是對於大量使用全域變數的專案會有大幅的效能提升。",
     "config.intelliSense.searchDepth": "設定智慧感知的搜尋深度。增大該值可以增加準確度,但會降低效能。不同的工作區對該設定的容忍度差異較大,請自己調整為合適的值。",
+    "config.misc.executablePath": "Specify the executable path in VSCode.",
     "config.misc.parameters": "VSCode中啟動語言伺服時的[命令列參數](https://github.com/sumneko/lua-language-server/wiki/Getting-Started#arguments)。",
     "config.runtime.builtin": "調整內建庫的啟用狀態,你可以根據實際執行環境停用(或重新定義)不存在的庫。\n\n* `default`: 表示庫會根據執行版本啟用或停用\n* `enable`: 總是啟用\n* `disable`: 總是停用\n",
     "config.runtime.fileEncoding": "檔案編碼,選項 `ansi` 只在 `Windows` 平台下有效。",
diff --git a/package/build.lua b/package/build.lua
index 95ddae26ab224658ec80e094d0775d4162f4d849..0210d32fe1f02f3986fffc5427e3902e42751213 100644
--- a/package/build.lua
+++ b/package/build.lua
@@ -1,6 +1,6 @@
 local json = require 'json-beautify'
 
-local VERSION = "3.5.6"
+local VERSION = "3.6.0"
 
 local package = require 'package.package'
 local fsu     = require 'fs-utility'
diff --git a/server b/server
index 16f4d9c3269f54c102381d9fa44b5773c5b8c2c2..a033a1e8fd4934e5abe3de37fb4114d170fe592a 160000
--- a/server
+++ b/server
@@ -1 +1 @@
-Subproject commit 16f4d9c3269f54c102381d9fa44b5773c5b8c2c2
+Subproject commit a033a1e8fd4934e5abe3de37fb4114d170fe592a
diff --git a/setting/schema-pt-br.json b/setting/schema-pt-br.json
index 076a34929160953e0b5e8270a1fc426cec52b8aa..6a7165ac70ed10f45769f986d458c55a0bc9e718 100644
--- a/setting/schema-pt-br.json
+++ b/setting/schema-pt-br.json
@@ -163,6 +163,9 @@
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
+                "workspaceEvent": {
+                    "$ref": "#/properties/diagnostics.workspaceEvent"
+                },
                 "workspaceRate": {
                     "$ref": "#/properties/diagnostics.workspaceRate"
                 }
@@ -208,6 +211,7 @@
                     "exp-in-action",
                     "global-in-nil-env",
                     "index-in-func-name",
+                    "invisible",
                     "jump-local-scope",
                     "keyword",
                     "local-limit",
@@ -231,6 +235,7 @@
                     "luadoc-miss-operator-name",
                     "luadoc-miss-param-extends",
                     "luadoc-miss-param-name",
+                    "luadoc-miss-see-name",
                     "luadoc-miss-sign-name",
                     "luadoc-miss-symbol",
                     "luadoc-miss-type-name",
@@ -409,7 +414,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Any",
                         "Opened",
@@ -557,7 +562,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Error",
                         "Warning",
@@ -929,6 +934,19 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Any",
                     "description": "首字母小写的全局变量定义",
@@ -1682,6 +1700,21 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Information",
                     "description": "首字母小写的全局变量定义",
@@ -2193,16 +2226,72 @@
         },
         "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.",
+            "markdownDescription": "Latency (milliseconds) for workspace diagnostics.",
             "scope": "resource",
             "type": "integer"
         },
+        "diagnostics.workspaceEvent": {
+            "default": "OnSave",
+            "enum": [
+                "OnChange",
+                "OnSave",
+                "None"
+            ],
+            "markdownDescription": "Set the time to trigger workspace diagnostics.",
+            "markdownEnumDescriptions": [
+                "Trigger workspace diagnostics when the file is changed.",
+                "Trigger workspace diagnostics when the file is saved.",
+                "Disable workspace diagnostics."
+            ],
+            "scope": "resource",
+            "type": "string"
+        },
         "diagnostics.workspaceRate": {
             "default": 100,
             "markdownDescription": "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.",
             "scope": "resource",
             "type": "integer"
         },
+        "doc": {
+            "properties": {
+                "packageName": {
+                    "$ref": "#/properties/doc.packageName"
+                },
+                "privateName": {
+                    "$ref": "#/properties/doc.privateName"
+                },
+                "protectedName": {
+                    "$ref": "#/properties/doc.protectedName"
+                }
+            }
+        },
+        "doc.packageName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.privateName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.protectedName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.",
+            "scope": "resource",
+            "type": "array"
+        },
         "format": {
             "properties": {
                 "defaultConfig": {
@@ -2399,11 +2488,20 @@
         },
         "misc": {
             "properties": {
+                "executablePath": {
+                    "$ref": "#/properties/misc.executablePath"
+                },
                 "parameters": {
                     "$ref": "#/properties/misc.parameters"
                 }
             }
         },
+        "misc.executablePath": {
+            "default": "",
+            "markdownDescription": "Specify the executable path in VSCode.",
+            "scope": "resource",
+            "type": "string"
+        },
         "misc.parameters": {
             "default": [],
             "items": {
diff --git a/setting/schema-zh-cn.json b/setting/schema-zh-cn.json
index 7a3eeb5671823256686b7027cda8ddd8dbce5681..3822c57cb10b34887416ba96c0dfa1eba7185b32 100644
--- a/setting/schema-zh-cn.json
+++ b/setting/schema-zh-cn.json
@@ -163,6 +163,9 @@
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
+                "workspaceEvent": {
+                    "$ref": "#/properties/diagnostics.workspaceEvent"
+                },
                 "workspaceRate": {
                     "$ref": "#/properties/diagnostics.workspaceRate"
                 }
@@ -208,6 +211,7 @@
                     "exp-in-action",
                     "global-in-nil-env",
                     "index-in-func-name",
+                    "invisible",
                     "jump-local-scope",
                     "keyword",
                     "local-limit",
@@ -231,6 +235,7 @@
                     "luadoc-miss-operator-name",
                     "luadoc-miss-param-extends",
                     "luadoc-miss-param-name",
+                    "luadoc-miss-see-name",
                     "luadoc-miss-sign-name",
                     "luadoc-miss-symbol",
                     "luadoc-miss-type-name",
@@ -409,7 +414,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Any",
                         "Opened",
@@ -557,7 +562,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Error",
                         "Warning",
@@ -929,6 +934,19 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Any",
                     "description": "首字母小写的全局变量定义",
@@ -1682,6 +1700,21 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Information",
                     "description": "首字母小写的全局变量定义",
@@ -2193,16 +2226,72 @@
         },
         "diagnostics.workspaceDelay": {
             "default": 3000,
-            "markdownDescription": "进行工作区诊断的延迟(毫秒)。当你启动工作区,或编辑了任意文件后,将会在后台对整个工作区进行重新诊断。设置为负数可以禁用工作区诊断。",
+            "markdownDescription": "进行工作区诊断的延迟(毫秒)。",
             "scope": "resource",
             "type": "integer"
         },
+        "diagnostics.workspaceEvent": {
+            "default": "OnSave",
+            "enum": [
+                "OnChange",
+                "OnSave",
+                "None"
+            ],
+            "markdownDescription": "设置触发工作区诊断的时机。",
+            "markdownEnumDescriptions": [
+                "当文件发生变化时触发工作区诊断。",
+                "当文件保存时触发工作区诊断。",
+                "关闭工作区诊断。"
+            ],
+            "scope": "resource",
+            "type": "string"
+        },
         "diagnostics.workspaceRate": {
             "default": 100,
             "markdownDescription": "工作区诊断的运行速率(百分比)。降低该值会减少CPU占用,但是也会降低工作区诊断的速度。你当前正在编辑的文件的诊断总是全速完成,不受该选项影响。",
             "scope": "resource",
             "type": "integer"
         },
+        "doc": {
+            "properties": {
+                "packageName": {
+                    "$ref": "#/properties/doc.packageName"
+                },
+                "privateName": {
+                    "$ref": "#/properties/doc.privateName"
+                },
+                "protectedName": {
+                    "$ref": "#/properties/doc.protectedName"
+                }
+            }
+        },
+        "doc.packageName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "将特定名称的字段视为package,例如 `m_*` 意味着 `XXX.m_id` 与 `XXX.m_type` 只能在定义所在的文件中访问。",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.privateName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "将特定名称的字段视为私有,例如 `m_*` 意味着 `XXX.m_id` 与 `XXX.m_type` 是私有字段,只能在定义所在的类中访问。",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.protectedName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "将特定名称的字段视为受保护,例如 `m_*` 意味着 `XXX.m_id` 与 `XXX.m_type` 是受保护的字段,只能在定义所在的类极其子类中访问。",
+            "scope": "resource",
+            "type": "array"
+        },
         "format": {
             "properties": {
                 "defaultConfig": {
@@ -2399,11 +2488,20 @@
         },
         "misc": {
             "properties": {
+                "executablePath": {
+                    "$ref": "#/properties/misc.executablePath"
+                },
                 "parameters": {
                     "$ref": "#/properties/misc.parameters"
                 }
             }
         },
+        "misc.executablePath": {
+            "default": "",
+            "markdownDescription": "VSCode中指定可执行文件路径。",
+            "scope": "resource",
+            "type": "string"
+        },
         "misc.parameters": {
             "default": [],
             "items": {
diff --git a/setting/schema-zh-tw.json b/setting/schema-zh-tw.json
index ee0c21f047cbbb9f60774b1671a43d7ff868059f..f5091624092c77ed36a91b121444b018aeb2062e 100644
--- a/setting/schema-zh-tw.json
+++ b/setting/schema-zh-tw.json
@@ -163,6 +163,9 @@
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
+                "workspaceEvent": {
+                    "$ref": "#/properties/diagnostics.workspaceEvent"
+                },
                 "workspaceRate": {
                     "$ref": "#/properties/diagnostics.workspaceRate"
                 }
@@ -208,6 +211,7 @@
                     "exp-in-action",
                     "global-in-nil-env",
                     "index-in-func-name",
+                    "invisible",
                     "jump-local-scope",
                     "keyword",
                     "local-limit",
@@ -231,6 +235,7 @@
                     "luadoc-miss-operator-name",
                     "luadoc-miss-param-extends",
                     "luadoc-miss-param-name",
+                    "luadoc-miss-see-name",
                     "luadoc-miss-sign-name",
                     "luadoc-miss-symbol",
                     "luadoc-miss-type-name",
@@ -409,7 +414,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Any",
                         "Opened",
@@ -557,7 +562,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Error",
                         "Warning",
@@ -929,6 +934,19 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Any",
                     "description": "首字母小寫的全域變數定義",
@@ -1682,6 +1700,21 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Information",
                     "description": "首字母小寫的全域變數定義",
@@ -2193,16 +2226,72 @@
         },
         "diagnostics.workspaceDelay": {
             "default": 3000,
-            "markdownDescription": "進行工作區診斷的延遲(毫秒)。當你啟動工作區,或編輯了任何檔案後,將會在背景對整個工作區進行重新診斷。設定為負數可以停用工作區診斷。",
+            "markdownDescription": "進行工作區診斷的延遲(毫秒)。",
             "scope": "resource",
             "type": "integer"
         },
+        "diagnostics.workspaceEvent": {
+            "default": "OnSave",
+            "enum": [
+                "OnChange",
+                "OnSave",
+                "None"
+            ],
+            "markdownDescription": "Set the time to trigger workspace diagnostics.",
+            "markdownEnumDescriptions": [
+                "Trigger workspace diagnostics when the file is changed.",
+                "Trigger workspace diagnostics when the file is saved.",
+                "Disable workspace diagnostics."
+            ],
+            "scope": "resource",
+            "type": "string"
+        },
         "diagnostics.workspaceRate": {
             "default": 100,
             "markdownDescription": "工作區診斷的執行速率(百分比)。降低該值會減少CPU使用率,但是也會降低工作區診斷的速度。你目前正在編輯的檔案的診斷總是全速完成,不受該選項影響。",
             "scope": "resource",
             "type": "integer"
         },
+        "doc": {
+            "properties": {
+                "packageName": {
+                    "$ref": "#/properties/doc.packageName"
+                },
+                "privateName": {
+                    "$ref": "#/properties/doc.privateName"
+                },
+                "protectedName": {
+                    "$ref": "#/properties/doc.protectedName"
+                }
+            }
+        },
+        "doc.packageName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.privateName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.protectedName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.",
+            "scope": "resource",
+            "type": "array"
+        },
         "format": {
             "properties": {
                 "defaultConfig": {
@@ -2399,11 +2488,20 @@
         },
         "misc": {
             "properties": {
+                "executablePath": {
+                    "$ref": "#/properties/misc.executablePath"
+                },
                 "parameters": {
                     "$ref": "#/properties/misc.parameters"
                 }
             }
         },
+        "misc.executablePath": {
+            "default": "",
+            "markdownDescription": "Specify the executable path in VSCode.",
+            "scope": "resource",
+            "type": "string"
+        },
         "misc.parameters": {
             "default": [],
             "items": {
diff --git a/setting/schema.json b/setting/schema.json
index 0baeca111ce2be01d663cf3dc66171c1df437a6f..d438ddd0856b33095e672e75cbe5e667f1da04f2 100644
--- a/setting/schema.json
+++ b/setting/schema.json
@@ -163,6 +163,9 @@
                 "workspaceDelay": {
                     "$ref": "#/properties/diagnostics.workspaceDelay"
                 },
+                "workspaceEvent": {
+                    "$ref": "#/properties/diagnostics.workspaceEvent"
+                },
                 "workspaceRate": {
                     "$ref": "#/properties/diagnostics.workspaceRate"
                 }
@@ -208,6 +211,7 @@
                     "exp-in-action",
                     "global-in-nil-env",
                     "index-in-func-name",
+                    "invisible",
                     "jump-local-scope",
                     "keyword",
                     "local-limit",
@@ -231,6 +235,7 @@
                     "luadoc-miss-operator-name",
                     "luadoc-miss-param-extends",
                     "luadoc-miss-param-name",
+                    "luadoc-miss-see-name",
                     "luadoc-miss-sign-name",
                     "luadoc-miss-symbol",
                     "luadoc-miss-type-name",
@@ -409,7 +414,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Any",
                         "Opened",
@@ -557,7 +562,7 @@
                 },
                 "strict": {
                     "default": "Fallback",
-                    "description": "* close-non-object\n* deprecated\n* discard-returns",
+                    "description": "* close-non-object\n* deprecated\n* discard-returns\n* invisible",
                     "enum": [
                         "Error",
                         "Warning",
@@ -929,6 +934,19 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Any",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Any",
+                        "Opened",
+                        "None",
+                        "Any!",
+                        "Opened!",
+                        "None!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Any",
                     "description": "Enable lowercase global variable definition diagnostics.",
@@ -1682,6 +1700,21 @@
                     ],
                     "type": "string"
                 },
+                "invisible": {
+                    "default": "Warning",
+                    "description": "%config.diagnostics.invisible%",
+                    "enum": [
+                        "Error",
+                        "Warning",
+                        "Information",
+                        "Hint",
+                        "Error!",
+                        "Warning!",
+                        "Information!",
+                        "Hint!"
+                    ],
+                    "type": "string"
+                },
                 "lowercase-global": {
                     "default": "Information",
                     "description": "Enable lowercase global variable definition diagnostics.",
@@ -2193,16 +2226,72 @@
         },
         "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.",
+            "markdownDescription": "Latency (milliseconds) for workspace diagnostics.",
             "scope": "resource",
             "type": "integer"
         },
+        "diagnostics.workspaceEvent": {
+            "default": "OnSave",
+            "enum": [
+                "OnChange",
+                "OnSave",
+                "None"
+            ],
+            "markdownDescription": "Set the time to trigger workspace diagnostics.",
+            "markdownEnumDescriptions": [
+                "Trigger workspace diagnostics when the file is changed.",
+                "Trigger workspace diagnostics when the file is saved.",
+                "Disable workspace diagnostics."
+            ],
+            "scope": "resource",
+            "type": "string"
+        },
         "diagnostics.workspaceRate": {
             "default": 100,
             "markdownDescription": "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.",
             "scope": "resource",
             "type": "integer"
         },
+        "doc": {
+            "properties": {
+                "packageName": {
+                    "$ref": "#/properties/doc.packageName"
+                },
+                "privateName": {
+                    "$ref": "#/properties/doc.privateName"
+                },
+                "protectedName": {
+                    "$ref": "#/properties/doc.protectedName"
+                }
+            }
+        },
+        "doc.packageName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.privateName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.",
+            "scope": "resource",
+            "type": "array"
+        },
+        "doc.protectedName": {
+            "default": [],
+            "items": {
+                "type": "string"
+            },
+            "markdownDescription": "Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.",
+            "scope": "resource",
+            "type": "array"
+        },
         "format": {
             "properties": {
                 "defaultConfig": {
@@ -2399,17 +2488,26 @@
         },
         "misc": {
             "properties": {
+                "executablePath": {
+                    "$ref": "#/properties/misc.executablePath"
+                },
                 "parameters": {
                     "$ref": "#/properties/misc.parameters"
                 }
             }
         },
+        "misc.executablePath": {
+            "default": "",
+            "markdownDescription": "Specify the executable path in VSCode.",
+            "scope": "resource",
+            "type": "string"
+        },
         "misc.parameters": {
             "default": [],
             "items": {
                 "type": "string"
             },
-            "markdownDescription": "[Command line parameters](https://github.com/sumneko/lua-telemetry-server/tree/master/method) when starting the language service in VSCode.",
+            "markdownDescription": "[Command line parameters](https://github.com/sumneko/lua-telemetry-server/tree/master/method) when starting the language server in VSCode.",
             "scope": "resource",
             "type": "array"
         },