Skip to content

Commit 76d3ab8

Browse files
committed
feat: add Show Component Meta command
1 parent e0f243a commit 76d3ab8

File tree

14 files changed

+215
-70
lines changed

14 files changed

+215
-70
lines changed

Diff for: examples/vscode-svelte/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
},
7676
"dependencies": {
7777
"@volar-examples/svelte-language-server": "1.0.3",
78-
"typesafe-path": "^0.2.1",
78+
"typesafe-path": "^0.2.2",
7979
"vscode-languageclient": "^8.0.2"
8080
}
8181
}

Diff for: extensions/vscode-vue-language-features/package.json

+6-1
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,11 @@
637637
"title": "Show Virtual Files",
638638
"category": "Volar (Debug)"
639639
},
640+
{
641+
"command": "volar.action.showComponentMeta",
642+
"title": "Show Component Meta",
643+
"category": "Volar"
644+
},
640645
{
641646
"command": "volar.action.splitEditors",
642647
"title": "Split <script>, <template>, <style> Editors",
@@ -845,7 +850,7 @@
845850
"path-browserify": "^1.0.1",
846851
"punycode": "^2.1.1",
847852
"semver": "^7.3.7",
848-
"typesafe-path": "^0.2.1",
853+
"typesafe-path": "^0.2.2",
849854
"vsce": "latest",
850855
"vscode-languageclient": "^8.0.2",
851856
"vscode-nls": "^5.2.0"

Diff for: extensions/vscode-vue-language-features/src/common.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as autoInsertion from './features/autoInsertion';
88
import * as tsVersion from './features/tsVersion';
99
import * as verifyAll from './features/verifyAll';
1010
import * as virtualFiles from './features/virtualFiles';
11+
import * as componentMeta from './features/componentMeta';
1112
import * as tsconfig from './features/tsconfig';
1213
import * as doctor from './features/doctor';
1314
import * as fileReferences from './features/fileReferences';
@@ -108,6 +109,7 @@ async function doActivate(context: vscode.ExtensionContext, createLc: CreateLang
108109
verifyAll.register(context, semanticClient);
109110
autoInsertion.register(context, syntacticClient, semanticClient);
110111
virtualFiles.register(context, semanticClient);
112+
componentMeta.register(context, semanticClient);
111113
}
112114

113115
async function requestReloadVscode() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import * as vscode from 'vscode';
2+
import type { BaseLanguageClient } from 'vscode-languageclient';
3+
import { GetComponentMeta } from '@volar/vue-language-server';
4+
5+
const scheme = 'vue-component-meta';
6+
7+
export async function register(context: vscode.ExtensionContext, client: BaseLanguageClient) {
8+
9+
const sourceUriToMetaUri = new Map<string, string>();
10+
const metaUriToSourceEditor = new Map<string, vscode.TextEditor>();
11+
const docChangeEvent = new vscode.EventEmitter<vscode.Uri>();
12+
13+
context.subscriptions.push(vscode.workspace.onDidChangeTextDocument(e => {
14+
const uri = sourceUriToMetaUri.get(e.document.uri.toString());
15+
if (uri) {
16+
docChangeEvent.fire(vscode.Uri.parse(uri));
17+
}
18+
}));
19+
context.subscriptions.push(vscode.workspace.registerTextDocumentContentProvider(
20+
scheme,
21+
{
22+
onDidChange: docChangeEvent.event,
23+
async provideTextDocumentContent(uri: vscode.Uri): Promise<string | undefined> {
24+
25+
const sourceUri = metaUriToSourceEditor.get(uri.toString());
26+
27+
if (sourceUri) {
28+
29+
const meta = await client.sendRequest(GetComponentMeta.type, { uri: sourceUri.document.uri.toString() });
30+
31+
return JSON.stringify(meta, undefined, '\t');
32+
}
33+
}
34+
},
35+
));
36+
context.subscriptions.push(vscode.commands.registerCommand('volar.action.showComponentMeta', async () => {
37+
const sourceEditor = vscode.window.activeTextEditor;
38+
if (sourceEditor) {
39+
const metaUri = sourceEditor.document.uri.with({ scheme }).toString() + '.meta.json';
40+
sourceUriToMetaUri.set(sourceEditor.document.uri.toString(), metaUri);
41+
metaUriToSourceEditor.set(metaUri, sourceEditor);
42+
vscode.window.showTextDocument(vscode.Uri.parse(metaUri), { viewColumn: vscode.ViewColumn.Two, preview: false });
43+
}
44+
}));
45+
}

Diff for: packages/language-server/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"@volar/language-service": "1.0.3",
2222
"@volar/shared": "1.0.3",
2323
"request-light": "^0.5.8",
24-
"typesafe-path": "^0.2.1",
24+
"typesafe-path": "^0.2.2",
2525
"vscode-html-languageservice": "^5.0.1",
2626
"vscode-languageserver": "^8.0.2",
2727
"vscode-languageserver-protocol": "^3.17.2",

Diff for: packages/shared/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"directory": "packages/shared"
1414
},
1515
"dependencies": {
16-
"typesafe-path": "^0.2.1",
16+
"typesafe-path": "^0.2.2",
1717
"vscode-languageserver-protocol": "^3.17.2",
1818
"vscode-languageserver-textdocument": "^1.0.7",
1919
"vscode-uri": "^3.0.3"

Diff for: pnpm-lock.yaml

+16-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: tsconfig.json

+3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
"@volar/vue-*": [
3131
"vue-language-tools/vue-*/src"
3232
],
33+
"vue-component-meta": [
34+
"vue-language-tools/vue-component-meta/src"
35+
],
3336
},
3437
"noEmit": true,
3538
},

Diff for: vue-language-tools/vue-component-meta/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"dependencies": {
1616
"@volar/language-core": "1.0.3",
1717
"@volar/vue-language-core": "1.0.3",
18-
"typesafe-path": "^0.2.1"
18+
"typesafe-path": "^0.2.2"
1919
},
2020
"peerDependencies": {
2121
"typescript": "*"

0 commit comments

Comments
 (0)