@volar/typescript 2.1.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type FileRegistry } from '@volar/language-core';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
|
-
export declare function decorateLanguageServiceHost(
|
|
3
|
+
export declare function decorateLanguageServiceHost(virtualFiles: FileRegistry, languageServiceHost: ts.LanguageServiceHost, ts: typeof import('typescript')): void;
|
|
4
4
|
export declare function searchExternalFiles(ts: typeof import('typescript'), project: ts.server.Project, exts: string[]): string[];
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.searchExternalFiles = exports.decorateLanguageServiceHost = void 0;
|
|
4
|
+
const language_core_1 = require("@volar/language-core");
|
|
4
5
|
const resolveModuleName_1 = require("../resolveModuleName");
|
|
5
|
-
function decorateLanguageServiceHost(
|
|
6
|
+
function decorateLanguageServiceHost(virtualFiles, languageServiceHost, ts) {
|
|
6
7
|
let extraProjectVersion = 0;
|
|
7
|
-
const { languagePlugins } =
|
|
8
|
+
const { languagePlugins } = virtualFiles;
|
|
8
9
|
const exts = languagePlugins
|
|
9
10
|
.map(plugin => plugin.typescript?.extraFileExtensions.map(ext => '.' + ext.extension) ?? [])
|
|
10
11
|
.flat();
|
|
@@ -14,7 +15,6 @@ function decorateLanguageServiceHost(files, languageServiceHost, ts) {
|
|
|
14
15
|
const resolveModuleNames = languageServiceHost.resolveModuleNames?.bind(languageServiceHost);
|
|
15
16
|
const getProjectVersion = languageServiceHost.getProjectVersion?.bind(languageServiceHost);
|
|
16
17
|
const getScriptSnapshot = languageServiceHost.getScriptSnapshot.bind(languageServiceHost);
|
|
17
|
-
const getScriptVersion = languageServiceHost.getScriptVersion.bind(languageServiceHost);
|
|
18
18
|
const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost);
|
|
19
19
|
// path completion
|
|
20
20
|
if (readDirectory) {
|
|
@@ -30,7 +30,7 @@ function decorateLanguageServiceHost(files, languageServiceHost, ts) {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
if (languagePlugins.some(language => language.typescript?.extraFileExtensions.length)) {
|
|
33
|
-
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, languageServiceHost, languagePlugins, fileName =>
|
|
33
|
+
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, languageServiceHost, languagePlugins, fileName => virtualFiles.get(fileName));
|
|
34
34
|
if (resolveModuleNameLiterals) {
|
|
35
35
|
languageServiceHost.resolveModuleNameLiterals = (moduleLiterals, containingFile, redirectedReference, options, ...rest) => {
|
|
36
36
|
if (moduleLiterals.every(name => !exts.some(ext => name.text.endsWith(ext)))) {
|
|
@@ -64,13 +64,6 @@ function decorateLanguageServiceHost(files, languageServiceHost, ts) {
|
|
|
64
64
|
}
|
|
65
65
|
return getScriptSnapshot(fileName);
|
|
66
66
|
};
|
|
67
|
-
languageServiceHost.getScriptVersion = fileName => {
|
|
68
|
-
if (exts.some(ext => fileName.endsWith(ext))) {
|
|
69
|
-
updateScript(fileName);
|
|
70
|
-
return scripts.get(fileName)?.version.toString() ?? '';
|
|
71
|
-
}
|
|
72
|
-
return getScriptVersion(fileName);
|
|
73
|
-
};
|
|
74
67
|
if (getScriptKind) {
|
|
75
68
|
languageServiceHost.getScriptKind = fileName => {
|
|
76
69
|
if (exts.some(ext => fileName.endsWith(ext))) {
|
|
@@ -85,52 +78,40 @@ function decorateLanguageServiceHost(files, languageServiceHost, ts) {
|
|
|
85
78
|
};
|
|
86
79
|
}
|
|
87
80
|
function updateScript(fileName) {
|
|
88
|
-
const version =
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
let snapshotSnapshot;
|
|
96
|
-
let scriptKind = ts.ScriptKind.TS;
|
|
81
|
+
const version = languageServiceHost.getScriptVersion(fileName);
|
|
82
|
+
if (version !== scripts.get(fileName)?.version) {
|
|
83
|
+
let extension = '.ts';
|
|
84
|
+
let snapshotSnapshot;
|
|
85
|
+
let scriptKind = ts.ScriptKind.TS;
|
|
86
|
+
const snapshot = getScriptSnapshot(fileName);
|
|
87
|
+
if (snapshot) {
|
|
97
88
|
extraProjectVersion++;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
const sourceFile = virtualFiles.set(fileName, (0, language_core_1.resolveCommonLanguageId)(fileName), snapshot);
|
|
90
|
+
if (sourceFile.generated) {
|
|
91
|
+
const text = snapshot.getText(0, snapshot.getLength());
|
|
92
|
+
let patchedText = text.split('\n').map(line => ' '.repeat(line.length)).join('\n');
|
|
93
|
+
const script = sourceFile.generated.languagePlugin.typescript?.getScript(sourceFile.generated.code);
|
|
94
|
+
if (script) {
|
|
102
95
|
extension = script.extension;
|
|
103
96
|
scriptKind = script.scriptKind;
|
|
104
97
|
patchedText += script.code.snapshot.getText(0, script.code.snapshot.getLength());
|
|
105
|
-
snapshotSnapshot = ts.ScriptSnapshot.fromString(patchedText);
|
|
106
|
-
if (file.generated.languagePlugin.typescript?.getExtraScripts) {
|
|
107
|
-
console.warn('getExtraScripts() is not available in this use case.');
|
|
108
|
-
}
|
|
109
98
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (!cache) {
|
|
115
|
-
scripts.set(fileName, {
|
|
116
|
-
projectVersion: version,
|
|
117
|
-
version: 0,
|
|
118
|
-
extension,
|
|
119
|
-
snapshot: snapshotSnapshot,
|
|
120
|
-
kind: scriptKind,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
cache.projectVersion = version;
|
|
125
|
-
cache.version++;
|
|
126
|
-
cache.extension = extension;
|
|
127
|
-
cache.snapshot = snapshotSnapshot;
|
|
128
|
-
cache.kind = scriptKind;
|
|
99
|
+
snapshotSnapshot = ts.ScriptSnapshot.fromString(patchedText);
|
|
100
|
+
if (sourceFile.generated.languagePlugin.typescript?.getExtraScripts) {
|
|
101
|
+
console.warn('getExtraScripts() is not available in this use case.');
|
|
102
|
+
}
|
|
129
103
|
}
|
|
130
104
|
}
|
|
131
|
-
else if (
|
|
132
|
-
|
|
105
|
+
else if (virtualFiles.get(fileName)) {
|
|
106
|
+
extraProjectVersion++;
|
|
107
|
+
virtualFiles.delete(fileName);
|
|
133
108
|
}
|
|
109
|
+
scripts.set(fileName, {
|
|
110
|
+
version,
|
|
111
|
+
extension,
|
|
112
|
+
snapshot: snapshotSnapshot,
|
|
113
|
+
kind: scriptKind,
|
|
114
|
+
});
|
|
134
115
|
}
|
|
135
116
|
return scripts.get(fileName);
|
|
136
117
|
}
|
|
@@ -12,11 +12,10 @@ function decorateProgram(files, program) {
|
|
|
12
12
|
// for tsc --noEmit --watch
|
|
13
13
|
// @ts-ignore
|
|
14
14
|
const getBindAndCheckDiagnostics = program.getBindAndCheckDiagnostics;
|
|
15
|
-
program.emit = (
|
|
16
|
-
const result = emit(
|
|
15
|
+
program.emit = (...args) => {
|
|
16
|
+
const result = emit(...args);
|
|
17
17
|
return {
|
|
18
|
-
|
|
19
|
-
emittedFiles: result.emittedFiles,
|
|
18
|
+
...result,
|
|
20
19
|
diagnostics: result.diagnostics
|
|
21
20
|
.map(d => (0, transform_1.transformDiagnostic)(files, d))
|
|
22
21
|
.filter(utils_1.notEmpty),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volar/typescript",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
"directory": "packages/typescript"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/language-core": "2.1.
|
|
15
|
+
"@volar/language-core": "2.1.3",
|
|
16
16
|
"path-browserify": "^1.0.1"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@types/node": "latest",
|
|
20
20
|
"@types/path-browserify": "latest",
|
|
21
|
-
"@volar/language-service": "2.1.
|
|
21
|
+
"@volar/language-service": "2.1.3"
|
|
22
22
|
},
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "0f861d59faa19cbeadef182ee079be88f9629fc7"
|
|
24
24
|
}
|