diff --git a/changelog.md b/changelog.md
index f02640b05ff94299cc7217a896228a723d727e25..c9a716017a0c916ba3f255e92014868ad5458437 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,16 @@
 # changelog
 
+## 3.5.4
+`2022-9-6`
+* `NEW` `type-formatting`: fix wrong indentation of VSCode
+* `CHG` `document-symbol`: redesigned to better support for `Sticky Scroll` feature of VSCode
+* `FIX` `diagnostics.workspaceDelay` can not prevent first workspace diagnostic
+* `FIX` [#1476](https://github.com/sumneko/lua-language-server/issues/1476)
+* `FIX` [#1490](https://github.com/sumneko/lua-language-server/issues/1490)
+* `FIX` [#1493](https://github.com/sumneko/lua-language-server/issues/1493)
+* `FIX` [#1499](https://github.com/sumneko/lua-language-server/issues/1499)
+* `FIX` [#1526](https://github.com/sumneko/lua-language-server/issues/1526)
+
 ## 3.5.3
 `2022-8-13`
 * `FIX` [#1409](https://github.com/sumneko/lua-language-server/issues/1409)
diff --git a/package.json b/package.json
index b0407292949f4ed471501f6c6a1baaa3e4a8c8a3..59c4dfb33cbf7effcd544edc7ebf757b948009e0 100644
--- a/package.json
+++ b/package.json
@@ -203,6 +203,7 @@
 							"missing-return",
 							"missing-return-value",
 							"need-check-nil",
+							"need-paren",
 							"newfield-call",
 							"newline-call",
 							"no-unknown",
@@ -2429,6 +2430,16 @@
 							],
 							"type": "string"
 						},
+						"string.buffer": {
+							"default": "default",
+							"description": "%config.runtime.builtin.string.buffer%",
+							"enum": [
+								"default",
+								"enable",
+								"disable"
+							],
+							"type": "string"
+						},
 						"table": {
 							"default": "default",
 							"description": "%config.runtime.builtin.table%",
@@ -2684,6 +2695,30 @@
 					"scope": "resource",
 					"type": "boolean"
 				},
+				"Lua.typeFormat.config": {
+					"additionalProperties": false,
+					"markdownDescription": "%config.typeFormat.config%",
+					"properties": {
+						"auto_complete_end": {
+							"default": "true",
+							"description": "%config.typeFormat.config.auto_complete_end%",
+							"type": "string"
+						},
+						"auto_complete_table_sep": {
+							"default": "true",
+							"description": "%config.typeFormat.config.auto_complete_table_sep%",
+							"type": "string"
+						},
+						"format_line": {
+							"default": "true",
+							"description": "%config.typeFormat.config.format_line%",
+							"type": "string"
+						}
+					},
+					"scope": "resource",
+					"title": "config",
+					"type": "object"
+				},
 				"Lua.window.progressBar": {
 					"default": true,
 					"markdownDescription": "%config.window.progressBar%",
@@ -2939,5 +2974,5 @@
 	"sponsor": {
 		"url": "https://github.com/sumneko/lua-language-server/issues/484"
 	},
-	"version": "3.5.3"
+	"version": "3.5.4"
 }
diff --git a/package/build.lua b/package/build.lua
index da0b32c70f6fa0ee7a0c5d63418fad5d2b6dbf24..41b569407905dd9a5ab25a8da449ca7856944cd5 100644
--- a/package/build.lua
+++ b/package/build.lua
@@ -1,6 +1,6 @@
 local json = require 'json-beautify'
 
-local VERSION = "3.5.3"
+local VERSION = "3.5.4"
 
 local package = require 'package.package'
 local fsu     = require 'fs-utility'
diff --git a/server b/server
index dacf711d57cddbf106937abd64f544a9298f3349..efe82edce8af8160c3a6e0977bee935f7f8655d5 160000
--- a/server
+++ b/server
@@ -1 +1 @@
-Subproject commit dacf711d57cddbf106937abd64f544a9298f3349
+Subproject commit efe82edce8af8160c3a6e0977bee935f7f8655d5
diff --git a/setting/schema-pt-br.json b/setting/schema-pt-br.json
index 345bbc30ff115ea88fa0cf2035a678723777d34f..076a34929160953e0b5e8270a1fc426cec52b8aa 100644
--- a/setting/schema-pt-br.json
+++ b/setting/schema-pt-br.json
@@ -253,6 +253,7 @@
                     "missing-return",
                     "missing-return-value",
                     "need-check-nil",
+                    "need-paren",
                     "newfield-call",
                     "newline-call",
                     "no-unknown",
@@ -2583,6 +2584,16 @@
                     ],
                     "type": "string"
                 },
+                "string.buffer": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.string.buffer%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "table": {
                     "default": "default",
                     "description": "%config.runtime.builtin.table%",
@@ -2888,6 +2899,37 @@
             "scope": "resource",
             "type": "boolean"
         },
+        "typeFormat": {
+            "properties": {
+                "config": {
+                    "$ref": "#/properties/typeFormat.config"
+                }
+            }
+        },
+        "typeFormat.config": {
+            "additionalProperties": false,
+            "markdownDescription": "%config.typeFormat.config%",
+            "properties": {
+                "auto_complete_end": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_end%",
+                    "type": "string"
+                },
+                "auto_complete_table_sep": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_table_sep%",
+                    "type": "string"
+                },
+                "format_line": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.format_line%",
+                    "type": "string"
+                }
+            },
+            "scope": "resource",
+            "title": "config",
+            "type": "object"
+        },
         "window": {
             "properties": {
                 "progressBar": {
diff --git a/setting/schema-zh-cn.json b/setting/schema-zh-cn.json
index b3cf7d9f8494e1b3b9089893b272152424afb791..7a3eeb5671823256686b7027cda8ddd8dbce5681 100644
--- a/setting/schema-zh-cn.json
+++ b/setting/schema-zh-cn.json
@@ -253,6 +253,7 @@
                     "missing-return",
                     "missing-return-value",
                     "need-check-nil",
+                    "need-paren",
                     "newfield-call",
                     "newline-call",
                     "no-unknown",
@@ -2583,6 +2584,16 @@
                     ],
                     "type": "string"
                 },
+                "string.buffer": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.string.buffer%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "table": {
                     "default": "default",
                     "description": "%config.runtime.builtin.table%",
@@ -2888,6 +2899,37 @@
             "scope": "resource",
             "type": "boolean"
         },
+        "typeFormat": {
+            "properties": {
+                "config": {
+                    "$ref": "#/properties/typeFormat.config"
+                }
+            }
+        },
+        "typeFormat.config": {
+            "additionalProperties": false,
+            "markdownDescription": "%config.typeFormat.config%",
+            "properties": {
+                "auto_complete_end": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_end%",
+                    "type": "string"
+                },
+                "auto_complete_table_sep": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_table_sep%",
+                    "type": "string"
+                },
+                "format_line": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.format_line%",
+                    "type": "string"
+                }
+            },
+            "scope": "resource",
+            "title": "config",
+            "type": "object"
+        },
         "window": {
             "properties": {
                 "progressBar": {
diff --git a/setting/schema-zh-tw.json b/setting/schema-zh-tw.json
index 92b1fa6ad2ca665fc65a1e8af6cabb32e170aba9..ee0c21f047cbbb9f60774b1671a43d7ff868059f 100644
--- a/setting/schema-zh-tw.json
+++ b/setting/schema-zh-tw.json
@@ -253,6 +253,7 @@
                     "missing-return",
                     "missing-return-value",
                     "need-check-nil",
+                    "need-paren",
                     "newfield-call",
                     "newline-call",
                     "no-unknown",
@@ -2583,6 +2584,16 @@
                     ],
                     "type": "string"
                 },
+                "string.buffer": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.string.buffer%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "table": {
                     "default": "default",
                     "description": "%config.runtime.builtin.table%",
@@ -2888,6 +2899,37 @@
             "scope": "resource",
             "type": "boolean"
         },
+        "typeFormat": {
+            "properties": {
+                "config": {
+                    "$ref": "#/properties/typeFormat.config"
+                }
+            }
+        },
+        "typeFormat.config": {
+            "additionalProperties": false,
+            "markdownDescription": "%config.typeFormat.config%",
+            "properties": {
+                "auto_complete_end": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_end%",
+                    "type": "string"
+                },
+                "auto_complete_table_sep": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_table_sep%",
+                    "type": "string"
+                },
+                "format_line": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.format_line%",
+                    "type": "string"
+                }
+            },
+            "scope": "resource",
+            "title": "config",
+            "type": "object"
+        },
         "window": {
             "properties": {
                 "progressBar": {
diff --git a/setting/schema.json b/setting/schema.json
index cf520e0ce323bf0eb5af8c94204b39bc8bfe89d3..0baeca111ce2be01d663cf3dc66171c1df437a6f 100644
--- a/setting/schema.json
+++ b/setting/schema.json
@@ -253,6 +253,7 @@
                     "missing-return",
                     "missing-return-value",
                     "need-check-nil",
+                    "need-paren",
                     "newfield-call",
                     "newline-call",
                     "no-unknown",
@@ -2583,6 +2584,16 @@
                     ],
                     "type": "string"
                 },
+                "string.buffer": {
+                    "default": "default",
+                    "description": "%config.runtime.builtin.string.buffer%",
+                    "enum": [
+                        "default",
+                        "enable",
+                        "disable"
+                    ],
+                    "type": "string"
+                },
                 "table": {
                     "default": "default",
                     "description": "%config.runtime.builtin.table%",
@@ -2888,6 +2899,37 @@
             "scope": "resource",
             "type": "boolean"
         },
+        "typeFormat": {
+            "properties": {
+                "config": {
+                    "$ref": "#/properties/typeFormat.config"
+                }
+            }
+        },
+        "typeFormat.config": {
+            "additionalProperties": false,
+            "markdownDescription": "%config.typeFormat.config%",
+            "properties": {
+                "auto_complete_end": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_end%",
+                    "type": "string"
+                },
+                "auto_complete_table_sep": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.auto_complete_table_sep%",
+                    "type": "string"
+                },
+                "format_line": {
+                    "default": "true",
+                    "description": "%config.typeFormat.config.format_line%",
+                    "type": "string"
+                }
+            },
+            "scope": "resource",
+            "title": "config",
+            "type": "object"
+        },
         "window": {
             "properties": {
                 "progressBar": {