Skip to content

Commit 0f00784

Browse files
Nikola HristovNikola Hristov
authored andcommitted
1 parent 201a6f0 commit 0f00784

File tree

12 files changed

+2254
-1805
lines changed

12 files changed

+2254
-1805
lines changed

Source/extension/debugger/adapter/factory.ts

Lines changed: 252 additions & 180 deletions
Large diffs are not rendered by default.
Lines changed: 69 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,78 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import * as path from 'path';
5-
import * as fs from 'fs-extra';
6-
import { parse } from 'jsonc-parser';
7-
import { DebugConfiguration, Uri, WorkspaceFolder } from 'vscode';
8-
import { getConfiguration, getWorkspaceFolder } from '../../../common/vscodeapi';
9-
import { traceError, traceLog, traceWarn } from '../../../common/log/logging';
4+
import * as path from "path";
5+
import * as fs from "fs-extra";
6+
import { parse } from "jsonc-parser";
7+
import { DebugConfiguration, Uri, WorkspaceFolder } from "vscode";
108

11-
export async function getConfigurationsForWorkspace(workspace: WorkspaceFolder): Promise<DebugConfiguration[]> {
12-
traceLog('Getting configurations for workspace');
13-
const filename = path.join(workspace.uri.fsPath, '.vscode', 'launch.json');
14-
if (!(await fs.pathExists(filename))) {
15-
return getConfigurationsFromSettings(workspace);
16-
}
17-
const text = await fs.readFile(filename, 'utf-8');
18-
const parsed = parse(text, [], { allowTrailingComma: true, disallowComments: false });
19-
// no launch.json or no configurations found in launch.json, look in settings.json
20-
if (!parsed || !parsed.configurations) {
21-
traceLog('No configurations found in launch.json, looking in settings.json.');
22-
return getConfigurationsFromSettings(workspace);
23-
}
24-
// configurations found in launch.json, verify them then return
25-
if (!Array.isArray(parsed.configurations) || parsed.configurations.length === 0) {
26-
traceError('Invalid configurations in launch.json');
27-
throw Error('Invalid configurations in launch.json');
28-
}
29-
if (!parsed.version) {
30-
traceWarn('Missing field in launch.json: version');
31-
}
32-
traceLog('Using configuration in launch.json');
33-
return parsed.configurations;
9+
import { traceError, traceLog, traceWarn } from "../../../common/log/logging";
10+
import {
11+
getConfiguration,
12+
getWorkspaceFolder,
13+
} from "../../../common/vscodeapi";
14+
15+
export async function getConfigurationsForWorkspace(
16+
workspace: WorkspaceFolder,
17+
): Promise<DebugConfiguration[]> {
18+
traceLog("Getting configurations for workspace");
19+
const filename = path.join(workspace.uri.fsPath, ".vscode", "launch.json");
20+
if (!(await fs.pathExists(filename))) {
21+
return getConfigurationsFromSettings(workspace);
22+
}
23+
const text = await fs.readFile(filename, "utf-8");
24+
const parsed = parse(text, [], {
25+
allowTrailingComma: true,
26+
disallowComments: false,
27+
});
28+
// no launch.json or no configurations found in launch.json, look in settings.json
29+
if (!parsed || !parsed.configurations) {
30+
traceLog(
31+
"No configurations found in launch.json, looking in settings.json.",
32+
);
33+
return getConfigurationsFromSettings(workspace);
34+
}
35+
// configurations found in launch.json, verify them then return
36+
if (
37+
!Array.isArray(parsed.configurations) ||
38+
parsed.configurations.length === 0
39+
) {
40+
traceError("Invalid configurations in launch.json");
41+
throw Error("Invalid configurations in launch.json");
42+
}
43+
if (!parsed.version) {
44+
traceWarn("Missing field in launch.json: version");
45+
}
46+
traceLog("Using configuration in launch.json");
47+
return parsed.configurations;
3448
}
3549

36-
export async function getConfigurationsByUri(uri?: Uri): Promise<DebugConfiguration[]> {
37-
if (uri) {
38-
const workspace = getWorkspaceFolder(uri);
39-
if (workspace) {
40-
return getConfigurationsForWorkspace(workspace);
41-
}
42-
}
43-
return [];
50+
export async function getConfigurationsByUri(
51+
uri?: Uri,
52+
): Promise<DebugConfiguration[]> {
53+
if (uri) {
54+
const workspace = getWorkspaceFolder(uri);
55+
if (workspace) {
56+
return getConfigurationsForWorkspace(workspace);
57+
}
58+
}
59+
return [];
4460
}
4561

46-
export function getConfigurationsFromSettings(workspace: WorkspaceFolder): DebugConfiguration[] {
47-
// look in settings.json
48-
const codeWorkspaceConfig = getConfiguration('launch', workspace);
49-
// if this includes user configs, how do I make sure it selects the workspace ones first
50-
if (
51-
!codeWorkspaceConfig.configurations ||
52-
!Array.isArray(codeWorkspaceConfig.configurations) ||
53-
codeWorkspaceConfig.configurations.length === 0
54-
) {
55-
traceLog('No configurations found in settings.json or launch.json.');
56-
return [];
57-
}
58-
traceLog('Using configuration in workspace settings.json.');
59-
return codeWorkspaceConfig.configurations;
62+
export function getConfigurationsFromSettings(
63+
workspace: WorkspaceFolder,
64+
): DebugConfiguration[] {
65+
// look in settings.json
66+
const codeWorkspaceConfig = getConfiguration("launch", workspace);
67+
// if this includes user configs, how do I make sure it selects the workspace ones first
68+
if (
69+
!codeWorkspaceConfig.configurations ||
70+
!Array.isArray(codeWorkspaceConfig.configurations) ||
71+
codeWorkspaceConfig.configurations.length === 0
72+
) {
73+
traceLog("No configurations found in settings.json or launch.json.");
74+
return [];
75+
}
76+
traceLog("Using configuration in workspace settings.json.");
77+
return codeWorkspaceConfig.configurations;
6078
}
Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
'use strict';
4+
"use strict";
55

6-
import { DebugConfigStrings } from '../../../common/utils/localize';
7-
import { MultiStepInput } from '../../../common/multiStepInput';
8-
import { sendTelemetryEvent } from '../../../telemetry';
9-
import { EventName } from '../../../telemetry/constants';
10-
import { DebuggerTypeName } from '../../../constants';
11-
import { LaunchRequestArguments } from '../../../types';
12-
import { DebugConfigurationState, DebugConfigurationType } from '../../types';
6+
import { MultiStepInput } from "../../../common/multiStepInput";
7+
import { DebugConfigStrings } from "../../../common/utils/localize";
8+
import { DebuggerTypeName } from "../../../constants";
9+
import { sendTelemetryEvent } from "../../../telemetry";
10+
import { EventName } from "../../../telemetry/constants";
11+
import { LaunchRequestArguments } from "../../../types";
12+
import { DebugConfigurationState, DebugConfigurationType } from "../../types";
1313

1414
export async function buildFileWithArgsLaunchDebugConfiguration(
15-
_input: MultiStepInput<DebugConfigurationState>,
16-
state: DebugConfigurationState,
15+
_input: MultiStepInput<DebugConfigurationState>,
16+
state: DebugConfigurationState,
1717
): Promise<void> {
18-
const config: Partial<LaunchRequestArguments> = {
19-
name: DebugConfigStrings.fileWithArgs.snippet.name,
20-
type: DebuggerTypeName,
21-
request: 'launch',
22-
program: '${file}',
23-
console: 'integratedTerminal',
24-
args: '${command:pickArgs}',
25-
};
26-
sendTelemetryEvent(EventName.DEBUGGER_CONFIGURATION_PROMPTS, undefined, {
27-
configurationType: DebugConfigurationType.launchFileWithArgs,
28-
});
29-
Object.assign(state.config, config);
18+
const config: Partial<LaunchRequestArguments> = {
19+
name: DebugConfigStrings.fileWithArgs.snippet.name,
20+
type: DebuggerTypeName,
21+
request: "launch",
22+
program: "${file}",
23+
console: "integratedTerminal",
24+
args: "${command:pickArgs}",
25+
};
26+
sendTelemetryEvent(EventName.DEBUGGER_CONFIGURATION_PROMPTS, undefined, {
27+
configurationType: DebugConfigurationType.launchFileWithArgs,
28+
});
29+
Object.assign(state.config, config);
3030
}

0 commit comments

Comments
 (0)