@vue/typescript-plugin 2.0.4 → 2.0.6
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/README.md +33 -0
- package/index.js +31 -10
- package/lib/client.js +15 -1
- package/lib/server.js +0 -1
- package/package.json +4 -4
package/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# typescript plugin
|
|
2
|
+
|
|
3
|
+
This is a plug-in for `tsserver` or `typescript-language-server`. It must be
|
|
4
|
+
installed in a file-system location accessible by the language server or in the
|
|
5
|
+
`node_modules` directory of projects being edited.
|
|
6
|
+
|
|
7
|
+
The LSP client must be configured to explicitly enable this plug-in. This is
|
|
8
|
+
done by passing `initializationOptions` with the appropriate [`plugins`]
|
|
9
|
+
configuration to the language server:
|
|
10
|
+
|
|
11
|
+
[`plugins`]: https://github.com/typescript-language-server/typescript-language-server/blob/b224b878652438bcdd639137a6b1d1a6630129e4/docs/configuration.md?plain=1#L27-L31
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
"initializationOptions": {
|
|
15
|
+
"plugins": [
|
|
16
|
+
{
|
|
17
|
+
"name": "@vue/typescript-plugin",
|
|
18
|
+
"location": "/usr/local/lib/node_modules/@vue/typescript-plugin",
|
|
19
|
+
"languages": ["javascript", "typescript", "vue"],
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The `languages` field must specify file-types for which the plug-in will be
|
|
26
|
+
enabled. If the plug-in package is installed in the local `node_modules`, the
|
|
27
|
+
`location` field may contain any arbitrary string, but MUST be present.
|
|
28
|
+
|
|
29
|
+
## Client-specific configuration
|
|
30
|
+
|
|
31
|
+
- For neovim, see the [details on configuring `tsserver`][nvim].
|
|
32
|
+
|
|
33
|
+
[nvim]: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#vue-support
|
package/index.js
CHANGED
|
@@ -22,13 +22,30 @@ function createLanguageServicePlugin() {
|
|
|
22
22
|
decoratedLanguageServices.add(info.languageService);
|
|
23
23
|
decoratedLanguageServiceHosts.add(info.languageServiceHost);
|
|
24
24
|
const vueOptions = vue.resolveVueCompilerOptions(getVueCompilerOptions());
|
|
25
|
-
const languagePlugin = vue.createVueLanguagePlugin(ts, id => id,
|
|
25
|
+
const languagePlugin = vue.createVueLanguagePlugin(ts, id => id, fileName => {
|
|
26
|
+
if (info.languageServiceHost.useCaseSensitiveFileNames?.() ?? false) {
|
|
27
|
+
return externalFiles.get(info.project)?.has(fileName) ?? false;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const lowerFileName = fileName.toLowerCase();
|
|
31
|
+
for (const externalFile of externalFiles.get(info.project) ?? []) {
|
|
32
|
+
if (externalFile.toLowerCase() === lowerFileName) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}, info.languageServiceHost.getCompilationSettings(), vueOptions);
|
|
26
39
|
const extensions = languagePlugin.typescript?.extraFileExtensions.map(ext => '.' + ext.extension) ?? [];
|
|
27
40
|
const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost);
|
|
28
41
|
const files = (0, language_core_1.createFileRegistry)([languagePlugin], ts.sys.useCaseSensitiveFileNames, fileName => {
|
|
29
42
|
const snapshot = getScriptSnapshot(fileName);
|
|
30
43
|
if (snapshot) {
|
|
31
|
-
|
|
44
|
+
let languageId = (0, language_core_1.resolveCommonLanguageId)(fileName);
|
|
45
|
+
if (extensions.some(ext => fileName.endsWith(ext))) {
|
|
46
|
+
languageId = 'vue';
|
|
47
|
+
}
|
|
48
|
+
files.set(fileName, languageId, snapshot);
|
|
32
49
|
}
|
|
33
50
|
else {
|
|
34
51
|
files.delete(fileName);
|
|
@@ -168,25 +185,29 @@ function createLanguageServicePlugin() {
|
|
|
168
185
|
if (updateLevel >= (1)
|
|
169
186
|
|| !externalFiles.has(project)) {
|
|
170
187
|
const oldFiles = externalFiles.get(project);
|
|
171
|
-
const newFiles = (0, decorateLanguageServiceHost_1.searchExternalFiles)(ts, project, projectExternalFileExtensions.get(project));
|
|
188
|
+
const newFiles = new Set((0, decorateLanguageServiceHost_1.searchExternalFiles)(ts, project, projectExternalFileExtensions.get(project)));
|
|
172
189
|
externalFiles.set(project, newFiles);
|
|
173
|
-
if (oldFiles && !
|
|
190
|
+
if (oldFiles && !twoSetsEqual(oldFiles, newFiles)) {
|
|
191
|
+
for (const oldFile of oldFiles) {
|
|
192
|
+
if (!newFiles.has(oldFile)) {
|
|
193
|
+
utils_1.projects.get(project)?.files.delete(oldFile);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
174
196
|
project.refreshDiagnostics();
|
|
175
197
|
}
|
|
176
198
|
}
|
|
177
|
-
return externalFiles.get(project);
|
|
199
|
+
return [...externalFiles.get(project)];
|
|
178
200
|
},
|
|
179
201
|
};
|
|
180
202
|
return pluginModule;
|
|
181
203
|
};
|
|
182
204
|
}
|
|
183
|
-
function
|
|
184
|
-
if (a.
|
|
205
|
+
function twoSetsEqual(a, b) {
|
|
206
|
+
if (a.size !== b.size) {
|
|
185
207
|
return false;
|
|
186
208
|
}
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
if (!set.has(file)) {
|
|
209
|
+
for (const file of a) {
|
|
210
|
+
if (!b.has(file)) {
|
|
190
211
|
return false;
|
|
191
212
|
}
|
|
192
213
|
}
|
package/lib/client.js
CHANGED
|
@@ -110,9 +110,23 @@ function sendRequestWorker(request, client) {
|
|
|
110
110
|
dataChunks.push(chunk);
|
|
111
111
|
});
|
|
112
112
|
client.on('end', () => {
|
|
113
|
+
if (!dataChunks.length) {
|
|
114
|
+
console.warn('[Vue Named Pipe Client] No response from server for request:', request.type);
|
|
115
|
+
resolve(undefined);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
113
118
|
const data = Buffer.concat(dataChunks);
|
|
114
119
|
const text = data.toString();
|
|
115
|
-
|
|
120
|
+
let json = null;
|
|
121
|
+
try {
|
|
122
|
+
json = JSON.parse(text);
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
console.error('[Vue Named Pipe Client] Failed to parse response:', text);
|
|
126
|
+
resolve(undefined);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
resolve(json);
|
|
116
130
|
});
|
|
117
131
|
client.write(JSON.stringify(request));
|
|
118
132
|
});
|
package/lib/server.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue/typescript-plugin",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
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.1.
|
|
16
|
-
"@vue/language-core": "2.0.
|
|
15
|
+
"@volar/typescript": "~2.1.2",
|
|
16
|
+
"@vue/language-core": "2.0.6",
|
|
17
17
|
"@vue/shared": "^3.4.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/node": "latest"
|
|
21
21
|
},
|
|
22
|
-
"gitHead": "
|
|
22
|
+
"gitHead": "feb990ccec85f6330bba37c8b1d1287f0980274c"
|
|
23
23
|
}
|