From 74227aec357f9fd462987b1b24f9a10cb6c9d3d9 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Mon, 28 Nov 2022 20:41:27 +0800 Subject: [PATCH] feat: add `volar.vueserver.disableFileWatcher` setting close #2027 --- .../vscode-vue-language-features/package.json | 5 +++ .../src/common.ts | 6 ++++ packages/language-server/src/server.ts | 32 +++++++++++-------- packages/language-server/src/types.ts | 1 + 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/extensions/vscode-vue-language-features/package.json b/extensions/vscode-vue-language-features/package.json index 3a985145d..0cdc434db 100644 --- a/extensions/vscode-vue-language-features/package.json +++ b/extensions/vscode-vue-language-features/package.json @@ -348,6 +348,11 @@ "default": false, "description": "Reverse priority for tsconfig pickup." }, + "volar.vueserver.disableFileWatcher": { + "type": "boolean", + "default": false, + "description": "Disable file watcher in language server for better performance." + }, "volar.vueserver.additionalExtensions": { "type": "array", "items": { diff --git a/extensions/vscode-vue-language-features/src/common.ts b/extensions/vscode-vue-language-features/src/common.ts index d007d12e0..54d7824fc 100644 --- a/extensions/vscode-vue-language-features/src/common.ts +++ b/extensions/vscode-vue-language-features/src/common.ts @@ -127,6 +127,7 @@ async function doActivate(context: vscode.ExtensionContext, createLc: CreateLang || e.affectsConfiguration('volar.vueserver.diagnosticModel') || e.affectsConfiguration('volar.vueserver.noProjectReferences') || e.affectsConfiguration('volar.vueserver.reverseConfigFilePriority') + || e.affectsConfiguration('volar.vueserver.disableFileWatcher') || e.affectsConfiguration('volar.vueserver.petiteVue.processHtmlFile') || e.affectsConfiguration('volar.vueserver.vitePress.processMdFile') || e.affectsConfiguration('volar.vueserver.additionalExtensions') @@ -209,6 +210,10 @@ export function reverseConfigFilePriority() { return !!vscode.workspace.getConfiguration('volar').get('vueserver.reverseConfigFilePriority'); } +export function disableFileWatcher() { + return !!vscode.workspace.getConfiguration('volar').get('vueserver.disableFileWatcher'); +} + export function diagnosticModel() { return vscode.workspace.getConfiguration('volar').get<'push' | 'pull'>('vueserver.diagnosticModel'); } @@ -289,6 +294,7 @@ function getInitializationOptions( }, noProjectReferences: noProjectReferences(), reverseConfigFilePriority: reverseConfigFilePriority(), + disableFileWatcher: disableFileWatcher(), additionalExtensions: additionalExtensions() }; return initializationOptions; diff --git a/packages/language-server/src/server.ts b/packages/language-server/src/server.ts index def56c8f7..7be641f23 100644 --- a/packages/language-server/src/server.ts +++ b/packages/language-server/src/server.ts @@ -90,22 +90,28 @@ export function createCommonLanguageServer( }); } - if (options.serverMode !== ServerMode.Syntactic && params.capabilities.workspace?.didChangeWatchedFiles?.dynamicRegistration) { + if ( + options.serverMode !== ServerMode.Syntactic + && !options.disableFileWatcher + && params.capabilities.workspace?.didChangeWatchedFiles?.dynamicRegistration + ) { connection.client.register(vscode.DidChangeWatchedFilesNotification.type, { watchers: [ ...plugins.map(plugin => plugin.extraFileExtensions.map(ext => ({ globPattern: `**/*.${ext.extension}` }))).flat(), - { globPattern: `**/*.{${[ - 'js', - 'cjs', - 'mjs', - 'ts', - 'cts', - 'mts', - 'jsx', - 'tsx', - 'json', - ...plugins.map(plugin => plugin.extraFileExtensions.map(ext => ext.extension)).flat(), - ].join(',')}}` }, + { + globPattern: `**/*.{${[ + 'js', + 'cjs', + 'mjs', + 'ts', + 'cts', + 'mts', + 'jsx', + 'tsx', + 'json', + ...plugins.map(plugin => plugin.extraFileExtensions.map(ext => ext.extension)).flat(), + ].join(',')}}` + }, ] }); } diff --git a/packages/language-server/src/types.ts b/packages/language-server/src/types.ts index 64134e549..4d22609d5 100644 --- a/packages/language-server/src/types.ts +++ b/packages/language-server/src/types.ts @@ -113,6 +113,7 @@ export interface LanguageServerInitializationOptions { cancellationPipeName?: string; noProjectReferences?: boolean; reverseConfigFilePriority?: boolean; + disableFileWatcher?: boolean; /** * Enable this option to make language server setup server capabilities based on client capabilities to support multiple servers. */