[lldb-dap] Format extension typescript. (#138925)

I think the format checker isn't checking typescript files. I ran `npm
run format` to fix the extenion typescript.
This commit is contained in:
John Harrison
2025-05-07 11:49:53 -07:00
committed by GitHub
parent 70cf616b33
commit 854b9e9317
2 changed files with 153 additions and 111 deletions

View File

@@ -21,79 +21,97 @@ async function isServerModeSupported(exe: string): Promise<boolean> {
}
interface BoolConfig {
type: 'boolean';
type: "boolean";
default: boolean;
}
interface StringConfig {
type: 'string';
type: "string";
default: string;
}
interface NumberConfig {
type: 'number';
type: "number";
default: number;
}
interface StringArrayConfig {
type: 'stringArray';
type: "stringArray";
default: string[];
}
type DefaultConfig = BoolConfig | NumberConfig | StringConfig | StringArrayConfig;
type DefaultConfig =
| BoolConfig
| NumberConfig
| StringConfig
| StringArrayConfig;
const configurations: Record<string, DefaultConfig> = {
// Keys for debugger configurations.
"commandEscapePrefix": { type: "string", default: "`" },
"customFrameFormat": { type: "string", default: "" },
"customThreadFormat": { type: "string", default: "" },
"detachOnError": { type: "boolean", default: false },
"disableASLR": { type: "boolean", default: true },
"disableSTDIO": { type: "boolean", default: false },
"displayExtendedBacktrace": { type: "boolean", default: false },
"enableAutoVariableSummaries": { type: "boolean", default: false },
"enableSyntheticChildDebugging": { type: "boolean", default: false },
"timeout": { type: "number", default: 30 },
commandEscapePrefix: { type: "string", default: "`" },
customFrameFormat: { type: "string", default: "" },
customThreadFormat: { type: "string", default: "" },
detachOnError: { type: "boolean", default: false },
disableASLR: { type: "boolean", default: true },
disableSTDIO: { type: "boolean", default: false },
displayExtendedBacktrace: { type: "boolean", default: false },
enableAutoVariableSummaries: { type: "boolean", default: false },
enableSyntheticChildDebugging: { type: "boolean", default: false },
timeout: { type: "number", default: 30 },
// Keys for platform / target configuration.
"platformName": { type: "string", default: "" },
"targetTriple": { type: "string", default: "" },
platformName: { type: "string", default: "" },
targetTriple: { type: "string", default: "" },
// Keys for debugger command hooks.
"initCommands": { type: "stringArray", default: [] },
"preRunCommands": { type: "stringArray", default: [] },
"postRunCommands": { type: "stringArray", default: [] },
"stopCommands": { type: "stringArray", default: [] },
"exitCommands": { type: "stringArray", default: [] },
"terminateCommands": { type: "stringArray", default: [] },
initCommands: { type: "stringArray", default: [] },
preRunCommands: { type: "stringArray", default: [] },
postRunCommands: { type: "stringArray", default: [] },
stopCommands: { type: "stringArray", default: [] },
exitCommands: { type: "stringArray", default: [] },
terminateCommands: { type: "stringArray", default: [] },
};
export class LLDBDapConfigurationProvider
implements vscode.DebugConfigurationProvider {
constructor(private readonly server: LLDBDapServer) { }
implements vscode.DebugConfigurationProvider
{
constructor(private readonly server: LLDBDapServer) {}
async resolveDebugConfiguration(
folder: vscode.WorkspaceFolder | undefined,
debugConfiguration: vscode.DebugConfiguration,
token?: vscode.CancellationToken): Promise<vscode.DebugConfiguration> {
let config = vscode.workspace.getConfiguration('lldb-dap.defaults');
token?: vscode.CancellationToken,
): Promise<vscode.DebugConfiguration> {
let config = vscode.workspace.getConfiguration("lldb-dap.defaults");
for (const [key, cfg] of Object.entries(configurations)) {
if (Reflect.has(debugConfiguration, key)) continue;
if (Reflect.has(debugConfiguration, key)) {
continue;
}
const value = config.get(key);
if (value === cfg.default) continue;
if (!value || value === cfg.default) {
continue;
}
switch (cfg.type) {
case 'string':
if (typeof value !== 'string')
case "string":
if (typeof value !== "string") {
throw new Error(`Expected ${key} to be a string, got ${value}`);
}
break;
case 'number':
if (typeof value !== 'number')
case "number":
if (typeof value !== "number") {
throw new Error(`Expected ${key} to be a number, got ${value}`);
}
break;
case 'boolean':
if (typeof value !== 'boolean')
case "boolean":
if (typeof value !== "boolean") {
throw new Error(`Expected ${key} to be a boolean, got ${value}`);
}
break;
case 'stringArray':
if (typeof value !== 'object' && Array.isArray(value))
throw new Error(`Expected ${key} to be a array of strings, got ${value}`);
if ((value as string[]).length === 0) continue;
case "stringArray":
if (typeof value !== "object" && Array.isArray(value)) {
throw new Error(
`Expected ${key} to be a array of strings, got ${value}`,
);
}
if ((value as string[]).length === 0) {
continue;
}
break;
}

View File

@@ -1,78 +1,102 @@
import * as vscode from "vscode";
export class LaunchUriHandler implements vscode.UriHandler {
async handleUri(uri: vscode.Uri) {
try {
const params = new URLSearchParams(uri.query);
if (uri.path == '/start') {
// Some properties have default values
let debugConfig: vscode.DebugConfiguration = {
type: 'lldb-dap',
request: 'launch',
name: '',
};
// The `config` parameter allows providing a complete JSON-encoded configuration
const configJson = params.get("config");
if (configJson !== null) {
Object.assign(debugConfig, JSON.parse(configJson));
}
// Furthermore, some frequently used parameters can also be provided as separate parameters
const stringKeys = ["name", "request", "program", "cwd", "debuggerRoot"];
const numberKeys = ["pid"];
const arrayKeys = [
"args", "initCommands", "preRunCommands", "stopCommands", "exitCommands",
"terminateCommands", "launchCommands", "attachCommands"
];
for (const key of stringKeys) {
const value = params.get(key);
if (value) {
debugConfig[key] = value;
}
}
for (const key of numberKeys) {
const value = params.get(key);
if (value) {
debugConfig[key] = Number(value);
}
}
for (const key of arrayKeys) {
// `getAll()` returns an array of strings.
const value = params.getAll(key);
if (value) {
debugConfig[key] = value;
}
}
// Report an error if we received any unknown parameters
const supportedKeys = new Set<string>(["config"].concat(stringKeys).concat(numberKeys).concat(arrayKeys));
const presentKeys = new Set<string>(params.keys());
// FIXME: Use `Set.difference` as soon as ES2024 is widely available
const unknownKeys = new Set<string>();
for (const k of presentKeys.keys()) {
if (!supportedKeys.has(k)) {
unknownKeys.add(k);
}
}
if (unknownKeys.size > 0) {
throw new Error(`Unsupported URL parameters: ${Array.from(unknownKeys.keys()).join(", ")}`);
}
// Prodide a default for the config name
const defaultName = debugConfig.request == 'launch' ? "URL-based Launch" : "URL-based Attach";
debugConfig.name = debugConfig.name || debugConfig.program || defaultName;
// Force the type to `lldb-dap`. We don't want to allow launching any other
// Debug Adapters using this URI scheme.
if (debugConfig.type != "lldb-dap") {
throw new Error(`Unsupported debugger type: ${debugConfig.type}`);
}
await vscode.debug.startDebugging(undefined, debugConfig);
} else {
throw new Error(`Unsupported Uri path: ${uri.path}`);
}
} catch (err) {
if (err instanceof Error) {
await vscode.window.showErrorMessage(`Failed to handle lldb-dap URI request: ${err.message}`);
} else {
await vscode.window.showErrorMessage(`Failed to handle lldb-dap URI request: ${JSON.stringify(err)}`);
}
async handleUri(uri: vscode.Uri) {
try {
const params = new URLSearchParams(uri.query);
if (uri.path == "/start") {
// Some properties have default values
let debugConfig: vscode.DebugConfiguration = {
type: "lldb-dap",
request: "launch",
name: "",
};
// The `config` parameter allows providing a complete JSON-encoded configuration
const configJson = params.get("config");
if (configJson !== null) {
Object.assign(debugConfig, JSON.parse(configJson));
}
// Furthermore, some frequently used parameters can also be provided as separate parameters
const stringKeys = [
"name",
"request",
"program",
"cwd",
"debuggerRoot",
];
const numberKeys = ["pid"];
const arrayKeys = [
"args",
"initCommands",
"preRunCommands",
"stopCommands",
"exitCommands",
"terminateCommands",
"launchCommands",
"attachCommands",
];
for (const key of stringKeys) {
const value = params.get(key);
if (value) {
debugConfig[key] = value;
}
}
for (const key of numberKeys) {
const value = params.get(key);
if (value) {
debugConfig[key] = Number(value);
}
}
for (const key of arrayKeys) {
// `getAll()` returns an array of strings.
const value = params.getAll(key);
if (value) {
debugConfig[key] = value;
}
}
// Report an error if we received any unknown parameters
const supportedKeys = new Set<string>(
["config"].concat(stringKeys).concat(numberKeys).concat(arrayKeys),
);
const presentKeys = new Set<string>(params.keys());
// FIXME: Use `Set.difference` as soon as ES2024 is widely available
const unknownKeys = new Set<string>();
for (const k of presentKeys.keys()) {
if (!supportedKeys.has(k)) {
unknownKeys.add(k);
}
}
if (unknownKeys.size > 0) {
throw new Error(
`Unsupported URL parameters: ${Array.from(unknownKeys.keys()).join(", ")}`,
);
}
// Prodide a default for the config name
const defaultName =
debugConfig.request == "launch"
? "URL-based Launch"
: "URL-based Attach";
debugConfig.name =
debugConfig.name || debugConfig.program || defaultName;
// Force the type to `lldb-dap`. We don't want to allow launching any other
// Debug Adapters using this URI scheme.
if (debugConfig.type != "lldb-dap") {
throw new Error(`Unsupported debugger type: ${debugConfig.type}`);
}
await vscode.debug.startDebugging(undefined, debugConfig);
} else {
throw new Error(`Unsupported Uri path: ${uri.path}`);
}
} catch (err) {
if (err instanceof Error) {
await vscode.window.showErrorMessage(
`Failed to handle lldb-dap URI request: ${err.message}`,
);
} else {
await vscode.window.showErrorMessage(
`Failed to handle lldb-dap URI request: ${JSON.stringify(err)}`,
);
}
}
}
}