@vue/typescript-plugin 3.0.6 → 3.0.7-alpha.1
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 +73 -36
- package/lib/common.d.ts +1 -1
- package/lib/common.js +7 -7
- package/lib/requests/collectExtractProps.d.ts +3 -2
- package/lib/requests/collectExtractProps.js +6 -13
- package/lib/requests/getComponentDirectives.d.ts +2 -2
- package/lib/requests/getComponentDirectives.js +2 -9
- package/lib/requests/getComponentEvents.d.ts +2 -2
- package/lib/requests/getComponentEvents.js +3 -11
- package/lib/requests/getComponentNames.d.ts +2 -2
- package/lib/requests/getComponentNames.js +2 -9
- package/lib/requests/getComponentProps.d.ts +2 -2
- package/lib/requests/getComponentProps.js +3 -11
- package/lib/requests/getComponentSlots.d.ts +3 -2
- package/lib/requests/getComponentSlots.js +3 -9
- package/lib/requests/getElementAttrs.d.ts +2 -2
- package/lib/requests/getElementAttrs.js +3 -11
- package/lib/requests/getElementNames.d.ts +2 -2
- package/lib/requests/getElementNames.js +2 -9
- package/lib/requests/getImportPathForFile.d.ts +1 -2
- package/lib/requests/getImportPathForFile.js +3 -5
- package/lib/requests/getPropertiesAtLocation.d.ts +3 -2
- package/lib/requests/getPropertiesAtLocation.js +4 -12
- package/lib/requests/index.d.ts +14 -15
- package/lib/requests/utils.d.ts +2 -3
- package/lib/requests/utils.js +4 -6
- package/package.json +3 -3
package/index.js
CHANGED
|
@@ -23,7 +23,7 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
|
|
|
23
23
|
languagePlugins: [languagePlugin],
|
|
24
24
|
setup: language => {
|
|
25
25
|
project2Service.set(info.project, [language, info.languageServiceHost, info.languageService]);
|
|
26
|
-
info.languageService = (0, common_1.createVueLanguageServiceProxy)(ts, language, info.languageService, vueOptions);
|
|
26
|
+
info.languageService = (0, common_1.createVueLanguageServiceProxy)(ts, language, info.languageService, vueOptions, fileName => fileName);
|
|
27
27
|
// #3963
|
|
28
28
|
const timer = setInterval(() => {
|
|
29
29
|
if (info.project['program']) {
|
|
@@ -60,84 +60,121 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
|
|
|
60
60
|
if (session.handlers.has('_vue:projectInfo')) {
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
|
-
session.addProtocolHandler('_vue:projectInfo',
|
|
64
|
-
return session.handlers.get('projectInfo')?.(
|
|
63
|
+
session.addProtocolHandler('_vue:projectInfo', request => {
|
|
64
|
+
return session.handlers.get('projectInfo')?.(request);
|
|
65
65
|
});
|
|
66
|
-
session.addProtocolHandler('_vue:documentHighlights-full',
|
|
67
|
-
return session.handlers.get('documentHighlights-full')?.(
|
|
66
|
+
session.addProtocolHandler('_vue:documentHighlights-full', request => {
|
|
67
|
+
return session.handlers.get('documentHighlights-full')?.(request);
|
|
68
68
|
});
|
|
69
|
-
session.addProtocolHandler('_vue:encodedSemanticClassifications-full',
|
|
70
|
-
return session.handlers.get('encodedSemanticClassifications-full')?.(
|
|
69
|
+
session.addProtocolHandler('_vue:encodedSemanticClassifications-full', request => {
|
|
70
|
+
return session.handlers.get('encodedSemanticClassifications-full')?.(request);
|
|
71
71
|
});
|
|
72
|
-
session.addProtocolHandler('_vue:quickinfo',
|
|
73
|
-
return session.handlers.get('quickinfo')?.(
|
|
72
|
+
session.addProtocolHandler('_vue:quickinfo', request => {
|
|
73
|
+
return session.handlers.get('quickinfo')?.(request);
|
|
74
74
|
});
|
|
75
|
-
session.addProtocolHandler('_vue:collectExtractProps',
|
|
75
|
+
session.addProtocolHandler('_vue:collectExtractProps', request => {
|
|
76
|
+
const [fileName, templateCodeRange] = request.arguments;
|
|
77
|
+
const { language, program, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
|
|
76
78
|
return {
|
|
77
|
-
response: collectExtractProps_1.collectExtractProps
|
|
79
|
+
response: (0, collectExtractProps_1.collectExtractProps)(ts, language, program, sourceScript, virtualCode, templateCodeRange, true),
|
|
78
80
|
};
|
|
79
81
|
});
|
|
80
|
-
session.addProtocolHandler('_vue:getImportPathForFile',
|
|
82
|
+
session.addProtocolHandler('_vue:getImportPathForFile', request => {
|
|
83
|
+
const [fileName, incomingFileName, preferences] = request.arguments;
|
|
84
|
+
const { languageServiceHost, program } = getLanguageService(fileName);
|
|
81
85
|
return {
|
|
82
|
-
response: getImportPathForFile_1.getImportPathForFile
|
|
86
|
+
response: (0, getImportPathForFile_1.getImportPathForFile)(ts, languageServiceHost, program, fileName, incomingFileName, preferences),
|
|
83
87
|
};
|
|
84
88
|
});
|
|
85
|
-
session.addProtocolHandler('_vue:getPropertiesAtLocation',
|
|
89
|
+
session.addProtocolHandler('_vue:getPropertiesAtLocation', request => {
|
|
90
|
+
const [fileName, position] = request.arguments;
|
|
91
|
+
const { language, program, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
|
|
86
92
|
return {
|
|
87
|
-
response: getPropertiesAtLocation_1.getPropertiesAtLocation
|
|
93
|
+
response: (0, getPropertiesAtLocation_1.getPropertiesAtLocation)(ts, language, program, sourceScript, virtualCode, position, true),
|
|
88
94
|
};
|
|
89
95
|
});
|
|
90
|
-
session.addProtocolHandler('_vue:getComponentDirectives',
|
|
96
|
+
session.addProtocolHandler('_vue:getComponentDirectives', request => {
|
|
97
|
+
const [fileName] = request.arguments;
|
|
98
|
+
const { program } = getLanguageService(fileName);
|
|
91
99
|
return {
|
|
92
|
-
response: getComponentDirectives_1.getComponentDirectives
|
|
100
|
+
response: (0, getComponentDirectives_1.getComponentDirectives)(ts, program, fileName),
|
|
93
101
|
};
|
|
94
102
|
});
|
|
95
|
-
session.addProtocolHandler('_vue:getComponentEvents',
|
|
103
|
+
session.addProtocolHandler('_vue:getComponentEvents', request => {
|
|
104
|
+
const [fileName, tag] = request.arguments;
|
|
105
|
+
const { program } = getLanguageService(fileName);
|
|
96
106
|
return {
|
|
97
|
-
response: getComponentEvents_1.getComponentEvents
|
|
107
|
+
response: (0, getComponentEvents_1.getComponentEvents)(ts, program, fileName, tag),
|
|
98
108
|
};
|
|
99
109
|
});
|
|
100
|
-
session.addProtocolHandler('_vue:getComponentNames',
|
|
110
|
+
session.addProtocolHandler('_vue:getComponentNames', request => {
|
|
111
|
+
const [fileName] = request.arguments;
|
|
112
|
+
const { program } = getLanguageService(fileName);
|
|
101
113
|
return {
|
|
102
|
-
response: getComponentNames_1.getComponentNames
|
|
114
|
+
response: (0, getComponentNames_1.getComponentNames)(ts, program, fileName),
|
|
103
115
|
};
|
|
104
116
|
});
|
|
105
|
-
session.addProtocolHandler('_vue:getComponentProps',
|
|
117
|
+
session.addProtocolHandler('_vue:getComponentProps', request => {
|
|
118
|
+
const [fileName, tag] = request.arguments;
|
|
119
|
+
const { program } = getLanguageService(fileName);
|
|
106
120
|
return {
|
|
107
|
-
response: getComponentProps_1.getComponentProps
|
|
121
|
+
response: (0, getComponentProps_1.getComponentProps)(ts, program, fileName, tag),
|
|
108
122
|
};
|
|
109
123
|
});
|
|
110
|
-
session.addProtocolHandler('_vue:getComponentSlots',
|
|
124
|
+
session.addProtocolHandler('_vue:getComponentSlots', request => {
|
|
125
|
+
const [fileName] = request.arguments;
|
|
126
|
+
const { program, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
|
|
111
127
|
return {
|
|
112
|
-
response: getComponentSlots_1.getComponentSlots
|
|
128
|
+
response: (0, getComponentSlots_1.getComponentSlots)(ts, program, virtualCode),
|
|
113
129
|
};
|
|
114
130
|
});
|
|
115
|
-
session.addProtocolHandler('_vue:getElementAttrs',
|
|
131
|
+
session.addProtocolHandler('_vue:getElementAttrs', request => {
|
|
132
|
+
const [fileName, tag] = request.arguments;
|
|
133
|
+
const { program } = getLanguageService(fileName);
|
|
116
134
|
return {
|
|
117
|
-
response: getElementAttrs_1.getElementAttrs
|
|
135
|
+
response: (0, getElementAttrs_1.getElementAttrs)(ts, program, fileName, tag),
|
|
118
136
|
};
|
|
119
137
|
});
|
|
120
|
-
session.addProtocolHandler('_vue:getElementNames',
|
|
138
|
+
session.addProtocolHandler('_vue:getElementNames', request => {
|
|
139
|
+
const [fileName] = request.arguments;
|
|
140
|
+
const { program } = getLanguageService(fileName);
|
|
121
141
|
return {
|
|
122
|
-
response: getElementNames_1.getElementNames
|
|
142
|
+
response: (0, getElementNames_1.getElementNames)(ts, program, fileName),
|
|
123
143
|
};
|
|
124
144
|
});
|
|
125
145
|
projectService.logger.info('Vue specific commands are successfully added.');
|
|
126
146
|
}
|
|
127
|
-
function
|
|
128
|
-
const
|
|
147
|
+
function getLanguageServiceAndVirtualCode(fileName) {
|
|
148
|
+
const service = getLanguageService(fileName);
|
|
149
|
+
const sourceScript = service?.language.scripts.get(fileName);
|
|
150
|
+
if (!sourceScript) {
|
|
151
|
+
throw new Error('No source script found for file: ' + fileName);
|
|
152
|
+
}
|
|
153
|
+
const virtualCode = sourceScript.generated?.root;
|
|
154
|
+
if (!(virtualCode instanceof vue.VueVirtualCode)) {
|
|
155
|
+
throw new Error('No virtual code found for file: ' + fileName);
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
...service,
|
|
159
|
+
sourceScript,
|
|
160
|
+
virtualCode,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function getLanguageService(fileName) {
|
|
164
|
+
const { project } = info.session.getFileAndProject({
|
|
129
165
|
file: fileName,
|
|
130
166
|
projectFileName: undefined,
|
|
131
167
|
});
|
|
132
|
-
const service = project2Service.get(
|
|
168
|
+
const service = project2Service.get(project);
|
|
133
169
|
if (!service) {
|
|
134
|
-
throw 'No
|
|
170
|
+
throw new Error('No vue service for project: ' + project.getProjectName());
|
|
135
171
|
}
|
|
172
|
+
const [language, languageServiceHost, languageService] = service;
|
|
136
173
|
return {
|
|
137
174
|
typescript: ts,
|
|
138
|
-
|
|
139
|
-
languageServiceHost
|
|
140
|
-
language
|
|
175
|
+
program: languageService.getProgram(),
|
|
176
|
+
languageServiceHost,
|
|
177
|
+
language,
|
|
141
178
|
};
|
|
142
179
|
}
|
|
143
180
|
});
|
package/lib/common.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type Language, type VueCompilerOptions } from '@vue/language-core';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
|
-
export declare function createVueLanguageServiceProxy(ts: typeof import('typescript'), language: Language<
|
|
3
|
+
export declare function createVueLanguageServiceProxy<T>(ts: typeof import('typescript'), language: Language<T>, languageService: ts.LanguageService, vueOptions: VueCompilerOptions, asScriptId: (fileName: string) => T): ts.LanguageService;
|
package/lib/common.js
CHANGED
|
@@ -4,18 +4,18 @@ exports.createVueLanguageServiceProxy = createVueLanguageServiceProxy;
|
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
5
|
const shared_1 = require("@vue/shared");
|
|
6
6
|
const windowsPathReg = /\\/g;
|
|
7
|
-
function createVueLanguageServiceProxy(ts, language, languageService, vueOptions) {
|
|
7
|
+
function createVueLanguageServiceProxy(ts, language, languageService, vueOptions, asScriptId) {
|
|
8
8
|
const proxyCache = new Map();
|
|
9
9
|
const getProxyMethod = (target, p) => {
|
|
10
10
|
switch (p) {
|
|
11
11
|
case 'getCompletionsAtPosition':
|
|
12
|
-
return getCompletionsAtPosition(ts, language, vueOptions, target[p]);
|
|
12
|
+
return getCompletionsAtPosition(ts, language, asScriptId, vueOptions, target[p]);
|
|
13
13
|
case 'getCompletionEntryDetails':
|
|
14
14
|
return getCompletionEntryDetails(language, target[p]);
|
|
15
15
|
case 'getCodeFixesAtPosition':
|
|
16
16
|
return getCodeFixesAtPosition(target[p]);
|
|
17
17
|
case 'getDefinitionAndBoundSpan':
|
|
18
|
-
return getDefinitionAndBoundSpan(ts, language, languageService, vueOptions, target[p]);
|
|
18
|
+
return getDefinitionAndBoundSpan(ts, language, asScriptId, languageService, vueOptions, target[p]);
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
21
|
return new Proxy(languageService, {
|
|
@@ -36,7 +36,7 @@ function createVueLanguageServiceProxy(ts, language, languageService, vueOptions
|
|
|
36
36
|
},
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
-
function getCompletionsAtPosition(ts, language, vueOptions, getCompletionsAtPosition) {
|
|
39
|
+
function getCompletionsAtPosition(ts, language, asScriptId, vueOptions, getCompletionsAtPosition) {
|
|
40
40
|
return (filePath, position, options, formattingSettings) => {
|
|
41
41
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
42
42
|
const result = getCompletionsAtPosition(fileName, position, options, formattingSettings);
|
|
@@ -45,7 +45,7 @@ function getCompletionsAtPosition(ts, language, vueOptions, getCompletionsAtPosi
|
|
|
45
45
|
result.entries = result.entries.filter(entry => !entry.name.includes('__VLS_')
|
|
46
46
|
&& !entry.labelDetails?.description?.includes('__VLS_'));
|
|
47
47
|
// filter global variables in template and styles
|
|
48
|
-
const sourceScript = language.scripts.get(fileName);
|
|
48
|
+
const sourceScript = language.scripts.get(asScriptId(fileName));
|
|
49
49
|
const root = sourceScript?.generated?.root;
|
|
50
50
|
if (root instanceof language_core_1.VueVirtualCode) {
|
|
51
51
|
const blocks = [
|
|
@@ -153,14 +153,14 @@ function getCodeFixesAtPosition(getCodeFixesAtPosition) {
|
|
|
153
153
|
return result;
|
|
154
154
|
};
|
|
155
155
|
}
|
|
156
|
-
function getDefinitionAndBoundSpan(ts, language, languageService, vueOptions, getDefinitionAndBoundSpan) {
|
|
156
|
+
function getDefinitionAndBoundSpan(ts, language, asScriptId, languageService, vueOptions, getDefinitionAndBoundSpan) {
|
|
157
157
|
return (fileName, position) => {
|
|
158
158
|
const result = getDefinitionAndBoundSpan(fileName, position);
|
|
159
159
|
if (!result?.definitions?.length) {
|
|
160
160
|
return result;
|
|
161
161
|
}
|
|
162
162
|
const program = languageService.getProgram();
|
|
163
|
-
const sourceScript = language.scripts.get(fileName);
|
|
163
|
+
const sourceScript = language.scripts.get(asScriptId(fileName));
|
|
164
164
|
if (!sourceScript?.generated) {
|
|
165
165
|
return result;
|
|
166
166
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Language, type SourceScript, type VueVirtualCode } from '@vue/language-core';
|
|
2
|
+
import type * as ts from 'typescript';
|
|
2
3
|
interface ExtractPropsInfo {
|
|
3
4
|
name: string;
|
|
4
5
|
type: string;
|
|
5
6
|
model: boolean;
|
|
6
7
|
}
|
|
7
|
-
export declare function collectExtractProps(
|
|
8
|
+
export declare function collectExtractProps(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, templateCodeRange: [number, number], isTsPlugin: boolean): ExtractPropsInfo[];
|
|
8
9
|
export {};
|
|
@@ -2,20 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.collectExtractProps = collectExtractProps;
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
|
-
function collectExtractProps(
|
|
6
|
-
const { typescript: ts, languageService, language } = this;
|
|
7
|
-
const sourceScript = language.scripts.get(fileName);
|
|
8
|
-
const root = sourceScript?.generated?.root;
|
|
9
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
10
|
-
return [];
|
|
11
|
-
}
|
|
5
|
+
function collectExtractProps(ts, language, program, sourceScript, virtualCode, templateCodeRange, isTsPlugin) {
|
|
12
6
|
const result = new Map();
|
|
13
|
-
const
|
|
14
|
-
const sourceFile = program.getSourceFile(fileName);
|
|
7
|
+
const sourceFile = program.getSourceFile(virtualCode.fileName);
|
|
15
8
|
const checker = program.getTypeChecker();
|
|
16
|
-
const
|
|
17
|
-
const maps =
|
|
18
|
-
const { sfc } =
|
|
9
|
+
const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(virtualCode);
|
|
10
|
+
const maps = serviceScript ? [...language.maps.forEach(serviceScript.code)].map(([, map]) => map) : [];
|
|
11
|
+
const { sfc } = virtualCode;
|
|
19
12
|
sourceFile.forEachChild(function visit(node) {
|
|
20
13
|
if (ts.isPropertyAccessExpression(node)
|
|
21
14
|
&& ts.isIdentifier(node.expression)
|
|
@@ -24,7 +17,7 @@ function collectExtractProps(fileName, templateCodeRange) {
|
|
|
24
17
|
const { name } = node;
|
|
25
18
|
for (const map of maps) {
|
|
26
19
|
let mapped = false;
|
|
27
|
-
for (const source of map.toSourceLocation(name.getEnd() - sourceScript.snapshot.getLength())) {
|
|
20
|
+
for (const source of map.toSourceLocation(name.getEnd() - (isTsPlugin ? sourceScript.snapshot.getLength() : 0))) {
|
|
28
21
|
if (source[0] >= sfc.template.startTagEnd + templateCodeRange[0]
|
|
29
22
|
&& source[0] <= sfc.template.startTagEnd + templateCodeRange[1]
|
|
30
23
|
&& (0, language_core_1.isSemanticTokensEnabled)(source[1].data)) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export declare function getComponentDirectives(
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
export declare function getComponentDirectives(ts: typeof import('typescript'), program: ts.Program, fileName: string): string[];
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getComponentDirectives = getComponentDirectives;
|
|
4
|
-
const language_core_1 = require("@vue/language-core");
|
|
5
4
|
const utils_1 = require("./utils");
|
|
6
5
|
const builtInDirectives = new Set([
|
|
7
6
|
'vBind',
|
|
@@ -11,14 +10,8 @@ const builtInDirectives = new Set([
|
|
|
11
10
|
'vShow',
|
|
12
11
|
'vSlot',
|
|
13
12
|
]);
|
|
14
|
-
function getComponentDirectives(fileName) {
|
|
15
|
-
const
|
|
16
|
-
const sourceScript = language.scripts.get(fileName);
|
|
17
|
-
const root = sourceScript?.generated?.root;
|
|
18
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
19
|
-
return [];
|
|
20
|
-
}
|
|
21
|
-
const directives = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_directives');
|
|
13
|
+
function getComponentDirectives(ts, program, fileName) {
|
|
14
|
+
const directives = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_directives');
|
|
22
15
|
if (!directives) {
|
|
23
16
|
return [];
|
|
24
17
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export declare function getComponentEvents(
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
export declare function getComponentEvents(ts: typeof import('typescript'), program: ts.Program, fileName: string, tag: string): string[];
|
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getComponentEvents = getComponentEvents;
|
|
4
|
-
const language_core_1 = require("@vue/language-core");
|
|
5
4
|
const utils_1 = require("./utils");
|
|
6
|
-
function getComponentEvents(fileName, tag) {
|
|
7
|
-
const { typescript: ts, language, languageService } = this;
|
|
8
|
-
const sourceScript = language.scripts.get(fileName);
|
|
9
|
-
const root = sourceScript?.generated?.root;
|
|
10
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const program = languageService.getProgram();
|
|
5
|
+
function getComponentEvents(ts, program, fileName, tag) {
|
|
14
6
|
const checker = program.getTypeChecker();
|
|
15
|
-
const components = (0, utils_1.getVariableType)(ts,
|
|
7
|
+
const components = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_components');
|
|
16
8
|
if (!components) {
|
|
17
9
|
return [];
|
|
18
10
|
}
|
|
19
|
-
const componentType = (0, utils_1.getComponentType)(ts,
|
|
11
|
+
const componentType = (0, utils_1.getComponentType)(ts, program, fileName, components, tag);
|
|
20
12
|
if (!componentType) {
|
|
21
13
|
return [];
|
|
22
14
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export declare function getComponentNames(
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
export declare function getComponentNames(ts: typeof import('typescript'), program: ts.Program, fileName: string): string[];
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getComponentNames = getComponentNames;
|
|
4
|
-
const language_core_1 = require("@vue/language-core");
|
|
5
4
|
const utils_1 = require("./utils");
|
|
6
|
-
function getComponentNames(fileName) {
|
|
7
|
-
const
|
|
8
|
-
const sourceScript = language.scripts.get(fileName);
|
|
9
|
-
const root = sourceScript?.generated?.root;
|
|
10
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const names = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_components')
|
|
5
|
+
function getComponentNames(ts, program, fileName) {
|
|
6
|
+
const names = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_components')
|
|
14
7
|
?.type
|
|
15
8
|
?.getProperties()
|
|
16
9
|
.map(c => c.name)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
2
|
export interface ComponentPropInfo {
|
|
3
3
|
name: string;
|
|
4
4
|
required?: boolean;
|
|
@@ -7,4 +7,4 @@ export interface ComponentPropInfo {
|
|
|
7
7
|
documentation?: string;
|
|
8
8
|
values?: string[];
|
|
9
9
|
}
|
|
10
|
-
export declare function getComponentProps(
|
|
10
|
+
export declare function getComponentProps(ts: typeof import('typescript'), program: ts.Program, fileName: string, tag: string): ComponentPropInfo[];
|
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getComponentProps = getComponentProps;
|
|
4
|
-
const language_core_1 = require("@vue/language-core");
|
|
5
4
|
const utils_1 = require("./utils");
|
|
6
|
-
function getComponentProps(fileName, tag) {
|
|
7
|
-
const
|
|
8
|
-
const sourceScript = language.scripts.get(fileName);
|
|
9
|
-
const root = sourceScript?.generated?.root;
|
|
10
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const components = (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_components');
|
|
5
|
+
function getComponentProps(ts, program, fileName, tag) {
|
|
6
|
+
const components = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_components');
|
|
14
7
|
if (!components) {
|
|
15
8
|
return [];
|
|
16
9
|
}
|
|
17
|
-
const componentType = (0, utils_1.getComponentType)(ts,
|
|
10
|
+
const componentType = (0, utils_1.getComponentType)(ts, program, fileName, components, tag);
|
|
18
11
|
if (!componentType) {
|
|
19
12
|
return [];
|
|
20
13
|
}
|
|
21
14
|
const result = new Map();
|
|
22
|
-
const program = languageService.getProgram();
|
|
23
15
|
const checker = program.getTypeChecker();
|
|
24
16
|
for (const sig of componentType.getCallSignatures()) {
|
|
25
17
|
const propParam = sig.parameters[0];
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
1
|
+
import { type VueVirtualCode } from '@vue/language-core';
|
|
2
|
+
import type * as ts from 'typescript';
|
|
3
|
+
export declare function getComponentSlots(ts: typeof import('typescript'), program: ts.Program, virtualCode: VueVirtualCode): string[];
|
|
@@ -3,19 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getComponentSlots = getComponentSlots;
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
5
|
const utils_1 = require("./utils");
|
|
6
|
-
function getComponentSlots(
|
|
7
|
-
const
|
|
8
|
-
const sourceScript = language.scripts.get(fileName);
|
|
9
|
-
const root = sourceScript?.generated?.root;
|
|
10
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const codegen = language_core_1.tsCodegen.get(root.sfc);
|
|
6
|
+
function getComponentSlots(ts, program, virtualCode) {
|
|
7
|
+
const codegen = language_core_1.tsCodegen.get(virtualCode.sfc);
|
|
14
8
|
if (!codegen) {
|
|
15
9
|
return [];
|
|
16
10
|
}
|
|
17
11
|
const assignName = codegen.getSetupSlotsAssignName() ?? `__VLS_slots`;
|
|
18
|
-
const slots = (0, utils_1.getVariableType)(ts,
|
|
12
|
+
const slots = (0, utils_1.getVariableType)(ts, program, virtualCode.fileName, assignName);
|
|
19
13
|
if (!slots) {
|
|
20
14
|
return [];
|
|
21
15
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export declare function getElementAttrs(
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
export declare function getElementAttrs(ts: typeof import('typescript'), program: ts.Program, fileName: string, tag: string): string[];
|
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getElementAttrs = getElementAttrs;
|
|
4
|
-
const language_core_1 = require("@vue/language-core");
|
|
5
4
|
const utils_1 = require("./utils");
|
|
6
|
-
function getElementAttrs(fileName,
|
|
7
|
-
const { typescript: ts, language, languageService } = this;
|
|
8
|
-
const sourceScript = language.scripts.get(fileName);
|
|
9
|
-
const root = sourceScript?.generated?.root;
|
|
10
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const program = languageService.getProgram();
|
|
5
|
+
function getElementAttrs(ts, program, fileName, tag) {
|
|
14
6
|
const checker = program.getTypeChecker();
|
|
15
|
-
const elements = (0, utils_1.getVariableType)(ts,
|
|
7
|
+
const elements = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_elements');
|
|
16
8
|
if (!elements) {
|
|
17
9
|
return [];
|
|
18
10
|
}
|
|
19
|
-
const elementType = elements.type.getProperty(
|
|
11
|
+
const elementType = elements.type.getProperty(tag);
|
|
20
12
|
if (!elementType) {
|
|
21
13
|
return [];
|
|
22
14
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export declare function getElementNames(
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
export declare function getElementNames(ts: typeof import('typescript'), program: ts.Program, fileName: string): string[];
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getElementNames = getElementNames;
|
|
4
|
-
const language_core_1 = require("@vue/language-core");
|
|
5
4
|
const utils_1 = require("./utils");
|
|
6
|
-
function getElementNames(fileName) {
|
|
7
|
-
|
|
8
|
-
const sourceScript = language.scripts.get(fileName);
|
|
9
|
-
const root = sourceScript?.generated?.root;
|
|
10
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
return (0, utils_1.getVariableType)(ts, languageService, root, '__VLS_elements')
|
|
5
|
+
function getElementNames(ts, program, fileName) {
|
|
6
|
+
return (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_elements')
|
|
14
7
|
?.type
|
|
15
8
|
?.getProperties()
|
|
16
9
|
.map(c => c.name)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type * as ts from 'typescript';
|
|
2
|
-
import
|
|
3
|
-
export declare function getImportPathForFile(this: RequestContext, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): {
|
|
2
|
+
export declare function getImportPathForFile(ts: typeof import('typescript'), languageServiceHost: ts.LanguageServiceHost, program: ts.Program, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): {
|
|
4
3
|
path?: string;
|
|
5
4
|
};
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getImportPathForFile = getImportPathForFile;
|
|
4
|
-
function getImportPathForFile(fileName, incomingFileName, preferences) {
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const incomingFile = program?.getSourceFile(incomingFileName);
|
|
8
|
-
const sourceFile = program?.getSourceFile(fileName);
|
|
4
|
+
function getImportPathForFile(ts, languageServiceHost, program, fileName, incomingFileName, preferences) {
|
|
5
|
+
const incomingFile = program.getSourceFile(incomingFileName);
|
|
6
|
+
const sourceFile = program.getSourceFile(fileName);
|
|
9
7
|
if (!program || !sourceFile || !incomingFile) {
|
|
10
8
|
return {};
|
|
11
9
|
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
1
|
+
import { type Language, type SourceScript, type VueVirtualCode } from '@vue/language-core';
|
|
2
|
+
import type * as ts from 'typescript';
|
|
3
|
+
export declare function getPropertiesAtLocation(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, position: number, isTsPlugin: boolean): string[];
|
|
@@ -3,15 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.getPropertiesAtLocation = getPropertiesAtLocation;
|
|
5
5
|
const language_core_1 = require("@vue/language-core");
|
|
6
|
-
function getPropertiesAtLocation(
|
|
7
|
-
const
|
|
8
|
-
// mapping
|
|
9
|
-
const sourceScript = language.scripts.get(fileName);
|
|
10
|
-
const root = sourceScript?.generated?.root;
|
|
11
|
-
if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
|
|
12
|
-
return [];
|
|
13
|
-
}
|
|
14
|
-
const virtualScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(root);
|
|
6
|
+
function getPropertiesAtLocation(ts, language, program, sourceScript, virtualCode, position, isTsPlugin) {
|
|
7
|
+
const virtualScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(virtualCode);
|
|
15
8
|
if (!virtualScript) {
|
|
16
9
|
return [];
|
|
17
10
|
}
|
|
@@ -31,9 +24,8 @@ function getPropertiesAtLocation(fileName, position) {
|
|
|
31
24
|
if (!mapped) {
|
|
32
25
|
return [];
|
|
33
26
|
}
|
|
34
|
-
position += sourceScript.snapshot.getLength();
|
|
35
|
-
const
|
|
36
|
-
const sourceFile = program.getSourceFile(fileName);
|
|
27
|
+
position += isTsPlugin ? sourceScript.snapshot.getLength() : 0;
|
|
28
|
+
const sourceFile = program.getSourceFile(virtualCode.fileName);
|
|
37
29
|
if (!sourceFile) {
|
|
38
30
|
return [];
|
|
39
31
|
}
|
package/lib/requests/index.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import type * as ts from 'typescript';
|
|
2
|
-
type
|
|
3
|
-
type MaybePromise<T> = T | Promise<T>;
|
|
2
|
+
type Response<T> = T | null | undefined | Promise<T | null | undefined>;
|
|
4
3
|
export interface Requests {
|
|
5
|
-
collectExtractProps:
|
|
6
|
-
getImportPathForFile:
|
|
7
|
-
getPropertiesAtLocation:
|
|
8
|
-
getComponentDirectives:
|
|
9
|
-
getComponentEvents:
|
|
10
|
-
getComponentNames:
|
|
11
|
-
getComponentProps:
|
|
12
|
-
getComponentSlots:
|
|
13
|
-
getElementAttrs:
|
|
14
|
-
getElementNames:
|
|
15
|
-
getDocumentHighlights
|
|
16
|
-
getEncodedSemanticClassifications
|
|
17
|
-
getQuickInfoAtPosition
|
|
4
|
+
collectExtractProps(fileName: string, templateCodeRange: [number, number]): Response<ReturnType<typeof import('./collectExtractProps.js')['collectExtractProps']>>;
|
|
5
|
+
getImportPathForFile(fileName: string, incomingFileName: string, preferences: ts.UserPreferences): Response<ReturnType<typeof import('./getImportPathForFile.js')['getImportPathForFile']>>;
|
|
6
|
+
getPropertiesAtLocation(fileName: string, position: number): Response<ReturnType<typeof import('./getPropertiesAtLocation.js')['getPropertiesAtLocation']>>;
|
|
7
|
+
getComponentDirectives(fileName: string): Response<ReturnType<typeof import('./getComponentDirectives.js')['getComponentDirectives']>>;
|
|
8
|
+
getComponentEvents(fileName: string, tag: string): Response<ReturnType<typeof import('./getComponentEvents.js')['getComponentEvents']>>;
|
|
9
|
+
getComponentNames(fileName: string): Response<ReturnType<typeof import('./getComponentNames.js')['getComponentNames']>>;
|
|
10
|
+
getComponentProps(fileName: string, tag: string): Response<ReturnType<typeof import('./getComponentProps.js')['getComponentProps']>>;
|
|
11
|
+
getComponentSlots(fileName: string): Response<ReturnType<typeof import('./getComponentSlots.js')['getComponentSlots']>>;
|
|
12
|
+
getElementAttrs(fileName: string, tag: string): Response<ReturnType<typeof import('./getElementAttrs.js')['getElementAttrs']>>;
|
|
13
|
+
getElementNames(fileName: string): Response<ReturnType<typeof import('./getElementNames.js')['getElementNames']>>;
|
|
14
|
+
getDocumentHighlights(fileName: string, position: number): Response<ts.DocumentHighlights[]>;
|
|
15
|
+
getEncodedSemanticClassifications(fileName: string, span: ts.TextSpan): Response<ts.Classifications>;
|
|
16
|
+
getQuickInfoAtPosition(fileName: string, position: ts.LineAndCharacter): Response<string>;
|
|
18
17
|
}
|
|
19
18
|
export {};
|
package/lib/requests/utils.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { VueVirtualCode } from '@vue/language-core';
|
|
2
1
|
import type * as ts from 'typescript';
|
|
3
|
-
export declare function getComponentType(ts: typeof import('typescript'),
|
|
2
|
+
export declare function getComponentType(ts: typeof import('typescript'), program: ts.Program, fileName: string, components: NonNullable<ReturnType<typeof getVariableType>>, tag: string): ts.Type | undefined;
|
|
4
3
|
export declare function getSelfComponentName(fileName: string): Capitalize<string>;
|
|
5
|
-
export declare function getVariableType(ts: typeof import('typescript'),
|
|
4
|
+
export declare function getVariableType(ts: typeof import('typescript'), program: ts.Program, fileName: string, name: string): {
|
|
6
5
|
node: ts.Node;
|
|
7
6
|
type: ts.Type;
|
|
8
7
|
} | undefined;
|
package/lib/requests/utils.js
CHANGED
|
@@ -5,8 +5,7 @@ exports.getSelfComponentName = getSelfComponentName;
|
|
|
5
5
|
exports.getVariableType = getVariableType;
|
|
6
6
|
const shared_1 = require("@vue/shared");
|
|
7
7
|
const path = require("path-browserify");
|
|
8
|
-
function getComponentType(ts,
|
|
9
|
-
const program = languageService.getProgram();
|
|
8
|
+
function getComponentType(ts, program, fileName, components, tag) {
|
|
10
9
|
const checker = program.getTypeChecker();
|
|
11
10
|
const name = tag.split('.');
|
|
12
11
|
let componentSymbol = components.type.getProperty(name[0])
|
|
@@ -16,7 +15,7 @@ function getComponentType(ts, languageService, vueCode, components, fileName, ta
|
|
|
16
15
|
if (!componentSymbol) {
|
|
17
16
|
const name = getSelfComponentName(fileName);
|
|
18
17
|
if (name === (0, shared_1.capitalize)((0, shared_1.camelize)(tag))) {
|
|
19
|
-
componentType = getVariableType(ts,
|
|
18
|
+
componentType = getVariableType(ts, program, fileName, '__VLS_self')?.type;
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
21
|
else {
|
|
@@ -34,9 +33,8 @@ function getSelfComponentName(fileName) {
|
|
|
34
33
|
const baseName = path.basename(fileName);
|
|
35
34
|
return (0, shared_1.capitalize)((0, shared_1.camelize)(baseName.slice(0, baseName.lastIndexOf('.'))));
|
|
36
35
|
}
|
|
37
|
-
function getVariableType(ts,
|
|
38
|
-
const
|
|
39
|
-
const tsSourceFile = program.getSourceFile(vueCode.fileName);
|
|
36
|
+
function getVariableType(ts, program, fileName, name) {
|
|
37
|
+
const tsSourceFile = program.getSourceFile(fileName);
|
|
40
38
|
if (tsSourceFile) {
|
|
41
39
|
const checker = program.getTypeChecker();
|
|
42
40
|
const node = searchVariableDeclarationNode(ts, tsSourceFile, name);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue/typescript-plugin",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.7-alpha.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@volar/typescript": "2.4.23",
|
|
17
|
-
"@vue/language-core": "3.0.
|
|
17
|
+
"@vue/language-core": "3.0.7-alpha.1",
|
|
18
18
|
"@vue/shared": "^3.5.0",
|
|
19
19
|
"path-browserify": "^1.0.1"
|
|
20
20
|
},
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
"@types/node": "^22.10.4",
|
|
23
23
|
"@types/path-browserify": "^1.0.1"
|
|
24
24
|
},
|
|
25
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "320fc626c871e9ff17c0e4e92ea7ddb0c7641f34"
|
|
26
26
|
}
|