Skip to content

Commit e0c64c8

Browse files
committed
refactor(labs): remove TS Memory Treemap feature
1 parent f7e4bbd commit e0c64c8

File tree

8 files changed

+16
-427
lines changed

8 files changed

+16
-427
lines changed

extensions/labs/package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@
5656
"prepack": "npm run build -- --minify",
5757
"pack": "npm run prepack && vsce package",
5858
"release": "npm run prepack && vsce publish",
59-
"release:next": "npm run prepack && vsce publish --pre-release",
60-
"size": "npm run prepack -- --metafile && esbuild-visualizer --metadata ./meta.json && open ./stats.html"
59+
"release:next": "npm run prepack && vsce publish --pre-release"
6160
},
6261
"devDependencies": {
6362
"@types/node": "latest",
@@ -66,8 +65,6 @@
6665
"@volar/source-map": "2.4.23",
6766
"@volar/vscode": "2.4.23",
6867
"@vscode/vsce": "latest",
69-
"esbuild": "latest",
70-
"esbuild-plugin-copy": "latest",
71-
"esbuild-visualizer": "latest"
68+
"esbuild": "latest"
7269
}
7370
}

extensions/labs/scripts/build.js

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
// @ts-check
2-
32
require('esbuild').context({
43
entryPoints: {
54
extension: './src/extension.ts',
@@ -16,30 +15,6 @@ require('esbuild').context({
1615
tsconfig: './tsconfig.json',
1716
define: { 'process.env.NODE_ENV': '"production"' },
1817
minify: process.argv.includes('--minify'),
19-
plugins: [
20-
require('esbuild-plugin-copy').copy({
21-
resolveFrom: 'cwd',
22-
assets: {
23-
from: ['./node_modules/esbuild-visualizer/dist/lib/**/*'],
24-
to: ['./lib'],
25-
},
26-
// @ts-expect-error
27-
keepStructure: true,
28-
}),
29-
{
30-
name: 'meta',
31-
setup(build) {
32-
build.onEnd((result) => {
33-
if (result.metafile && result.errors.length === 0) {
34-
require('fs').writeFileSync(
35-
require('path').resolve(__dirname, '../meta.json'),
36-
JSON.stringify(result.metafile),
37-
);
38-
}
39-
});
40-
},
41-
},
42-
],
4318
}).then(async ctx => {
4419
console.log('building...');
4520
if (process.argv.includes('--watch')) {

extensions/labs/src/common/quickPick.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

extensions/labs/src/views/serversView.ts

Lines changed: 1 addition & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import type { LabsInfo } from '@volar/vscode';
22
import * as lsp from '@volar/vscode';
3-
import * as fs from 'fs';
4-
import * as os from 'os';
5-
import * as path from 'path';
63
import * as vscode from 'vscode';
7-
import { quickPick } from '../common/quickPick';
84
import { getIconPath, useVolarExtensions } from '../common/shared';
95

106
interface LanguageClientItem {
@@ -17,7 +13,7 @@ interface InvalidLanguageClientItem {
1713
}
1814

1915
interface LanguageClientFieldItem extends LanguageClientItem {
20-
field: 'start' | 'stop' | 'restart' | 'initializationOptions' | 'initializeResult' | 'memory';
16+
field: 'start' | 'stop' | 'restart' | 'initializationOptions' | 'initializeResult';
2117
}
2218

2319
export function activate(context: vscode.ExtensionContext) {
@@ -56,7 +52,6 @@ export function activate(context: vscode.ExtensionContext) {
5652
stats.push({ ...element, field: 'restart' });
5753
stats.push({ ...element, field: 'initializationOptions' });
5854
stats.push({ ...element, field: 'initializeResult' });
59-
stats.push({ ...element, field: 'memory' });
6055
}
6156
else if (element.client.state === lsp.State.Starting) {
6257
stats.push({ ...element, field: 'stop' });
@@ -106,17 +101,6 @@ export function activate(context: vscode.ExtensionContext) {
106101
},
107102
};
108103
}
109-
else if (element.field === 'memory') {
110-
return {
111-
label: 'TS Memory Treemap',
112-
collapsibleState: vscode.TreeItemCollapsibleState.None,
113-
command: {
114-
command: '_volar.action.tsMemoryTreemap',
115-
title: '',
116-
arguments: [element.client, element.extension.exports.volarLabs.languageServerProtocol],
117-
},
118-
};
119-
}
120104
else if (element.field === 'initializationOptions') {
121105
return {
122106
iconPath: new vscode.ThemeIcon('file'),
@@ -178,70 +162,6 @@ export function activate(context: vscode.ExtensionContext) {
178162
await client.stop();
179163
await client.start();
180164
}),
181-
vscode.commands.registerCommand('_volar.action.tsMemoryTreemap', async (client: lsp.BaseLanguageClient, protocol: typeof import('@volar/vscode/protocol')) => {
182-
183-
const select = await quickPick([
184-
{
185-
openInBrowser: {
186-
label: 'Open in Browser',
187-
description: 'Open the TypeScript Memory Treemap in your browser',
188-
},
189-
showInVSCode: {
190-
label: 'Show in VS Code',
191-
description: 'Show the html file in VS Code',
192-
},
193-
saveFile: {
194-
label: 'Save File',
195-
description: 'Pick a location to save the html file',
196-
},
197-
}
198-
]);
199-
200-
if (select === undefined) {
201-
return; // cancel
202-
}
203-
204-
vscode.window.withProgress({
205-
location: vscode.ProgressLocation.Window,
206-
cancellable: false,
207-
title: 'Loading Memory Data'
208-
}, async progress => {
209-
210-
progress.report({ increment: 0 });
211-
212-
const meta = await client.sendRequest(protocol.LoadedTSFilesMetaRequest.type);
213-
const { visualizer } = await import('esbuild-visualizer/dist/plugin/index.js');
214-
const fileContent = await visualizer(meta as any);
215-
216-
if (select === 'openInBrowser') {
217-
const tmpPath = path.join(os.tmpdir(), 'memory-report.html');
218-
fs.writeFileSync(tmpPath, fileContent);
219-
await vscode.env.openExternal(vscode.Uri.file(tmpPath));
220-
}
221-
else if (select === 'showInVSCode') {
222-
const doc = await vscode.workspace.openTextDocument({ content: fileContent, language: 'html' });
223-
vscode.window.showTextDocument(doc);
224-
}
225-
else if (select === 'saveFile') {
226-
const workspaces = vscode.workspace.workspaceFolders;
227-
if (!workspaces?.length) {
228-
return;
229-
}
230-
231-
const defaultUri = vscode.Uri.joinPath(workspaces[0].uri, 'stats.html');
232-
const pickedUri = await vscode.window.showSaveDialog({ defaultUri });
233-
234-
if (!pickedUri) {
235-
return;
236-
}
237-
238-
await vscode.workspace.fs.writeFile(pickedUri, Buffer.from(fileContent));
239-
await vscode.window.showTextDocument(pickedUri);
240-
}
241-
242-
progress.report({ increment: 100 });
243-
});
244-
}),
245165
vscode.commands.registerCommand('volar.action.serverStat.initializationOptions', async (client: lsp.BaseLanguageClient) => {
246166
const doc = await vscode.workspace.openTextDocument({ content: JSON.stringify(client.clientOptions.initializationOptions, undefined, '\t'), language: 'json' });
247167
vscode.window.showTextDocument(doc);

packages/language-server/lib/features/editorFeatures.ts

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
GetServicePluginsRequest,
88
GetVirtualCodeRequest,
99
GetVirtualFileRequest,
10-
LoadedTSFilesMetaRequest,
1110
UpdateServicePluginStateNotification,
1211
UpdateVirtualCodeStateNotification,
1312
WriteVirtualFilesNotification
@@ -112,69 +111,6 @@ export function register(server: LanguageServerState) {
112111
}
113112
}
114113
});
115-
server.connection.onRequest(LoadedTSFilesMetaRequest.type, async () => {
116-
117-
const sourceFilesData = new Map<ts.SourceFile, {
118-
projectNames: string[];
119-
size: number;
120-
}>();
121-
122-
for (const languageService of await project.getExistingLanguageServices()) {
123-
const tsLanguageService: ts.LanguageService | undefined = languageService.context.inject<any>('typescript/languageService');
124-
const program = tsLanguageService?.getProgram();
125-
const tsProject = languageService.context.project.typescript;
126-
if (program && tsProject) {
127-
const { languageServiceHost, configFileName } = tsProject;
128-
const projectName = configFileName ?? (languageServiceHost.getCurrentDirectory() + '(inferred)');
129-
const sourceFiles = program.getSourceFiles() ?? [];
130-
for (const sourceFile of sourceFiles) {
131-
if (!sourceFilesData.has(sourceFile)) {
132-
let nodes = 0;
133-
sourceFile.forEachChild(function walk(node) {
134-
nodes++;
135-
node.forEachChild(walk);
136-
});
137-
sourceFilesData.set(sourceFile, {
138-
projectNames: [],
139-
size: nodes * 128,
140-
});
141-
}
142-
sourceFilesData.get(sourceFile)!.projectNames.push(projectName);
143-
};
144-
}
145-
}
146-
147-
const result: {
148-
inputs: {};
149-
outputs: Record<string, {
150-
imports: string[];
151-
exports: string[];
152-
entryPoint: string;
153-
inputs: Record<string, { bytesInOutput: number; }>;
154-
bytes: number;
155-
}>;
156-
} = {
157-
inputs: {},
158-
outputs: {},
159-
};
160-
161-
for (const [sourceFile, fileData] of sourceFilesData) {
162-
let key = fileData.projectNames.sort().join(', ');
163-
if (fileData.projectNames.length >= 2) {
164-
key = `Shared in ${fileData.projectNames.length} projects (${key})`;
165-
}
166-
result.outputs[key] ??= {
167-
imports: [],
168-
exports: [],
169-
entryPoint: '',
170-
inputs: {},
171-
bytes: 0,
172-
};
173-
result.outputs[key].inputs[sourceFile.fileName] = { bytesInOutput: fileData.size };
174-
}
175-
176-
return result;
177-
});
178114
server.connection.onNotification(UpdateVirtualCodeStateNotification.type, async params => {
179115
const uri = URI.parse(params.fileUri);
180116
const languageService = await project.getLanguageService(uri);

packages/language-server/protocol.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,3 @@ export namespace GetVirtualCodeRequest {
146146
export type ErrorType = never;
147147
export const type = new protocol.RequestType<ParamsType, ResponseType, ErrorType>('volar/client/virtualFile');
148148
}
149-
150-
export namespace LoadedTSFilesMetaRequest {
151-
export const type = new protocol.RequestType0('volar/client/loadedTsFiles');
152-
}

packages/vscode/protocol.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,3 @@ export namespace GetVirtualCodeRequest {
145145
export type ErrorType = never;
146146
export const type = new protocol.RequestType<ParamsType, ResponseType, ErrorType>('volar/client/virtualFile');
147147
}
148-
149-
export namespace LoadedTSFilesMetaRequest {
150-
export const type = new protocol.RequestType0('volar/client/loadedTsFiles');
151-
}

0 commit comments

Comments
 (0)