Skip to content

Commit

Permalink
fix: reactive no effect for new files
Browse files Browse the repository at this point in the history
close #1548
  • Loading branch information
johnsoncodehk committed Jul 16, 2022
1 parent 90e482f commit 768e649
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 76 deletions.
10 changes: 0 additions & 10 deletions packages/vue-language-service/src/utils/untrack.ts

This file was deleted.

43 changes: 19 additions & 24 deletions packages/vue-language-service/src/vueDocuments.ts
Expand Up @@ -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';
Expand Down Expand Up @@ -117,7 +116,7 @@ export function parseVueDocuments(
const embeddedDocumentsMap = computed(() => {
const map = new Map<TextDocument, VueDocument>();
for (const vueDocument of getAll()) {
for (const sourceMap of vueDocument.refs.sourceMaps.value) {
for (const sourceMap of vueDocument.getSourceMaps()) {
map.set(sourceMap.mappedDocument, vueDocument);
}
}
Expand All @@ -126,7 +125,7 @@ export function parseVueDocuments(
const embeddedDocumentsMapLsType = computed(() => {
const map = new Map<string, EmbeddedDocumentSourceMap>();
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);
}
}
Expand All @@ -135,34 +134,34 @@ export function parseVueDocuments(
const teleportsMapLsType = computed(() => {
const map = new Map<string, TeleportSourceMap>();
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);
}
}
return map;
});

return {
getAll: untrack(getAll),
get: untrack((uri: string) => {
getAll: getAll,
get: (uri: string) => {

const fileName = shared.uriToFsPath(uri);
const vueFile = vueLsCtx.sourceFiles.get(fileName);

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,
Expand Down Expand Up @@ -201,7 +200,7 @@ export function parseVueDocuments(
},
};
}
}),
},
};

function getAll() {
Expand Down Expand Up @@ -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,
};


Expand Down
41 changes: 20 additions & 21 deletions packages/vue-typescript/src/documentRegistry.ts
Expand Up @@ -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<typeof createDocumentRegistry> { }
Expand All @@ -21,11 +20,11 @@ export function createDocumentRegistry() {
function createDocumentRegistryBase<T extends EmbeddedLangaugeSourceFile>() {

const files = shallowReactive<Record<string, T>>({});
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<EmbeddedFile, T>();
for (const sourceFile of arr.value) {
for (const sourceFile of all.value) {
for (const embedded of sourceFile.getAllEmbeddeds()) {
map.set(embedded.file, sourceFile);
}
Expand All @@ -34,7 +33,7 @@ function createDocumentRegistryBase<T extends EmbeddedLangaugeSourceFile>() {
});
const sourceMapsByFileName = computed(() => {
const map = new Map<string, { vueFile: T, embedded: Embedded; }>();
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 });
}
Expand All @@ -56,23 +55,23 @@ function createDocumentRegistryBase<T extends EmbeddedLangaugeSourceFile>() {
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,
Expand Down Expand Up @@ -111,16 +110,16 @@ function createDocumentRegistryBase<T extends EmbeddedLangaugeSourceFile>() {
},
};
}
}),
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());
}),
},
};
}
21 changes: 10 additions & 11 deletions packages/vue-typescript/src/sourceFile.ts
Expand Up @@ -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';
Expand Down Expand Up @@ -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,
Expand Down
10 changes: 0 additions & 10 deletions packages/vue-typescript/src/utils/untrack.ts

This file was deleted.

0 comments on commit 768e649

Please sign in to comment.