Skip to content

Commit 426eaa1

Browse files
authored
Fix Vue auto-import completions with Astro extension (#17791)
1 parent 493796b commit 426eaa1

5 files changed

Lines changed: 55 additions & 5 deletions

File tree

.changeset/legal-pets-leave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'astro-vscode': patch
3+
---
4+
5+
Fixes missing Vue template auto-import completions when the Astro extension loads first
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'mocha';
2+
import assert from 'node:assert';
3+
import type { Language } from '@volar/language-core';
4+
import { createProxyLanguageService } from '@volar/typescript/lib/node/proxyLanguageService.js';
5+
import type ts from 'typescript';
6+
7+
suite('Proxy language service', () => {
8+
test('uses language service methods assigned by a later plugin', () => {
9+
let called = 'original';
10+
const languageService = {
11+
getCompletionsAtPosition() {
12+
called = 'original';
13+
},
14+
} as unknown as ts.LanguageService;
15+
const { initialize, proxy } = createProxyLanguageService(languageService);
16+
17+
initialize({ scripts: { get: () => undefined } } as unknown as Language<string>);
18+
void proxy.getCompletionsAtPosition;
19+
proxy.getCompletionsAtPosition = () => {
20+
called = 'decorated';
21+
return undefined;
22+
};
23+
proxy.getCompletionsAtPosition('component.vue', 0, undefined);
24+
25+
assert.strictEqual(called, 'decorated');
26+
});
27+
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
diff --git a/lib/node/proxyLanguageService.js b/lib/node/proxyLanguageService.js
2+
index 95f2cc3ef6336b7762bcd0a5036af27b114367a5..9b0c9e0a68bed912737dd8d2179afe21997277f7 100644
3+
--- a/lib/node/proxyLanguageService.js
4+
+++ b/lib/node/proxyLanguageService.js
5+
@@ -112,6 +112,7 @@ function createProxyLanguageService(languageService) {
6+
return Reflect.get(target, p, receiver);
7+
},
8+
set(target, p, value, receiver) {
9+
+ proxyCache.delete(p);
10+
return Reflect.set(target, p, value, receiver);
11+
},
12+
}),

pnpm-lock.yaml

Lines changed: 8 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,6 @@ allowBuilds:
101101
protobufjs: false
102102
sharp: false
103103
workerd: false
104+
105+
patchedDependencies:
106+
'@volar/typescript@2.4.28': patches/@volar__typescript@2.4.28.patch

0 commit comments

Comments
 (0)