diff --git a/packages/vue-language-service/src/utils/untrack.ts b/packages/vue-language-service/src/utils/untrack.ts deleted file mode 100644 index 1a56d99b5..000000000 --- a/packages/vue-language-service/src/utils/untrack.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { pauseTracking, resetTracking } from '@vue/reactivity'; - -export function untrack any>(source: T) { - return ((...args: any[]) => { - pauseTracking(); - const result = source(...args); - resetTracking(); - return result; - }) as T; -} diff --git a/packages/vue-language-service/src/vueDocuments.ts b/packages/vue-language-service/src/vueDocuments.ts index c0d799653..3b39c2d4c 100644 --- a/packages/vue-language-service/src/vueDocuments.ts +++ b/packages/vue-language-service/src/vueDocuments.ts @@ -4,7 +4,6 @@ import { computed } from '@vue/reactivity'; import { SourceMapBase, Mapping } from '@volar/source-map'; import { TextDocument } from 'vscode-languageserver-textdocument'; import { EmbeddedFileMappingData, TeleportMappingData, TeleportSideData } from '@volar/vue-code-gen'; -import { untrack } from './utils/untrack'; import { walkElementNodes } from '@volar/vue-code-gen'; import * as CompilerDOM from '@vue/compiler-dom'; import * as vscode from 'vscode-languageserver-protocol'; @@ -117,7 +116,7 @@ export function parseVueDocuments( const embeddedDocumentsMap = computed(() => { const map = new Map(); for (const vueDocument of getAll()) { - for (const sourceMap of vueDocument.refs.sourceMaps.value) { + for (const sourceMap of vueDocument.getSourceMaps()) { map.set(sourceMap.mappedDocument, vueDocument); } } @@ -126,7 +125,7 @@ export function parseVueDocuments( const embeddedDocumentsMapLsType = computed(() => { const map = new Map(); for (const vueDocument of getAll()) { - for (const sourceMap of vueDocument.refs.sourceMaps.value) { + for (const sourceMap of vueDocument.getSourceMaps()) { map.set(sourceMap.mappedDocument.uri, sourceMap); } } @@ -135,7 +134,7 @@ export function parseVueDocuments( const teleportsMapLsType = computed(() => { const map = new Map(); for (const vueDocument of getAll()) { - for (const teleport of vueDocument.refs.teleports.value) { + for (const teleport of vueDocument.getTeleports()) { map.set(teleport.mappedDocument.uri, teleport); } } @@ -143,8 +142,8 @@ export function parseVueDocuments( }); return { - getAll: untrack(getAll), - get: untrack((uri: string) => { + getAll: getAll, + get: (uri: string) => { const fileName = shared.uriToFsPath(uri); const vueFile = vueLsCtx.sourceFiles.get(fileName); @@ -152,17 +151,17 @@ export function parseVueDocuments( if (vueFile) { return vueDocuments.get(vueFile); } - }), - fromEmbeddedDocument: untrack((document: TextDocument) => { + }, + fromEmbeddedDocument: (document: TextDocument) => { return embeddedDocumentsMap.value.get(document); - }), - sourceMapFromEmbeddedDocumentUri: untrack((uri: string) => { + }, + sourceMapFromEmbeddedDocumentUri: (uri: string) => { return embeddedDocumentsMapLsType.value.get(uri); - }), - teleportfromEmbeddedDocumentUri: untrack((uri: string) => { + }, + teleportfromEmbeddedDocumentUri: (uri: string) => { return teleportsMapLsType.value.get(uri); - }), - fromEmbeddedLocation: untrack(function* ( + }, + fromEmbeddedLocation: function* ( uri: string, start: vscode.Position, end?: vscode.Position, @@ -201,7 +200,7 @@ export function parseVueDocuments( }, }; } - }), + }, }; function getAll() { @@ -313,15 +312,11 @@ export function parseVueDocument( file: vueFile, embeddedDocumentsMap, sourceMapsMap, - getTemplateData: untrack(getTemplateData), - getSourceMaps: untrack(() => sourceMaps.value), - getDocument: untrack(() => document.value), - getTemplateTagsAndAttrs: untrack(() => templateTagsAndAttrs.value), - - refs: { - sourceMaps, - teleports, - }, + getTemplateData: getTemplateData, + getSourceMaps: () => sourceMaps.value, + getTeleports: () => teleports.value, + getDocument: () => document.value, + getTemplateTagsAndAttrs: () => templateTagsAndAttrs.value, }; diff --git a/packages/vue-typescript/src/documentRegistry.ts b/packages/vue-typescript/src/documentRegistry.ts index eec3c6d71..f2f5207ce 100644 --- a/packages/vue-typescript/src/documentRegistry.ts +++ b/packages/vue-typescript/src/documentRegistry.ts @@ -3,7 +3,6 @@ import { computed, shallowReactive } from '@vue/reactivity'; import { posix as path } from 'path'; import * as localTypes from './utils/localTypes'; import type { EmbeddedFileSourceMap, Teleport } from './utils/sourceMaps'; -import { untrack } from './utils/untrack'; import type { Embedded, EmbeddedFile, SourceFile } from './sourceFile'; export interface DocumentRegistry extends ReturnType { } @@ -21,11 +20,11 @@ export function createDocumentRegistry() { function createDocumentRegistryBase() { const files = shallowReactive>({}); - const arr = computed(() => Object.values(files)); - const fileNames = computed(() => arr.value.map(sourceFile => sourceFile.fileName)); + const all = computed(() => Object.values(files)); + const fileNames = computed(() => all.value.map(sourceFile => sourceFile.fileName)); const embeddedDocumentsMap = computed(() => { const map = new WeakMap(); - for (const sourceFile of arr.value) { + for (const sourceFile of all.value) { for (const embedded of sourceFile.getAllEmbeddeds()) { map.set(embedded.file, sourceFile); } @@ -34,7 +33,7 @@ function createDocumentRegistryBase() { }); const sourceMapsByFileName = computed(() => { const map = new Map(); - for (const sourceFile of arr.value) { + for (const sourceFile of all.value) { for (const embedded of sourceFile.getAllEmbeddeds()) { map.set(embedded.file.fileName.toLowerCase(), { vueFile: sourceFile, embedded }); } @@ -56,23 +55,23 @@ function createDocumentRegistryBase() { const dirs = computed(() => [...new Set(fileNames.value.map(path.dirname))]); return { - get: untrack((fileName: string) => files[fileName.toLowerCase()]), - delete: untrack((fileName: string) => delete files[fileName.toLowerCase()]), - has: untrack((fileName: string) => !!files[fileName.toLowerCase()]), - set: untrack((fileName: string, vueFile: T) => files[fileName.toLowerCase()] = vueFile), + get: (fileName: string) => files[fileName.toLowerCase()], + delete: (fileName: string) => delete files[fileName.toLowerCase()], + has: (fileName: string) => !!files[fileName.toLowerCase()], + set: (fileName: string, vueFile: T) => files[fileName.toLowerCase()] = vueFile, - getFileNames: untrack(() => fileNames.value), - getDirs: untrack(() => dirs.value), - getAll: untrack(() => arr.value), + getFileNames: () => fileNames.value, + getDirs: () => dirs.value, + getAll: () => all.value, - getTeleport: untrack((fileName: string) => teleports.value.get(fileName.toLowerCase())), - getAllEmbeddeds: untrack(function* () { + getTeleport: (fileName: string) => teleports.value.get(fileName.toLowerCase()), + getAllEmbeddeds: function* () { for (const sourceMap of sourceMapsByFileName.value) { yield sourceMap[1]; } - }), + }, - fromEmbeddedLocation: untrack(function* ( + fromEmbeddedLocation: function* ( fileName: string, start: number, end?: number, @@ -111,16 +110,16 @@ function createDocumentRegistryBase() { }, }; } - }), - fromEmbeddedFile: untrack(function ( + }, + fromEmbeddedFile: function ( file: EmbeddedFile, ) { return embeddedDocumentsMap.value.get(file); - }), - fromEmbeddedFileName: untrack(function ( + }, + fromEmbeddedFileName: function ( fileName: string, ) { return sourceMapsByFileName.value.get(fileName.toLowerCase()); - }), + }, }; } diff --git a/packages/vue-typescript/src/sourceFile.ts b/packages/vue-typescript/src/sourceFile.ts index 14dfc3a57..825b12147 100644 --- a/packages/vue-typescript/src/sourceFile.ts +++ b/packages/vue-typescript/src/sourceFile.ts @@ -7,7 +7,6 @@ import { computed, ComputedRef, reactive, ref, unref } from '@vue/reactivity'; import { VueCompilerOptions } from './types'; import { EmbeddedFileSourceMap, Teleport } from './utils/sourceMaps'; import { SearchTexts } from './utils/string'; -import { untrack } from './utils/untrack'; import * as templateGen from '@volar/vue-code-gen/out/generators/template'; import { parseCssClassNames } from './utils/parseCssClassNames'; import { parseCssVars } from './utils/parseCssVars'; @@ -520,16 +519,16 @@ export function createSourceFile( set text(value) { update(value); }, - getCompiledVue: untrack(() => file2VueSourceMap.value), - getSfcTemplateLanguageCompiled: untrack(() => computedHtmlTemplate.value), - getSfcVueTemplateCompiled: untrack(() => templateAstCompiled.value), - getScriptFileName: untrack(() => fileName.endsWith('.html') ? fileName + '.__VLS_script.' + scriptLang.value : fileName + '.' + scriptLang.value), - getDescriptor: untrack(() => unref(sfc)), - getScriptAst: untrack(() => scriptAst.value), - getScriptSetupAst: untrack(() => scriptSetupAst.value), - getSfcRefSugarRanges: untrack(() => sfcRefSugarRanges.value), - getEmbeddeds: untrack(() => embeddeds.value), - getScriptSetupRanges: untrack(() => scriptSetupRanges.value), + getCompiledVue: () => file2VueSourceMap.value, + getSfcTemplateLanguageCompiled: () => computedHtmlTemplate.value, + getSfcVueTemplateCompiled: () => templateAstCompiled.value, + getScriptFileName: () => fileName.endsWith('.html') ? fileName + '.__VLS_script.' + scriptLang.value : fileName + '.' + scriptLang.value, + getDescriptor: () => unref(sfc), + getScriptAst: () => scriptAst.value, + getScriptSetupAst: () => scriptSetupAst.value, + getSfcRefSugarRanges: () => sfcRefSugarRanges.value, + getEmbeddeds: () => embeddeds.value, + getScriptSetupRanges: () => scriptSetupRanges.value, isJsxMissing: () => !vueCompilerOptions.experimentalDisableTemplateSupport && (compilerOptions.jsx ?? ts.JsxEmit.Preserve) !== ts.JsxEmit.Preserve, getAllEmbeddeds: () => allEmbeddeds.value, diff --git a/packages/vue-typescript/src/utils/untrack.ts b/packages/vue-typescript/src/utils/untrack.ts deleted file mode 100644 index 1a56d99b5..000000000 --- a/packages/vue-typescript/src/utils/untrack.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { pauseTracking, resetTracking } from '@vue/reactivity'; - -export function untrack any>(source: T) { - return ((...args: any[]) => { - pauseTracking(); - const result = source(...args); - resetTracking(); - return result; - }) as T; -}