microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
4c757eeb398e0299d0e9cd9bc95b68dd2f87a06e

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/debugConfigurationProvider.ts

132lines · 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",
18ea7d15Yuri Skorokhodov6 years ago14"cwd": "${workspaceFolder}",
0bfa4e58Yuri Skorokhodov7 years ago15"type": "reactnative",
16"request": "launch",
17"platform": "android",
18},
19"Debug iOS": {
20"name": "Debug iOS",
18ea7d15Yuri Skorokhodov6 years ago21"cwd": "${workspaceFolder}",
0bfa4e58Yuri Skorokhodov7 years ago22"type": "reactnative",
23"request": "launch",
24"platform": "ios",
25},
36e9730fDavid Serafimov6 years ago26"Debug Windows": {
27"name": "Debug Windows",
28"cwd": "${workspaceFolder}",
29"type": "reactnative",
30"request": "launch",
31"platform": "windows",
32},
0bfa4e58Yuri Skorokhodov7 years ago33"Attach to packager": {
34"name": "Attach to packager",
18ea7d15Yuri Skorokhodov6 years ago35"cwd": "${workspaceFolder}",
0bfa4e58Yuri Skorokhodov7 years ago36"type": "reactnative",
37"request": "attach",
38},
39"Debug in Exponent": {
40"name": "Debug in Exponent",
18ea7d15Yuri Skorokhodov6 years ago41"cwd": "${workspaceFolder}",
0bfa4e58Yuri Skorokhodov7 years ago42"type": "reactnative",
43"request": "launch",
44"platform": "exponent",
45},
549baae2RedMickey6 years ago46"Debug Android (Hermes) - Experimental": {
47"name": "Debug Android (Hermes) - Experimental",
48"cwd": "${workspaceFolder}",
49"type": "reactnativedirect",
50"request": "launch",
51"platform": "android",
52},
8411a7adYuri Skorokhodov6 years ago53"Attach to Hermes application - Experimental": {
54"name": "Attach to Hermes application - Experimental",
549baae2RedMickey6 years ago55"cwd": "${workspaceFolder}",
56"type": "reactnativedirect",
57"request": "attach",
58},
0bfa4e58Yuri Skorokhodov7 years ago59};
60
61private pickConfig: ReadonlyArray<vscode.QuickPickItem> = [
62{
63label: "Debug Android",
64description: localize("DebugAndroidConfigDesc", "Run and debug Android application"),
65},
66{
67label: "Debug iOS",
68description: localize("DebugiOSConfigDesc", "Run and debug iOS application"),
69},
36e9730fDavid Serafimov6 years ago70{
71label: "Debug Windows",
72description: localize("DebugWindowsConfigDesc", "Run and debug Windows application"),
73},
0bfa4e58Yuri Skorokhodov7 years ago74{
75label: "Attach to packager",
76description: localize("AttachToPackagerConfigDesc", "Attach to already working application packager"),
77},
78{
79label: "Debug in Exponent",
80description: localize("DebugExpoConfigDesc", "Debug Expo application or React Native application in Expo"),
81},
549baae2RedMickey6 years ago82{
83label: "Debug Android (Hermes) - Experimental",
84description: localize("DebugAndroidHermesConfigDesc", "Run and debug Android Hermes application"),
85},
86{
8411a7adYuri Skorokhodov6 years ago87label: "Attach to Hermes application - Experimental",
549baae2RedMickey6 years ago88description: localize("AttachToPackagerHermesConfigDesc", "Attach to already working Android Hermes application packager"),
89},
0bfa4e58Yuri Skorokhodov7 years ago90];
91
92public async provideDebugConfigurations(folder: vscode.WorkspaceFolder | undefined, token?: vscode.CancellationToken): Promise<vscode.DebugConfiguration[]> {
93return new Promise<vscode.DebugConfiguration[]>((resolve) => {
94const configPicker = this.prepareDebugConfigPicker();
95const disposables: vscode.Disposable[] = [];
96const pickHandler = () => {
74471e03Yuri Skorokhodov6 years ago97let chosenConfigsEvent = TelemetryHelper.createTelemetryEvent("chosenDebugConfigurations");
0bfa4e58Yuri Skorokhodov7 years ago98let selected: string[] = configPicker.selectedItems.map(element => element.label);
74471e03Yuri Skorokhodov6 years ago99chosenConfigsEvent.properties["selectedItems"] = selected;
0bfa4e58Yuri Skorokhodov7 years ago100Telemetry.send(chosenConfigsEvent);
101const launchConfig = this.gatherDebugScenarios(selected);
102disposables.forEach(d => d.dispose());
103resolve(launchConfig);
104};
105
106disposables.push(
107configPicker.onDidAccept(pickHandler),
108configPicker.onDidHide(pickHandler),
109configPicker
110);
111
112configPicker.show();
113});
114}
115
116private gatherDebugScenarios(selectedItems: string[]): vscode.DebugConfiguration[] {
117let launchConfig: vscode.DebugConfiguration[] = selectedItems.map(element => this.debugConfigurations[element]);
118return launchConfig;
119}
120
121private prepareDebugConfigPicker(): vscode.QuickPick<vscode.QuickPickItem> {
122const debugConfigPicker = vscode.window.createQuickPick();
123debugConfigPicker.canSelectMany = true;
124debugConfigPicker.ignoreFocusOut = true;
125debugConfigPicker.title = localize("DebugConfigQuickPickLabel", "Pick debug configurations");
126debugConfigPicker.items = this.pickConfig;
127// QuickPickItem property `picked` doesn't work, so this line will check first item in the list
128// which is supposed to be Debug Android
129debugConfigPicker.selectedItems = [this.pickConfig[0]];
130return debugConfigPicker;
131}
132}