@volar/typescript 2.3.0-alpha.13 → 2.3.0-alpha.15
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.
- package/lib/node/decorateLanguageService.js +6 -6
- package/lib/node/decorateProgram.js +6 -6
- package/lib/quickstart/createAsyncLanguageServicePlugin.js +8 -11
- package/lib/quickstart/createLanguageServicePlugin.d.ts +4 -0
- package/lib/quickstart/createLanguageServicePlugin.js +15 -15
- package/package.json +4 -4
|
@@ -486,36 +486,36 @@ function decorateLanguageService(language, languageService) {
|
|
|
486
486
|
};
|
|
487
487
|
languageService.getSyntacticDiagnostics = filePath => {
|
|
488
488
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
489
|
-
const [
|
|
489
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
490
490
|
if (targetScript?.associatedOnly) {
|
|
491
491
|
return [];
|
|
492
492
|
}
|
|
493
493
|
return getSyntacticDiagnostics(targetScript?.id ?? fileName)
|
|
494
494
|
.map(d => (0, transform_1.transformDiagnostic)(language, d, languageService.getProgram(), false))
|
|
495
495
|
.filter(utils_1.notEmpty)
|
|
496
|
-
.filter(d => language.scripts.get(d.file.fileName) === sourceScript);
|
|
496
|
+
.filter(d => !serviceScript || language.scripts.get(d.file.fileName) === sourceScript);
|
|
497
497
|
};
|
|
498
498
|
languageService.getSemanticDiagnostics = filePath => {
|
|
499
499
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
500
|
-
const [
|
|
500
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
501
501
|
if (targetScript?.associatedOnly) {
|
|
502
502
|
return [];
|
|
503
503
|
}
|
|
504
504
|
return getSemanticDiagnostics(targetScript?.id ?? fileName)
|
|
505
505
|
.map(d => (0, transform_1.transformDiagnostic)(language, d, languageService.getProgram(), false))
|
|
506
506
|
.filter(utils_1.notEmpty)
|
|
507
|
-
.filter(d => !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
507
|
+
.filter(d => !serviceScript || !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
508
508
|
};
|
|
509
509
|
languageService.getSuggestionDiagnostics = filePath => {
|
|
510
510
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
511
|
-
const [
|
|
511
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
512
512
|
if (targetScript?.associatedOnly) {
|
|
513
513
|
return [];
|
|
514
514
|
}
|
|
515
515
|
return getSuggestionDiagnostics(targetScript?.id ?? fileName)
|
|
516
516
|
.map(d => (0, transform_1.transformDiagnostic)(language, d, languageService.getProgram(), false))
|
|
517
517
|
.filter(utils_1.notEmpty)
|
|
518
|
-
.filter(d => !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
518
|
+
.filter(d => !serviceScript || !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
519
519
|
};
|
|
520
520
|
languageService.getDefinitionAndBoundSpan = (filePath, position) => {
|
|
521
521
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
@@ -29,12 +29,12 @@ function decorateProgram(language, program) {
|
|
|
29
29
|
.filter(utils_1.notEmpty);
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
const [
|
|
32
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, sourceFile.fileName);
|
|
33
33
|
const actualSourceFile = targetScript ? program.getSourceFile(targetScript.id) : sourceFile;
|
|
34
34
|
return getSyntacticDiagnostics(actualSourceFile, cancellationToken)
|
|
35
35
|
.map(d => (0, transform_1.transformDiagnostic)(language, d, program, true))
|
|
36
36
|
.filter(utils_1.notEmpty)
|
|
37
|
-
.filter(d => !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
37
|
+
.filter(d => !serviceScript || !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
program.getSemanticDiagnostics = (sourceFile, cancellationToken) => {
|
|
@@ -44,12 +44,12 @@ function decorateProgram(language, program) {
|
|
|
44
44
|
.filter(utils_1.notEmpty);
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
const [
|
|
47
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, sourceFile.fileName);
|
|
48
48
|
const actualSourceFile = targetScript ? program.getSourceFile(targetScript.id) : sourceFile;
|
|
49
49
|
return getSemanticDiagnostics(actualSourceFile, cancellationToken)
|
|
50
50
|
.map(d => (0, transform_1.transformDiagnostic)(language, d, program, true))
|
|
51
51
|
.filter(utils_1.notEmpty)
|
|
52
|
-
.filter(d => !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
52
|
+
.filter(d => !serviceScript || !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
55
|
program.getGlobalDiagnostics = cancellationToken => {
|
|
@@ -65,12 +65,12 @@ function decorateProgram(language, program) {
|
|
|
65
65
|
.filter(utils_1.notEmpty);
|
|
66
66
|
}
|
|
67
67
|
else {
|
|
68
|
-
const [
|
|
68
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, sourceFile.fileName);
|
|
69
69
|
const actualSourceFile = targetScript ? program.getSourceFile(targetScript.id) : sourceFile;
|
|
70
70
|
return getBindAndCheckDiagnostics(actualSourceFile, cancellationToken)
|
|
71
71
|
.map(d => (0, transform_1.transformDiagnostic)(language, d, program, true))
|
|
72
72
|
.filter(utils_1.notEmpty)
|
|
73
|
-
.filter(d => language.scripts.get(d.file.fileName) === sourceScript);
|
|
73
|
+
.filter(d => !serviceScript || language.scripts.get(d.file.fileName) === sourceScript);
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
76
|
// fix https://github.com/vuejs/language-tools/issues/4099 with `incremental`
|
|
@@ -6,18 +6,15 @@ const common_1 = require("../common");
|
|
|
6
6
|
const decorateLanguageService_1 = require("../node/decorateLanguageService");
|
|
7
7
|
const decorateLanguageServiceHost_1 = require("../node/decorateLanguageServiceHost");
|
|
8
8
|
const createLanguageServicePlugin_1 = require("./createLanguageServicePlugin");
|
|
9
|
-
const externalFiles = new WeakMap();
|
|
10
|
-
const decoratedLanguageServices = new WeakSet();
|
|
11
|
-
const decoratedLanguageServiceHosts = new WeakSet();
|
|
12
9
|
function createAsyncLanguageServicePlugin(extensions, scriptKind, create) {
|
|
13
10
|
return modules => {
|
|
14
11
|
const { typescript: ts } = modules;
|
|
15
12
|
const pluginModule = {
|
|
16
13
|
create(info) {
|
|
17
|
-
if (!decoratedLanguageServices.has(info.languageService)
|
|
18
|
-
&& !decoratedLanguageServiceHosts.has(info.languageServiceHost)) {
|
|
19
|
-
decoratedLanguageServices.add(info.languageService);
|
|
20
|
-
decoratedLanguageServiceHosts.add(info.languageServiceHost);
|
|
14
|
+
if (!createLanguageServicePlugin_1.decoratedLanguageServices.has(info.languageService)
|
|
15
|
+
&& !createLanguageServicePlugin_1.decoratedLanguageServiceHosts.has(info.languageServiceHost)) {
|
|
16
|
+
createLanguageServicePlugin_1.decoratedLanguageServices.add(info.languageService);
|
|
17
|
+
createLanguageServicePlugin_1.decoratedLanguageServiceHosts.add(info.languageServiceHost);
|
|
21
18
|
const emptySnapshot = ts.ScriptSnapshot.fromString('');
|
|
22
19
|
const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost);
|
|
23
20
|
const getScriptVersion = info.languageServiceHost.getScriptVersion.bind(info.languageServiceHost);
|
|
@@ -82,15 +79,15 @@ function createAsyncLanguageServicePlugin(extensions, scriptKind, create) {
|
|
|
82
79
|
},
|
|
83
80
|
getExternalFiles(project, updateLevel = 0) {
|
|
84
81
|
if (updateLevel >= (1)
|
|
85
|
-
|| !externalFiles.has(project)) {
|
|
86
|
-
const oldFiles = externalFiles.get(project);
|
|
82
|
+
|| !createLanguageServicePlugin_1.externalFiles.has(project)) {
|
|
83
|
+
const oldFiles = createLanguageServicePlugin_1.externalFiles.get(project);
|
|
87
84
|
const newFiles = extensions.length ? (0, decorateLanguageServiceHost_1.searchExternalFiles)(ts, project, extensions) : [];
|
|
88
|
-
externalFiles.set(project, newFiles);
|
|
85
|
+
createLanguageServicePlugin_1.externalFiles.set(project, newFiles);
|
|
89
86
|
if (oldFiles && !(0, createLanguageServicePlugin_1.arrayItemsEqual)(oldFiles, newFiles)) {
|
|
90
87
|
project.refreshDiagnostics();
|
|
91
88
|
}
|
|
92
89
|
}
|
|
93
|
-
return externalFiles.get(project);
|
|
90
|
+
return createLanguageServicePlugin_1.externalFiles.get(project);
|
|
94
91
|
},
|
|
95
92
|
};
|
|
96
93
|
return pluginModule;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { Language, LanguagePlugin } from '@volar/language-core';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
|
+
export declare const externalFiles: WeakMap<ts.server.Project, string[]>;
|
|
4
|
+
export declare const projectExternalFileExtensions: WeakMap<ts.server.Project, string[]>;
|
|
5
|
+
export declare const decoratedLanguageServices: WeakSet<ts.LanguageService>;
|
|
6
|
+
export declare const decoratedLanguageServiceHosts: WeakSet<ts.LanguageServiceHost>;
|
|
3
7
|
export declare function createLanguageServicePlugin(create: (ts: typeof import('typescript'), info: ts.server.PluginCreateInfo) => {
|
|
4
8
|
languagePlugins: LanguagePlugin<string>[];
|
|
5
9
|
setup?: (language: Language<string>) => void;
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.arrayItemsEqual = exports.createLanguageServicePlugin = void 0;
|
|
3
|
+
exports.arrayItemsEqual = exports.createLanguageServicePlugin = exports.decoratedLanguageServiceHosts = exports.decoratedLanguageServices = exports.projectExternalFileExtensions = exports.externalFiles = void 0;
|
|
4
4
|
const language_core_1 = require("@volar/language-core");
|
|
5
5
|
const common_1 = require("../common");
|
|
6
6
|
const decorateLanguageService_1 = require("../node/decorateLanguageService");
|
|
7
7
|
const decorateLanguageServiceHost_1 = require("../node/decorateLanguageServiceHost");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
exports.externalFiles = new WeakMap();
|
|
9
|
+
exports.projectExternalFileExtensions = new WeakMap();
|
|
10
|
+
exports.decoratedLanguageServices = new WeakSet();
|
|
11
|
+
exports.decoratedLanguageServiceHosts = new WeakSet();
|
|
12
12
|
function createLanguageServicePlugin(create) {
|
|
13
13
|
return modules => {
|
|
14
14
|
const { typescript: ts } = modules;
|
|
15
15
|
const pluginModule = {
|
|
16
16
|
create(info) {
|
|
17
|
-
if (!decoratedLanguageServices.has(info.languageService)
|
|
18
|
-
&& !decoratedLanguageServiceHosts.has(info.languageServiceHost)) {
|
|
19
|
-
decoratedLanguageServices.add(info.languageService);
|
|
20
|
-
decoratedLanguageServiceHosts.add(info.languageServiceHost);
|
|
17
|
+
if (!exports.decoratedLanguageServices.has(info.languageService)
|
|
18
|
+
&& !exports.decoratedLanguageServiceHosts.has(info.languageServiceHost)) {
|
|
19
|
+
exports.decoratedLanguageServices.add(info.languageService);
|
|
20
|
+
exports.decoratedLanguageServiceHosts.add(info.languageServiceHost);
|
|
21
21
|
const { languagePlugins, setup } = create(ts, info);
|
|
22
22
|
const extensions = languagePlugins
|
|
23
23
|
.map(plugin => plugin.typescript?.extraFileExtensions.map(ext => '.' + ext.extension) ?? [])
|
|
24
24
|
.flat();
|
|
25
|
-
projectExternalFileExtensions.set(info.project, extensions);
|
|
25
|
+
exports.projectExternalFileExtensions.set(info.project, extensions);
|
|
26
26
|
const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost);
|
|
27
27
|
const getScriptVersion = info.languageServiceHost.getScriptVersion.bind(info.languageServiceHost);
|
|
28
28
|
const syncedScriptVersions = new language_core_1.FileMap(ts.sys.useCaseSensitiveFileNames);
|
|
@@ -51,16 +51,16 @@ function createLanguageServicePlugin(create) {
|
|
|
51
51
|
},
|
|
52
52
|
getExternalFiles(project, updateLevel = 0) {
|
|
53
53
|
if (updateLevel >= (1)
|
|
54
|
-
|| !externalFiles.has(project)) {
|
|
55
|
-
const oldFiles = externalFiles.get(project);
|
|
56
|
-
const extensions = projectExternalFileExtensions.get(project);
|
|
54
|
+
|| !exports.externalFiles.has(project)) {
|
|
55
|
+
const oldFiles = exports.externalFiles.get(project);
|
|
56
|
+
const extensions = exports.projectExternalFileExtensions.get(project);
|
|
57
57
|
const newFiles = extensions?.length ? (0, decorateLanguageServiceHost_1.searchExternalFiles)(ts, project, extensions) : [];
|
|
58
|
-
externalFiles.set(project, newFiles);
|
|
58
|
+
exports.externalFiles.set(project, newFiles);
|
|
59
59
|
if (oldFiles && !arrayItemsEqual(oldFiles, newFiles)) {
|
|
60
60
|
project.refreshDiagnostics();
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
return externalFiles.get(project);
|
|
63
|
+
return exports.externalFiles.get(project);
|
|
64
64
|
},
|
|
65
65
|
};
|
|
66
66
|
return pluginModule;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volar/typescript",
|
|
3
|
-
"version": "2.3.0-alpha.
|
|
3
|
+
"version": "2.3.0-alpha.15",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"directory": "packages/typescript"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/language-core": "2.3.0-alpha.
|
|
15
|
+
"@volar/language-core": "2.3.0-alpha.15",
|
|
16
16
|
"path-browserify": "^1.0.1",
|
|
17
17
|
"vscode-uri": "^3.0.8"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/node": "latest",
|
|
21
21
|
"@types/path-browserify": "latest",
|
|
22
|
-
"@volar/language-service": "2.3.0-alpha.
|
|
22
|
+
"@volar/language-service": "2.3.0-alpha.15"
|
|
23
23
|
},
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "25ab3f45d1c74f52904c703378b04a6ecbda9535"
|
|
25
25
|
}
|