@vue/typescript-plugin 2.0.7 → 2.0.10
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/index.js +15 -26
- package/lib/client.d.ts +1 -0
- package/lib/client.js +8 -1
- package/lib/common.d.ts +1 -1
- package/lib/common.js +13 -28
- package/lib/requests/collectExtractProps.d.ts +2 -2
- package/lib/requests/collectExtractProps.js +6 -6
- package/lib/requests/componentInfos.d.ts +5 -5
- package/lib/requests/componentInfos.js +19 -19
- package/lib/requests/getImportPathForFile.d.ts +6 -0
- package/lib/requests/getImportPathForFile.js +20 -0
- package/lib/requests/getPropertiesAtLocation.d.ts +2 -2
- package/lib/requests/getPropertiesAtLocation.js +4 -4
- package/lib/server.d.ts +3 -3
- package/lib/server.js +11 -6
- package/package.json +4 -4
package/index.js
CHANGED
|
@@ -20,40 +20,29 @@ function createLanguageServicePlugin() {
|
|
|
20
20
|
decoratedLanguageServices.add(info.languageService);
|
|
21
21
|
decoratedLanguageServiceHosts.add(info.languageServiceHost);
|
|
22
22
|
const vueOptions = getVueCompilerOptions();
|
|
23
|
-
const languagePlugin = vue.createVueLanguagePlugin(ts, id => id,
|
|
24
|
-
if (info.languageServiceHost.useCaseSensitiveFileNames?.() ?? false) {
|
|
25
|
-
return externalFiles.get(info.project)?.has(fileName) ?? false;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const lowerFileName = fileName.toLowerCase();
|
|
29
|
-
for (const externalFile of externalFiles.get(info.project) ?? []) {
|
|
30
|
-
if (externalFile.toLowerCase() === lowerFileName) {
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
}, info.languageServiceHost.getCompilationSettings(), vueOptions);
|
|
23
|
+
const languagePlugin = vue.createVueLanguagePlugin(ts, id => id, info.languageServiceHost.useCaseSensitiveFileNames?.() ?? false, () => info.languageServiceHost.getProjectVersion?.() ?? '', () => externalFiles.get(info.project) ?? [], info.languageServiceHost.getCompilationSettings(), vueOptions);
|
|
37
24
|
const extensions = languagePlugin.typescript?.extraFileExtensions.map(ext => '.' + ext.extension) ?? [];
|
|
38
25
|
const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost);
|
|
39
|
-
const
|
|
26
|
+
const getLanguageId = (fileName) => {
|
|
27
|
+
if (extensions.some(ext => fileName.endsWith(ext))) {
|
|
28
|
+
return 'vue';
|
|
29
|
+
}
|
|
30
|
+
return (0, language_core_1.resolveCommonLanguageId)(fileName);
|
|
31
|
+
};
|
|
32
|
+
const language = (0, language_core_1.createLanguage)([languagePlugin], ts.sys.useCaseSensitiveFileNames, fileName => {
|
|
40
33
|
const snapshot = getScriptSnapshot(fileName);
|
|
41
34
|
if (snapshot) {
|
|
42
|
-
|
|
43
|
-
if (extensions.some(ext => fileName.endsWith(ext))) {
|
|
44
|
-
languageId = 'vue';
|
|
45
|
-
}
|
|
46
|
-
files.set(fileName, languageId, snapshot);
|
|
35
|
+
language.scripts.set(fileName, getLanguageId(fileName), snapshot);
|
|
47
36
|
}
|
|
48
37
|
else {
|
|
49
|
-
|
|
38
|
+
language.scripts.delete(fileName);
|
|
50
39
|
}
|
|
51
40
|
});
|
|
52
41
|
projectExternalFileExtensions.set(info.project, extensions);
|
|
53
|
-
server_1.projects.set(info.project, { info,
|
|
54
|
-
(0, decorateLanguageService_1.decorateLanguageService)(
|
|
55
|
-
(0, common_1.decorateLanguageServiceForVue)(
|
|
56
|
-
(0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(
|
|
42
|
+
server_1.projects.set(info.project, { info, language, vueOptions });
|
|
43
|
+
(0, decorateLanguageService_1.decorateLanguageService)(language, info.languageService);
|
|
44
|
+
(0, common_1.decorateLanguageServiceForVue)(language, info.languageService, vueOptions, ts, true);
|
|
45
|
+
(0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(ts, language, info.languageServiceHost, getLanguageId);
|
|
57
46
|
(0, server_1.startNamedPipeServer)(ts, info.project.projectKind, info.project.getCurrentDirectory());
|
|
58
47
|
}
|
|
59
48
|
return info.languageService;
|
|
@@ -76,7 +65,7 @@ function createLanguageServicePlugin() {
|
|
|
76
65
|
if (oldFiles && !twoSetsEqual(oldFiles, newFiles)) {
|
|
77
66
|
for (const oldFile of oldFiles) {
|
|
78
67
|
if (!newFiles.has(oldFile)) {
|
|
79
|
-
server_1.projects.get(project)?.
|
|
68
|
+
server_1.projects.get(project)?.language.scripts.delete(oldFile);
|
|
80
69
|
}
|
|
81
70
|
}
|
|
82
71
|
project.refreshDiagnostics();
|
package/lib/client.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare function collectExtractProps(...args: Parameters<typeof import('.
|
|
|
3
3
|
type: string;
|
|
4
4
|
model: boolean;
|
|
5
5
|
}[] | null | undefined>;
|
|
6
|
+
export declare function getImportPathForFile(...args: Parameters<typeof import('./requests/getImportPathForFile.js')['getImportPathForFile']>): Promise<string | null | undefined>;
|
|
6
7
|
export declare function getPropertiesAtLocation(...args: Parameters<typeof import('./requests/getPropertiesAtLocation.js')['getPropertiesAtLocation']>): Promise<string[] | null | undefined>;
|
|
7
8
|
export declare function getQuickInfoAtPosition(...args: Parameters<typeof import('./requests/getQuickInfoAtPosition.js')['getQuickInfoAtPosition']>): Promise<import("typescript").QuickInfo | null | undefined>;
|
|
8
9
|
export declare function getComponentProps(...args: Parameters<typeof import('./requests/componentInfos.js')['getComponentProps']>): Promise<string[] | null | undefined>;
|
package/lib/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getElementAttrs = exports.getComponentNames = exports.getTemplateContextProps = exports.getComponentEvents = exports.getComponentProps = exports.getQuickInfoAtPosition = exports.getPropertiesAtLocation = exports.collectExtractProps = void 0;
|
|
3
|
+
exports.getElementAttrs = exports.getComponentNames = exports.getTemplateContextProps = exports.getComponentEvents = exports.getComponentProps = exports.getQuickInfoAtPosition = exports.getPropertiesAtLocation = exports.getImportPathForFile = exports.collectExtractProps = void 0;
|
|
4
4
|
const utils_1 = require("./utils");
|
|
5
5
|
function collectExtractProps(...args) {
|
|
6
6
|
return sendRequest({
|
|
@@ -9,6 +9,13 @@ function collectExtractProps(...args) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
exports.collectExtractProps = collectExtractProps;
|
|
12
|
+
async function getImportPathForFile(...args) {
|
|
13
|
+
return await sendRequest({
|
|
14
|
+
type: 'getImportPathForFile',
|
|
15
|
+
args,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.getImportPathForFile = getImportPathForFile;
|
|
12
19
|
async function getPropertiesAtLocation(...args) {
|
|
13
20
|
return await sendRequest({
|
|
14
21
|
type: 'getPropertiesAtLocation',
|
package/lib/common.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as vue from '@vue/language-core';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
|
-
export declare function decorateLanguageServiceForVue(
|
|
3
|
+
export declare function decorateLanguageServiceForVue(language: vue.Language, languageService: ts.LanguageService, vueOptions: vue.VueCompilerOptions, ts: typeof import('typescript'), isTsPlugin: boolean): void;
|
|
4
4
|
export declare function getComponentSpans(this: {
|
|
5
5
|
typescript: typeof import('typescript');
|
|
6
6
|
languageService: ts.LanguageService;
|
package/lib/common.js
CHANGED
|
@@ -4,10 +4,10 @@ exports.getComponentSpans = exports.decorateLanguageServiceForVue = void 0;
|
|
|
4
4
|
const vue = require("@vue/language-core");
|
|
5
5
|
const shared_1 = require("@vue/shared");
|
|
6
6
|
const componentInfos_1 = require("./requests/componentInfos");
|
|
7
|
-
function decorateLanguageServiceForVue(
|
|
7
|
+
function decorateLanguageServiceForVue(language, languageService, vueOptions, ts, isTsPlugin) {
|
|
8
8
|
const { getCompletionsAtPosition, getCompletionEntryDetails, getCodeFixesAtPosition, getEncodedSemanticClassifications, } = languageService;
|
|
9
|
-
languageService.getCompletionsAtPosition = (fileName, position, options) => {
|
|
10
|
-
const result = getCompletionsAtPosition(fileName, position, options);
|
|
9
|
+
languageService.getCompletionsAtPosition = (fileName, position, options, formattingSettings) => {
|
|
10
|
+
const result = getCompletionsAtPosition(fileName, position, options, formattingSettings);
|
|
11
11
|
if (result) {
|
|
12
12
|
// filter __VLS_
|
|
13
13
|
result.entries = result.entries.filter(entry => entry.name.indexOf('__VLS_') === -1
|
|
@@ -67,11 +67,11 @@ function decorateLanguageServiceForVue(files, languageService, vueOptions, ts, i
|
|
|
67
67
|
if (isTsPlugin) {
|
|
68
68
|
languageService.getEncodedSemanticClassifications = (fileName, span, format) => {
|
|
69
69
|
const result = getEncodedSemanticClassifications(fileName, span, format);
|
|
70
|
-
const file =
|
|
71
|
-
if (file?.generated?.
|
|
72
|
-
const { template } = file.generated.
|
|
70
|
+
const file = language.scripts.get(fileName);
|
|
71
|
+
if (file?.generated?.root instanceof vue.VueGeneratedCode) {
|
|
72
|
+
const { template } = file.generated.root.sfc;
|
|
73
73
|
if (template) {
|
|
74
|
-
for (const componentSpan of getComponentSpans.call({ typescript: ts, languageService, vueOptions }, file.generated.
|
|
74
|
+
for (const componentSpan of getComponentSpans.call({ typescript: ts, languageService, vueOptions }, file.generated.root, template, {
|
|
75
75
|
start: span.start - template.startTagEnd,
|
|
76
76
|
length: span.length,
|
|
77
77
|
})) {
|
|
@@ -92,11 +92,11 @@ function getComponentSpans(vueCode, template, spanTemplateRange) {
|
|
|
92
92
|
...validComponentNames,
|
|
93
93
|
...validComponentNames.map(vue.hyphenateTag),
|
|
94
94
|
]);
|
|
95
|
-
template.ast
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
if (template.ast) {
|
|
96
|
+
for (const node of vue.forEachElementNode(template.ast)) {
|
|
97
|
+
if (node.loc.end.offset <= spanTemplateRange.start || node.loc.start.offset >= (spanTemplateRange.start + spanTemplateRange.length)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
100
|
if (components.has(node.tag)) {
|
|
101
101
|
let start = node.loc.start.offset;
|
|
102
102
|
if (template.lang === 'html') {
|
|
@@ -113,23 +113,8 @@ function getComponentSpans(vueCode, template, spanTemplateRange) {
|
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
-
for (const child of node.children) {
|
|
117
|
-
visit(child);
|
|
118
|
-
}
|
|
119
116
|
}
|
|
120
|
-
|
|
121
|
-
for (const branch of node.branches) {
|
|
122
|
-
for (const child of branch.children) {
|
|
123
|
-
visit(child);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
else if (node.type === 11) {
|
|
128
|
-
for (const child of node.children) {
|
|
129
|
-
visit(child);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
});
|
|
117
|
+
}
|
|
133
118
|
return result;
|
|
134
119
|
}
|
|
135
120
|
exports.getComponentSpans = getComponentSpans;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Language } from '@vue/language-core';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
3
|
export declare function collectExtractProps(this: {
|
|
4
4
|
typescript: typeof import('typescript');
|
|
5
5
|
languageService: ts.LanguageService;
|
|
6
|
-
|
|
6
|
+
language: Language;
|
|
7
7
|
isTsPlugin: boolean;
|
|
8
8
|
getFileId: (fileName: string) => string;
|
|
9
9
|
}, fileName: string, templateCodeRange: [number, number]): {
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.collectExtractProps = void 0;
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
5
|
function collectExtractProps(fileName, templateCodeRange) {
|
|
6
|
-
const { typescript: ts, languageService,
|
|
7
|
-
const volarFile =
|
|
8
|
-
if (!(volarFile?.generated?.
|
|
6
|
+
const { typescript: ts, languageService, language, isTsPlugin, getFileId } = this;
|
|
7
|
+
const volarFile = language.scripts.get(getFileId(fileName));
|
|
8
|
+
if (!(volarFile?.generated?.root instanceof language_core_1.VueGeneratedCode)) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
11
|
const result = new Map();
|
|
@@ -15,9 +15,9 @@ function collectExtractProps(fileName, templateCodeRange) {
|
|
|
15
15
|
}
|
|
16
16
|
const sourceFile = program.getSourceFile(fileName);
|
|
17
17
|
const checker = program.getTypeChecker();
|
|
18
|
-
const script = volarFile.generated?.languagePlugin.typescript?.
|
|
19
|
-
const maps = script ? [...
|
|
20
|
-
const sfc = volarFile.generated.
|
|
18
|
+
const script = volarFile.generated?.languagePlugin.typescript?.getServiceScript(volarFile.generated.root);
|
|
19
|
+
const maps = script ? [...language.maps.forEach(script.code).values()] : [];
|
|
20
|
+
const sfc = volarFile.generated.root.sfc;
|
|
21
21
|
sourceFile.forEachChild(function visit(node) {
|
|
22
22
|
if (ts.isPropertyAccessExpression(node)
|
|
23
23
|
&& ts.isIdentifier(node.expression)
|
|
@@ -3,27 +3,27 @@ import type * as ts from 'typescript';
|
|
|
3
3
|
export declare function getComponentProps(this: {
|
|
4
4
|
typescript: typeof import('typescript');
|
|
5
5
|
languageService: ts.LanguageService;
|
|
6
|
-
|
|
6
|
+
language: vue.Language;
|
|
7
7
|
vueOptions: vue.VueCompilerOptions;
|
|
8
8
|
getFileId: (fileName: string) => string;
|
|
9
9
|
}, fileName: string, tag: string, requiredOnly?: boolean): string[] | undefined;
|
|
10
10
|
export declare function getComponentEvents(this: {
|
|
11
11
|
typescript: typeof import('typescript');
|
|
12
12
|
languageService: ts.LanguageService;
|
|
13
|
-
|
|
13
|
+
language: vue.Language;
|
|
14
14
|
vueOptions: vue.VueCompilerOptions;
|
|
15
15
|
getFileId: (fileName: string) => string;
|
|
16
16
|
}, fileName: string, tag: string): string[] | undefined;
|
|
17
17
|
export declare function getTemplateContextProps(this: {
|
|
18
18
|
typescript: typeof import('typescript');
|
|
19
19
|
languageService: ts.LanguageService;
|
|
20
|
-
|
|
20
|
+
language: vue.Language;
|
|
21
21
|
getFileId: (fileName: string) => string;
|
|
22
22
|
}, fileName: string): string[] | undefined;
|
|
23
23
|
export declare function getComponentNames(this: {
|
|
24
24
|
typescript: typeof import('typescript');
|
|
25
25
|
languageService: ts.LanguageService;
|
|
26
|
-
|
|
26
|
+
language: vue.Language;
|
|
27
27
|
vueOptions: vue.VueCompilerOptions;
|
|
28
28
|
getFileId: (fileName: string) => string;
|
|
29
29
|
}, fileName: string): string[] | undefined;
|
|
@@ -31,6 +31,6 @@ export declare function _getComponentNames(ts: typeof import('typescript'), tsLs
|
|
|
31
31
|
export declare function getElementAttrs(this: {
|
|
32
32
|
typescript: typeof import('typescript');
|
|
33
33
|
languageService: ts.LanguageService;
|
|
34
|
-
|
|
34
|
+
language: vue.Language;
|
|
35
35
|
getFileId: (fileName: string) => string;
|
|
36
36
|
}, fileName: string, tagName: string): string[] | undefined;
|
|
@@ -4,12 +4,12 @@ exports.getElementAttrs = exports._getComponentNames = exports.getComponentNames
|
|
|
4
4
|
const vue = require("@vue/language-core");
|
|
5
5
|
const shared_1 = require("@vue/shared");
|
|
6
6
|
function getComponentProps(fileName, tag, requiredOnly = false) {
|
|
7
|
-
const { typescript: ts,
|
|
8
|
-
const volarFile =
|
|
9
|
-
if (!(volarFile?.generated?.
|
|
7
|
+
const { typescript: ts, language, vueOptions, languageService, getFileId } = this;
|
|
8
|
+
const volarFile = language.scripts.get(getFileId(fileName));
|
|
9
|
+
if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
|
-
const vueCode = volarFile.generated.
|
|
12
|
+
const vueCode = volarFile.generated.root;
|
|
13
13
|
const program = languageService.getCurrentProgram();
|
|
14
14
|
if (!program) {
|
|
15
15
|
return;
|
|
@@ -71,12 +71,12 @@ function getComponentProps(fileName, tag, requiredOnly = false) {
|
|
|
71
71
|
}
|
|
72
72
|
exports.getComponentProps = getComponentProps;
|
|
73
73
|
function getComponentEvents(fileName, tag) {
|
|
74
|
-
const { typescript: ts,
|
|
75
|
-
const volarFile =
|
|
76
|
-
if (!(volarFile?.generated?.
|
|
74
|
+
const { typescript: ts, language, vueOptions, languageService, getFileId } = this;
|
|
75
|
+
const volarFile = language.scripts.get(getFileId(fileName));
|
|
76
|
+
if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
-
const vueCode = volarFile.generated.
|
|
79
|
+
const vueCode = volarFile.generated.root;
|
|
80
80
|
const program = languageService.getCurrentProgram();
|
|
81
81
|
if (!program) {
|
|
82
82
|
return;
|
|
@@ -132,12 +132,12 @@ function getComponentEvents(fileName, tag) {
|
|
|
132
132
|
}
|
|
133
133
|
exports.getComponentEvents = getComponentEvents;
|
|
134
134
|
function getTemplateContextProps(fileName) {
|
|
135
|
-
const { typescript: ts,
|
|
136
|
-
const volarFile =
|
|
137
|
-
if (!(volarFile?.generated?.
|
|
135
|
+
const { typescript: ts, language, languageService, getFileId } = this;
|
|
136
|
+
const volarFile = language.scripts.get(getFileId(fileName));
|
|
137
|
+
if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
|
|
138
138
|
return;
|
|
139
139
|
}
|
|
140
|
-
const vueCode = volarFile.generated.
|
|
140
|
+
const vueCode = volarFile.generated.root;
|
|
141
141
|
return getVariableType(ts, languageService, vueCode, '__VLS_ctx')
|
|
142
142
|
?.type
|
|
143
143
|
?.getProperties()
|
|
@@ -145,12 +145,12 @@ function getTemplateContextProps(fileName) {
|
|
|
145
145
|
}
|
|
146
146
|
exports.getTemplateContextProps = getTemplateContextProps;
|
|
147
147
|
function getComponentNames(fileName) {
|
|
148
|
-
const { typescript: ts,
|
|
149
|
-
const volarFile =
|
|
150
|
-
if (!(volarFile?.generated?.
|
|
148
|
+
const { typescript: ts, language, vueOptions, languageService, getFileId } = this;
|
|
149
|
+
const volarFile = language.scripts.get(getFileId(fileName));
|
|
150
|
+
if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
|
-
const vueCode = volarFile.generated.
|
|
153
|
+
const vueCode = volarFile.generated.root;
|
|
154
154
|
return getVariableType(ts, languageService, vueCode, '__VLS_components')
|
|
155
155
|
?.type
|
|
156
156
|
?.getProperties()
|
|
@@ -171,9 +171,9 @@ function _getComponentNames(ts, tsLs, vueCode, vueOptions) {
|
|
|
171
171
|
}
|
|
172
172
|
exports._getComponentNames = _getComponentNames;
|
|
173
173
|
function getElementAttrs(fileName, tagName) {
|
|
174
|
-
const { typescript: ts,
|
|
175
|
-
const volarFile =
|
|
176
|
-
if (!(volarFile?.generated?.
|
|
174
|
+
const { typescript: ts, language, languageService, getFileId } = this;
|
|
175
|
+
const volarFile = language.scripts.get(getFileId(fileName));
|
|
176
|
+
if (!(volarFile?.generated?.root instanceof vue.VueGeneratedCode)) {
|
|
177
177
|
return;
|
|
178
178
|
}
|
|
179
179
|
const program = languageService.getCurrentProgram();
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
export declare function getImportPathForFile(this: {
|
|
3
|
+
typescript: typeof import('typescript');
|
|
4
|
+
languageService: ts.LanguageService;
|
|
5
|
+
languageServiceHost: ts.LanguageServiceHost;
|
|
6
|
+
}, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): string | undefined;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getImportPathForFile = void 0;
|
|
4
|
+
function getImportPathForFile(fileName, incomingFileName, preferences) {
|
|
5
|
+
const { typescript: ts, languageService, languageServiceHost } = this;
|
|
6
|
+
const program = languageService.getProgram();
|
|
7
|
+
const incomingFile = program?.getSourceFile(incomingFileName);
|
|
8
|
+
const sourceFile = program?.getSourceFile(fileName);
|
|
9
|
+
if (!program || !sourceFile || !incomingFile) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const getModuleSpecifiersWithCacheInfo = ts.moduleSpecifiers.getModuleSpecifiersWithCacheInfo;
|
|
13
|
+
const resolutionHost = ts.createModuleSpecifierResolutionHost(program, languageServiceHost);
|
|
14
|
+
const moduleSpecifiers = getModuleSpecifiersWithCacheInfo(incomingFile.symbol, program.getTypeChecker(), languageServiceHost.getCompilationSettings(), sourceFile, resolutionHost, preferences);
|
|
15
|
+
for (const moduleSpecifier of moduleSpecifiers.moduleSpecifiers) {
|
|
16
|
+
return moduleSpecifier;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.getImportPathForFile = getImportPathForFile;
|
|
20
|
+
//# sourceMappingURL=getImportPathForFile.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Language } from '@vue/language-core';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
3
|
export declare function getPropertiesAtLocation(this: {
|
|
4
4
|
typescript: typeof import('typescript');
|
|
5
5
|
languageService: ts.LanguageService;
|
|
6
|
-
|
|
6
|
+
language: Language;
|
|
7
7
|
isTsPlugin: boolean;
|
|
8
8
|
getFileId: (fileName: string) => string;
|
|
9
9
|
}, fileName: string, position: number): string[] | undefined;
|
|
@@ -3,16 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getPropertiesAtLocation = void 0;
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
5
|
function getPropertiesAtLocation(fileName, position) {
|
|
6
|
-
const { languageService,
|
|
6
|
+
const { languageService, language, typescript: ts, isTsPlugin, getFileId } = this;
|
|
7
7
|
// mapping
|
|
8
|
-
const file =
|
|
8
|
+
const file = language.scripts.get(getFileId(fileName));
|
|
9
9
|
if (file?.generated) {
|
|
10
|
-
const virtualScript = file.generated.languagePlugin.typescript?.
|
|
10
|
+
const virtualScript = file.generated.languagePlugin.typescript?.getServiceScript(file.generated.root);
|
|
11
11
|
if (!virtualScript) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
let mapped = false;
|
|
15
|
-
for (const [_1, [_2, map]] of
|
|
15
|
+
for (const [_1, [_2, map]] of language.maps.forEach(virtualScript.code)) {
|
|
16
16
|
for (const [position2, mapping] of map.getGeneratedOffsets(position)) {
|
|
17
17
|
if ((0, language_core_1.isCompletionEnabled)(mapping.data)) {
|
|
18
18
|
position = position2;
|
package/lib/server.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type * as ts from 'typescript';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Language, VueCompilerOptions } from '@vue/language-core';
|
|
3
3
|
export interface Request {
|
|
4
|
-
type: 'containsFile' | 'collectExtractProps' | 'getPropertiesAtLocation' | 'getQuickInfoAtPosition' | 'getComponentProps' | 'getComponentEvents' | 'getTemplateContextProps' | 'getComponentNames' | 'getElementAttrs';
|
|
4
|
+
type: 'containsFile' | 'collectExtractProps' | 'getImportPathForFile' | 'getPropertiesAtLocation' | 'getQuickInfoAtPosition' | 'getComponentProps' | 'getComponentEvents' | 'getTemplateContextProps' | 'getComponentNames' | 'getElementAttrs';
|
|
5
5
|
args: [fileName: string, ...rest: any];
|
|
6
6
|
}
|
|
7
7
|
export declare function startNamedPipeServer(ts: typeof import('typescript'), serverKind: ts.server.ProjectKind, currentDirectory: string): void;
|
|
8
8
|
export declare const projects: Map<ts.server.Project, {
|
|
9
9
|
info: ts.server.PluginCreateInfo;
|
|
10
|
-
|
|
10
|
+
language: Language;
|
|
11
11
|
vueOptions: VueCompilerOptions;
|
|
12
12
|
}>;
|
package/lib/server.js
CHANGED
|
@@ -5,6 +5,7 @@ const fs = require("fs");
|
|
|
5
5
|
const net = require("net");
|
|
6
6
|
const collectExtractProps_1 = require("./requests/collectExtractProps");
|
|
7
7
|
const componentInfos_1 = require("./requests/componentInfos");
|
|
8
|
+
const getImportPathForFile_1 = require("./requests/getImportPathForFile");
|
|
8
9
|
const getPropertiesAtLocation_1 = require("./requests/getPropertiesAtLocation");
|
|
9
10
|
const getQuickInfoAtPosition_1 = require("./requests/getQuickInfoAtPosition");
|
|
10
11
|
const utils_1 = require("./utils");
|
|
@@ -23,21 +24,25 @@ function startNamedPipeServer(ts, serverKind, currentDirectory) {
|
|
|
23
24
|
const request = JSON.parse(text);
|
|
24
25
|
const fileName = request.args[0];
|
|
25
26
|
const project = getProject(fileName);
|
|
26
|
-
if (
|
|
27
|
+
if (request.type === 'containsFile') {
|
|
28
|
+
connection.write(JSON.stringify(!!project));
|
|
29
|
+
}
|
|
30
|
+
else if (project) {
|
|
27
31
|
const requestContext = {
|
|
28
32
|
typescript: ts,
|
|
29
33
|
languageService: project.info.languageService,
|
|
30
|
-
|
|
34
|
+
languageServiceHost: project.info.languageServiceHost,
|
|
35
|
+
language: project.language,
|
|
31
36
|
vueOptions: project.vueOptions,
|
|
32
37
|
isTsPlugin: true,
|
|
33
38
|
getFileId: (fileName) => fileName,
|
|
34
39
|
};
|
|
35
|
-
if (request.type === '
|
|
36
|
-
const result =
|
|
40
|
+
if (request.type === 'collectExtractProps') {
|
|
41
|
+
const result = collectExtractProps_1.collectExtractProps.apply(requestContext, request.args);
|
|
37
42
|
connection.write(JSON.stringify(result ?? null));
|
|
38
43
|
}
|
|
39
|
-
else if (request.type === '
|
|
40
|
-
const result =
|
|
44
|
+
else if (request.type === 'getImportPathForFile') {
|
|
45
|
+
const result = getImportPathForFile_1.getImportPathForFile.apply(requestContext, request.args);
|
|
41
46
|
connection.write(JSON.stringify(result ?? null));
|
|
42
47
|
}
|
|
43
48
|
else if (request.type === 'getPropertiesAtLocation') {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue/typescript-plugin",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.10",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"directory": "packages/typescript-plugin"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/typescript": "~2.
|
|
16
|
-
"@vue/language-core": "2.0.
|
|
15
|
+
"@volar/typescript": "~2.2.0-alpha.5",
|
|
16
|
+
"@vue/language-core": "2.0.10",
|
|
17
17
|
"@vue/shared": "^3.4.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/node": "latest"
|
|
21
21
|
},
|
|
22
|
-
"gitHead": "
|
|
22
|
+
"gitHead": "a20a2ee950b63a949660b7e8faf0faed0e5bad33"
|
|
23
23
|
}
|