Skip to content

Commit 1d281cc

Browse files
authored
Use embedded language services (#297)
* Use embedded language services * update snapshots * add tests
1 parent 5cd15e4 commit 1d281cc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+2342
-476
lines changed

extensions/vscode-vue-language-features/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,12 +318,14 @@
318318
"dependencies": {
319319
"@vuedx/shared": "workspace:*",
320320
"@vuedx/typescript-plugin-vue": "workspace:*",
321+
"@vuedx/vue-language-server": "workspace:*",
321322
"@vuedx/vue-virtual-textdocument": "workspace:*",
322323
"fast-glob": "^3.2.4",
323324
"inversify": "^5.0.1",
324325
"json5": "^2.1.3",
325326
"node-ipc": "10.1.0",
326-
"reflect-metadata": "^0.1.13"
327+
"reflect-metadata": "^0.1.13",
328+
"vscode-languageclient": "^8.0.2"
327329
},
328330
"devDependencies": {
329331
"@types/node": "^10.12.0",
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { ExtensionContext } from 'vscode'
2+
import { LanguageClient, TransportKind } from 'vscode-languageclient/node'
3+
4+
export function createClient(context: ExtensionContext): LanguageClient {
5+
const serverModule = context.asAbsolutePath(
6+
'node_modules/@vuedx/vue-language-server/lib/index.js',
7+
)
8+
9+
return new LanguageClient(
10+
'Vue Language Features',
11+
{
12+
run: {
13+
module: serverModule,
14+
transport: TransportKind.ipc,
15+
},
16+
debug: {
17+
module: serverModule,
18+
transport: TransportKind.ipc,
19+
options: { execArgv: ['--nolazy', '--inspect=6009'] },
20+
},
21+
},
22+
{
23+
documentSelector: [{ language: 'vue' }],
24+
markdown: { isTrusted: true, supportHtml: true },
25+
},
26+
)
27+
}

extensions/vscode-vue-language-features/src/index.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import type { PluginConfig } from '@vuedx/typescript-plugin-vue'
33
import { Container } from 'inversify'
44
import 'reflect-metadata'
55
import vscode from 'vscode'
6+
import { LanguageClient } from 'vscode-languageclient/node'
7+
import { createClient } from './client'
68
import { OpenVirtualFileCommand } from './commands/openVirtualFile'
79
import { SelectVirtualFileCommand } from './commands/selectVirtualFile'
810
import { VueVirtualDocumentProvider } from './scheme/vue'
@@ -11,6 +13,8 @@ import { StyleLanguageProxy } from './services/StyleLanguageProxy'
1113
import { TemplateLanguageProxy } from './services/TemplateLanguageProxy'
1214
import { VirtualFileSwitcher } from './services/VirtualFileSwitcher'
1315

16+
let client: LanguageClient | undefined
17+
1418
export async function activate(
1519
context: vscode.ExtensionContext,
1620
): Promise<void> {
@@ -19,6 +23,8 @@ export async function activate(
1923
defaultScope: 'Singleton',
2024
})
2125

26+
client = createClient(context)
27+
2228
container.bind('context').toConstantValue(context)
2329
context.subscriptions.push(
2430
container.get(PluginCommunicationService).install(),
@@ -58,9 +64,14 @@ export async function activate(
5864
}
5965
}
6066

67+
await client.start()
6168
await checkForConflicts()
6269
}
6370

71+
export async function deactivate(): Promise<void> {
72+
await client?.stop()
73+
}
74+
6475
function syncConfig(api: any, config: PluginConfig): void {
6576
api.configurePlugin('@vuedx/typescript-plugin-vue', config)
6677
void vscode.commands.executeCommand(
@@ -87,7 +98,12 @@ async function checkForConflicts(): Promise<void> {
8798
return
8899
}
89100

90-
const ids = ['johnsoncodehk.volar', 'octref.vetur']
101+
const ids = [
102+
'johnsoncodehk.volar',
103+
'Vue.volar',
104+
'Vue.vscode-typescript-vue-plugin',
105+
'octref.vetur',
106+
]
91107
const extensions = ids
92108
.map((id) => vscode.extensions.getExtension(id))
93109
.filter(isNotNull)

packages/compiler-tsx/src/template/generate.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,7 @@ function genElementNode(node: ElementNode): void {
314314
ctx.write(node.tag, node.tagLoc, true).newLine()
315315
indent(() => {
316316
genProps(node)
317-
ctx.write(
318-
`${annotations.tsxCompletions}`,
319-
createLoc(
320-
node.startTagLoc,
321-
node.tagLoc.end.offset - node.loc.start.offset,
322-
),
323-
)
317+
ctx.write(`${annotations.tsxCompletions}`)
324318
})
325319
ctx.newLine()
326320
}
@@ -399,13 +393,7 @@ function genComponentNode(node: ComponentNode): void {
399393
ctx.write(node.resolvedName ?? node.tag, node.tagLoc).newLine()
400394
indent(() => {
401395
genProps(node)
402-
ctx.write(
403-
`${annotations.tsxCompletions}`,
404-
createLoc(
405-
node.startTagLoc,
406-
node.tagLoc.end.offset - node.loc.start.offset,
407-
),
408-
)
396+
ctx.write(`${annotations.tsxCompletions}`)
409397
})
410398

411399
ctx.newLine()

packages/compiler-tsx/test/__snapshots__/baseline.js

Lines changed: 99 additions & 66 deletions
Large diffs are not rendered by default.

packages/compiler-tsx/test/__snapshots__/baseline.md

Lines changed: 99 additions & 66 deletions
Large diffs are not rendered by default.

packages/compiler-tsx/test/__snapshots__/vue-to-tsx.spec.ts.snap

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ type __VueDX__GlobalComponents = import("vue").GlobalComponents;
99
const __VueDX___Script_Component = __VueDX__defineComponent({});
1010
//#endregion
1111
//#region <script setup>
12-
;const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
12+
13+
const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
1314
const __VueDX___ScriptSetup_props = defineProps({});
1415
const __VueDX___ScriptSetup_emits = ({});
1516
const __VueDX___ScriptSetup_expose = {};
@@ -105,7 +106,8 @@ type __VueDX__GlobalComponents = import("vue").GlobalComponents;
105106
const __VueDX___Script_Component = __VueDX__defineComponent({});
106107
//#endregion
107108
//#region <script setup>
108-
;const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
109+
110+
const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
109111
const __VueDX___ScriptSetup_props = defineProps({});
110112
const __VueDX___ScriptSetup_emits = ({});
111113
const __VueDX___ScriptSetup_expose = {};
@@ -231,7 +233,8 @@ const __VueDX___Script_Component = defineComponent({
231233
})
232234
//#endregion
233235
//#region <script setup>
234-
;const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
236+
237+
const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
235238
const __VueDX___ScriptSetup_props = defineProps({});
236239
const __VueDX___ScriptSetup_emits = ({});
237240
const __VueDX___ScriptSetup_expose = {};

packages/compiler-tsx/test/fixtures/if-else-if.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ type __VueDX__GlobalComponents = import("vue").GlobalComponents;
66
const __VueDX___Script_Component = __VueDX__defineComponent({});
77
//#endregion
88
//#region <script setup>
9-
;const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
9+
10+
const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
1011
const __VueDX___ScriptSetup_props = defineProps({});
1112
const __VueDX___ScriptSetup_emits = ({});
1213
const __VueDX___ScriptSetup_expose = {};

packages/compiler-tsx/test/fixtures/if-else-if.tsx.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/compiler-tsx/test/fixtures/nested-for-slot.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ type __VueDX__GlobalComponents = import("vue").GlobalComponents;
66
const __VueDX___Script_Component = __VueDX__defineComponent({});
77
//#endregion
88
//#region <script setup>
9-
;const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
9+
10+
const __VueDX___ScriptSetup_scope = __VueDX__TypeCheck.internal.scope(async () => {
1011
const __VueDX___ScriptSetup_props = defineProps({});
1112
const __VueDX___ScriptSetup_emits = ({});
1213
const __VueDX___ScriptSetup_expose = {};

0 commit comments

Comments
 (0)