From 8dc3d51edbc5dfa222cd5d38c16afcfe320b5527 Mon Sep 17 00:00:00 2001 From: Albert Li Date: Thu, 1 Dec 2022 17:28:55 +0800 Subject: [PATCH] chore. enhance dba into the second version --- package.json | 4 ++-- package.nls.json | 4 +--- src/debugAdaptor/activateMQueryDebug.ts | 19 ++++++++++++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index c8b2f329..b5456ca3 100644 --- a/package.json +++ b/package.json @@ -298,14 +298,14 @@ { "type": "powerquery", "request": "launch", - "name": "%extension.pqtest.initialConfigurations.name%", + "name": "Evaluate power query file.", "program": "${workspaceFolder}/${command:AskForPowerQueryFileName}" } ], "configurationSnippets": [ { "label": "powerquery Debug: Launch", - "description": "%extension.pqtest.configurationSnippets.description%", + "description": "A new configuration for testing power query file a user selected.", "body": { "type": "powerquery", "request": "launch", diff --git a/package.nls.json b/package.nls.json index c8ca9732..99bcb690 100644 --- a/package.nls.json +++ b/package.nls.json @@ -28,7 +28,5 @@ "extension.pqtest.debugger.properties.operation.description": "PQTest operation string", "extension.pqtest.debugger.properties.operation.info.description": "info: Returns all module information", "extension.pqtest.debugger.properties.operation.runTest.description": "run-test: test connection", - "extension.pqtest.debugger.properties.operation.testConnection.description": "test-connection: test current connection", - "extension.pqtest.initialConfigurations.name": "Evaluate power query file.", - "extension.pqtest.configurationSnippets.description": "A new configuration for testing power query file a user selected." + "extension.pqtest.debugger.properties.operation.testConnection.description": "test-connection: test current connection" } diff --git a/src/debugAdaptor/activateMQueryDebug.ts b/src/debugAdaptor/activateMQueryDebug.ts index 75df1424..c099b76e 100644 --- a/src/debugAdaptor/activateMQueryDebug.ts +++ b/src/debugAdaptor/activateMQueryDebug.ts @@ -7,7 +7,11 @@ import * as Net from "net"; import * as vscode from "vscode"; +import { join } from "path"; +import { platform } from "process"; +import { randomBytes } from "crypto"; import { Socket } from "net"; +import { tmpdir } from "os"; import { CancellationToken, DebugConfiguration, ProviderResult, TextEditor, WorkspaceFolder } from "vscode"; @@ -54,7 +58,7 @@ class InlineDebugAdapterFactory implements vscode.DebugAdapterDescriptorFactory } } -class MQueryNodeDebugAdapterServerDescriptorFactory implements vscode.DebugAdapterDescriptorFactory { +class MQueryNodeDebugAdapterNamedPipeServerDescriptorFactory implements vscode.DebugAdapterDescriptorFactory { private server?: Net.Server; createDebugAdapterDescriptor( @@ -62,16 +66,19 @@ class MQueryNodeDebugAdapterServerDescriptorFactory implements vscode.DebugAdapt _executable: vscode.DebugAdapterExecutable | undefined, ): vscode.ProviderResult { if (!this.server) { - // start listening on a random port + // start listening on a random named pipe path + const pipeName: string = randomBytes(10).toString("utf8"); + const pipePath: string = platform === "win32" ? join("\\\\.\\pipe\\", pipeName) : join(tmpdir(), pipeName); + this.server = Net.createServer((socket: Socket) => { const session: MQueryDebugSession = new MQueryDebugSession(); session.setRunAsServer(true); session.start(socket as NodeJS.ReadableStream, socket); - }).listen(0); + }).listen(pipePath); } // make VS Code connect to debug server - return new vscode.DebugAdapterServer((this.server.address() as Net.AddressInfo).port); + return new vscode.DebugAdapterNamedPipeServer(this.server.address() as string); } dispose(): void { @@ -106,7 +113,9 @@ export function activateMQueryDebug(vscExtCtx: vscode.ExtensionContext, mode: "i ); const factory: vscode.DebugAdapterDescriptorFactory = - mode === "server" ? new MQueryNodeDebugAdapterServerDescriptorFactory() : new InlineDebugAdapterFactory(); + mode === "server" + ? new MQueryNodeDebugAdapterNamedPipeServerDescriptorFactory() + : new InlineDebugAdapterFactory(); vscExtCtx.subscriptions.push( vscode.debug.registerDebugAdapterDescriptorFactory(ExtensionConstants.PQDebugType, factory),