diff --git a/extensions/vscode-vue-language-features/package.json b/extensions/vscode-vue-language-features/package.json index 7c7ef0b3f..d55921f74 100644 --- a/extensions/vscode-vue-language-features/package.json +++ b/extensions/vscode-vue-language-features/package.json @@ -307,6 +307,21 @@ "default": "off", "description": "Traces the communication between VS Code and the language server." }, + "volar.vueserver.textDocumentSync": { + "type": "string", + "default": "incremental", + "enum": [ + "incremental", + "full", + "none" + ], + "enumDescriptions": [ + "Documents are synced by sending the full content on open. After that only incremental updates to the document are send.", + "Documents are synced by always sending the full content of the document.", + "Documents should not be synced at all." + ], + "description": "Defines how the host (editor) should sync document changes to the language server. SFC incremental parser only working when config \"incremental\"." + }, "volar.vueserver.useSecondServer": { "type": "boolean", "default": false, diff --git a/extensions/vscode-vue-language-features/src/common.ts b/extensions/vscode-vue-language-features/src/common.ts index 1aef69647..19cd26ab5 100644 --- a/extensions/vscode-vue-language-features/src/common.ts +++ b/extensions/vscode-vue-language-features/src/common.ts @@ -236,7 +236,13 @@ function getInitializationOptions( mode: 'main-language-features' | 'second-language-features' | 'document-features', useSecondServer: boolean, ) { + const textDocumentSync = vscode.workspace.getConfiguration('volar').get<'incremental' | 'full' | 'none'>('vueserver.textDocumentSync'); const initializationOptions: ServerInitializationOptions = { + textDocumentSync: textDocumentSync ? { + incremental: lsp.TextDocumentSyncKind.Incremental, + full: lsp.TextDocumentSyncKind.Full, + none: lsp.TextDocumentSyncKind.None, + }[textDocumentSync] : lsp.TextDocumentSyncKind.Incremental, typescript: tsVersion.getCurrentTsPaths(context), languageFeatures: (mode === 'main-language-features' || mode === 'second-language-features') ? { ...(mode === 'main-language-features' ? { diff --git a/packages/vue-language-server/src/common.ts b/packages/vue-language-server/src/common.ts index 141cfbd4a..35849e5e7 100644 --- a/packages/vue-language-server/src/common.ts +++ b/packages/vue-language-server/src/common.ts @@ -38,7 +38,7 @@ export function createLanguageServer( const result: vscode.InitializeResult = { capabilities: { - textDocumentSync: vscode.TextDocumentSyncKind.Incremental, + textDocumentSync: (options.textDocumentSync as vscode.TextDocumentSyncKind) ?? vscode.TextDocumentSyncKind.Incremental, }, }; diff --git a/packages/vue-language-server/src/types.ts b/packages/vue-language-server/src/types.ts index c409cb038..0aa189fb1 100644 --- a/packages/vue-language-server/src/types.ts +++ b/packages/vue-language-server/src/types.ts @@ -45,6 +45,7 @@ export interface LanguageConfigs { } export interface ServerInitializationOptions { + textDocumentSync?: vscode.TextDocumentSyncKind | number; typescript: { /** * Path to tsserverlibrary.js / tsserver.js / typescript.js