From 5d3e9204c1ff773d39e365466ed36f79dd128f4c Mon Sep 17 00:00:00 2001 From: _Kerman Date: Sat, 15 Nov 2025 22:25:53 +0800 Subject: [PATCH 1/2] fix(vscode): should throttle project rescan --- packages/vscode/src/projects.ts | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/vscode/src/projects.ts b/packages/vscode/src/projects.ts index 0e6c8b2dc2..d56f748dc1 100644 --- a/packages/vscode/src/projects.ts +++ b/packages/vscode/src/projects.ts @@ -74,6 +74,25 @@ export function useProjects() { const fsWatcher = workspace.createFileSystemWatcher('**/*.md') onScopeDispose(() => fsWatcher.dispose()) + let throttleTimeout: NodeJS.Timeout | null = null + let scheduledRescan = false + async function onFsChange() { + if (throttleTimeout) { + scheduledRescan = true + } + else { + throttleTimeout = setTimeout(async () => { + if (scheduledRescan) { + scheduledRescan = false + await rescanProjects() + } + throttleTimeout = null + }, 500) + scheduledRescan = false + await rescanProjects() + } + } + fsWatcher.onDidChange(async (uri) => { const path = slash(uri.fsPath) logger.info(`File ${path} changed.`) @@ -101,8 +120,8 @@ export function useProjects() { effects.map(effect => effect()) logger.info(`All affected Slidev projects updated in ${Date.now() - startMs}ms.`) }) - fsWatcher.onDidCreate(rescanProjects) - fsWatcher.onDidDelete(rescanProjects) + fsWatcher.onDidCreate(onFsChange) + fsWatcher.onDidDelete(onFsChange) watch(include, rescanProjects) } From 105911f69c43c60b8bd7956e1e6d80d379df4a96 Mon Sep 17 00:00:00 2001 From: _Kerman Date: Sat, 15 Nov 2025 22:28:28 +0800 Subject: [PATCH 2/2] fix --- packages/vscode/src/projects.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/vscode/src/projects.ts b/packages/vscode/src/projects.ts index d56f748dc1..65c3465e2c 100644 --- a/packages/vscode/src/projects.ts +++ b/packages/vscode/src/projects.ts @@ -1,4 +1,5 @@ import type { LoadedSlidevData } from '@slidev/parser/fs' +import type { Uri } from 'vscode' import { existsSync } from 'node:fs' import { basename, dirname } from 'node:path' import { slash } from '@antfu/utils' @@ -76,7 +77,9 @@ export function useProjects() { let throttleTimeout: NodeJS.Timeout | null = null let scheduledRescan = false - async function onFsChange() { + async function onFsChange(uri: Uri) { + if (uri.toString().includes('node_modules')) + return if (throttleTimeout) { scheduledRescan = true }