microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.10.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/extension/debugConfigurationProvider.ts

100lines · modeblame

0bfa4e58Yuri Skorokhodov7 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import * as vscode from "vscode";
5import { TelemetryHelper } from "../common/telemetryHelper";
6import { Telemetry } from "../common/telemetry";
7import * as nls from "vscode-nls";
8const localize = nls.loadMessageBundle();
9
10export class ReactNativeDebugConfigProvider implements vscode.DebugConfigurationProvider {
11private debugConfigurations = {
12"Debug Android": {
13"name": "Debug Android",
14"program": "${workspaceRoot}/.vscode/launchReactNative.js",
15"type": "reactnative",
16"request": "launch",
17"platform": "android",
18},
19"Debug iOS": {
20"name": "Debug iOS",
21"program": "${workspaceRoot}/.vscode/launchReactNative.js",
22"type": "reactnative",
23"request": "launch",
24"platform": "ios",
25},
26"Attach to packager": {
27"name": "Attach to packager",
28"program": "${workspaceRoot}/.vscode/launchReactNative.js",
29"type": "reactnative",
30"request": "attach",
31},
32"Debug in Exponent": {
33"name": "Debug in Exponent",
34"program": "${workspaceRoot}/.vscode/launchReactNative.js",
35"type": "reactnative",
36"request": "launch",
37"platform": "exponent",
38},
39};
40
41private pickConfig: ReadonlyArray<vscode.QuickPickItem> = [
42{
43label: "Debug Android",
44description: localize("DebugAndroidConfigDesc", "Run and debug Android application"),
45},
46{
47label: "Debug iOS",
48description: localize("DebugiOSConfigDesc", "Run and debug iOS application"),
49},
50{
51label: "Attach to packager",
52description: localize("AttachToPackagerConfigDesc", "Attach to already working application packager"),
53},
54{
55label: "Debug in Exponent",
56description: localize("DebugExpoConfigDesc", "Debug Expo application or React Native application in Expo"),
57},
58];
59
60public async provideDebugConfigurations(folder: vscode.WorkspaceFolder | undefined, token?: vscode.CancellationToken): Promise<vscode.DebugConfiguration[]> {
61return new Promise<vscode.DebugConfiguration[]>((resolve) => {
62const configPicker = this.prepareDebugConfigPicker();
63const disposables: vscode.Disposable[] = [];
64const pickHandler = () => {
74471e03Yuri Skorokhodov7 years ago65let chosenConfigsEvent = TelemetryHelper.createTelemetryEvent("chosenDebugConfigurations");
0bfa4e58Yuri Skorokhodov7 years ago66let selected: string[] = configPicker.selectedItems.map(element => element.label);
74471e03Yuri Skorokhodov7 years ago67chosenConfigsEvent.properties["selectedItems"] = selected;
0bfa4e58Yuri Skorokhodov7 years ago68Telemetry.send(chosenConfigsEvent);
69const launchConfig = this.gatherDebugScenarios(selected);
70disposables.forEach(d => d.dispose());
71resolve(launchConfig);
72};
73
74disposables.push(
75configPicker.onDidAccept(pickHandler),
76configPicker.onDidHide(pickHandler),
77configPicker
78);
79
80configPicker.show();
81});
82}
83
84private gatherDebugScenarios(selectedItems: string[]): vscode.DebugConfiguration[] {
85let launchConfig: vscode.DebugConfiguration[] = selectedItems.map(element => this.debugConfigurations[element]);
86return launchConfig;
87}
88
89private prepareDebugConfigPicker(): vscode.QuickPick<vscode.QuickPickItem> {
90const debugConfigPicker = vscode.window.createQuickPick();
91debugConfigPicker.canSelectMany = true;
92debugConfigPicker.ignoreFocusOut = true;
93debugConfigPicker.title = localize("DebugConfigQuickPickLabel", "Pick debug configurations");
94debugConfigPicker.items = this.pickConfig;
95// QuickPickItem property `picked` doesn't work, so this line will check first item in the list
96// which is supposed to be Debug Android
97debugConfigPicker.selectedItems = [this.pickConfig[0]];
98return debugConfigPicker;
99}
100}