microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0690ab22cafc88eb82c872fb7df71edfee432da7

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/debuggingConfiguration/reactNativeDebugConfigProvider.ts

397lines · 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";
5471436aRedMickey5 years ago5import { TelemetryHelper } from "../../common/telemetryHelper";
6import { Telemetry } from "../../common/telemetry";
7import { PlatformType } from "../launchArgs";
8import { IWDPHelper } from "../../debugger/direct/IWDPHelper";
9import { DebugScenarioNameGenerator } from "./debugScenarioNameGenerator";
10import { ILaunchRequestArgs } from "../../debugger/debugSessionBase";
11import {
12DEBUG_TYPES,
13DebugScenarioType,
14DebugConfigurationQuickPickItem,
15DebugConfigurationState,
16} from "./debugConfigTypesAndConstants";
17import { MultiStepInput, IMultiStepInput, InputStep, IQuickPickParameters } from "./multiStepInput";
18import { ConfigProviderFactory } from "./configurationProviders/configProviderFactory";
0bfa4e58Yuri Skorokhodov7 years ago19import * as nls from "vscode-nls";
34472878RedMickey5 years ago20nls.config({
21messageFormat: nls.MessageFormat.bundle,
22bundleFormat: nls.BundleFormat.standalone,
23})();
0bfa4e58Yuri Skorokhodov7 years ago24const localize = nls.loadMessageBundle();
25
26export class ReactNativeDebugConfigProvider implements vscode.DebugConfigurationProvider {
27private debugConfigurations = {
6f9a0779JiglioNero5 years ago28"Attach to Hermes application - Experimental": {
29name: "Attach to Hermes application - Experimental",
30cwd: "${workspaceFolder}",
31type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
32request: "attach",
33},
34"Attach to Direct iOS - Experimental": {
35name: "Attach to Direct iOS - Experimental",
36cwd: "${workspaceFolder}",
37type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
38request: "attach",
39platform: PlatformType.iOS,
40useHermesEngine: false,
41port: IWDPHelper.iOS_WEBKIT_DEBUG_PROXY_DEFAULT_PORT, // 9221
42},
43"Attach to packager": {
44name: "Attach to packager",
34472878RedMickey5 years ago45cwd: "${workspaceFolder}",
46type: DEBUG_TYPES.REACT_NATIVE,
6f9a0779JiglioNero5 years ago47request: "attach",
0bfa4e58Yuri Skorokhodov7 years ago48},
6f9a0779JiglioNero5 years ago49"Debug Android": {
50name: "Debug Android",
34472878RedMickey5 years ago51cwd: "${workspaceFolder}",
52type: DEBUG_TYPES.REACT_NATIVE,
53request: "launch",
54platform: PlatformType.Android,
5514e287RedMickey6 years ago55},
d55f3c22Yuri Skorokhodov5 years ago56"Debug iOS": {
34472878RedMickey5 years ago57name: "Debug iOS",
58cwd: "${workspaceFolder}",
59type: DEBUG_TYPES.REACT_NATIVE,
60request: "launch",
61platform: PlatformType.iOS,
0bfa4e58Yuri Skorokhodov7 years ago62},
d55f3c22Yuri Skorokhodov5 years ago63"Debug Windows": {
34472878RedMickey5 years ago64name: "Debug Windows",
65cwd: "${workspaceFolder}",
66type: DEBUG_TYPES.REACT_NATIVE,
67request: "launch",
68platform: PlatformType.Windows,
36e9730fDavid Serafimov6 years ago69},
341dba36Yuri Skorokhodov5 years ago70"Debug macOS": {
34472878RedMickey5 years ago71name: "Debug macOS",
72cwd: "${workspaceFolder}",
73type: DEBUG_TYPES.REACT_NATIVE,
74request: "launch",
75platform: PlatformType.macOS,
341dba36Yuri Skorokhodov5 years ago76},
d55f3c22Yuri Skorokhodov5 years ago77"Debug in Exponent": {
34472878RedMickey5 years ago78name: "Debug in Exponent",
79cwd: "${workspaceFolder}",
80type: DEBUG_TYPES.REACT_NATIVE,
81request: "launch",
82platform: PlatformType.Exponent,
0bfa4e58Yuri Skorokhodov7 years ago83},
d55f3c22Yuri Skorokhodov5 years ago84"Debug Android Hermes - Experimental": {
34472878RedMickey5 years ago85name: "Debug Android Hermes - Experimental",
86cwd: "${workspaceFolder}",
87type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
88request: "launch",
89platform: PlatformType.Android,
549baae2RedMickey6 years ago90},
6f9a0779JiglioNero5 years ago91"Debug Direct iOS - Experimental": {
92name: "Debug Direct iOS - Experimental",
34472878RedMickey5 years ago93cwd: "${workspaceFolder}",
94type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
95request: "launch",
6f9a0779JiglioNero5 years ago96platform: PlatformType.iOS,
97useHermesEngine: false,
98target: "device",
99port: IWDPHelper.iOS_WEBKIT_DEBUG_PROXY_DEFAULT_PORT, // 9221
100},
101"Debug iOS Hermes - Experimental": {
102name: "Debug iOS Hermes - Experimental",
103cwd: "${workspaceFolder}",
104type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
105request: "launch",
106platform: PlatformType.iOS,
107},
5c9b8eb8RedMickey5 years ago108"Debug macOS Hermes - Experimental": {
109name: "Debug macOS Hermes - Experimental",
110cwd: "${workspaceFolder}",
111type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
112request: "launch",
113platform: PlatformType.macOS,
114},
008d88e5RedMickey4 years ago115"Debug Windows Hermes - Experimental": {
116name: "Debug Windows Hermes - Experimental",
117cwd: "${workspaceFolder}",
118type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
119request: "launch",
120platform: PlatformType.Windows,
121},
6f9a0779JiglioNero5 years ago122"Run Android": {
123name: "Run Android",
124cwd: "${workspaceFolder}",
125type: DEBUG_TYPES.REACT_NATIVE,
126request: "launch",
34472878RedMickey5 years ago127platform: PlatformType.Android,
128enableDebug: false,
5514e287RedMickey6 years ago129},
6f9a0779JiglioNero5 years ago130"Run iOS": {
131name: "Run iOS",
34472878RedMickey5 years ago132cwd: "${workspaceFolder}",
6f9a0779JiglioNero5 years ago133type: DEBUG_TYPES.REACT_NATIVE,
134request: "launch",
135platform: PlatformType.iOS,
136enableDebug: false,
549baae2RedMickey6 years ago137},
6f9a0779JiglioNero5 years ago138"Run Android Hermes - Experimental": {
139name: "Run Android Hermes - Experimental",
34472878RedMickey5 years ago140cwd: "${workspaceFolder}",
141type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
6f9a0779JiglioNero5 years ago142request: "launch",
143platform: PlatformType.Android,
144enableDebug: false,
259c018fYuri Skorokhodov5 years ago145},
6f9a0779JiglioNero5 years ago146"Run iOS Hermes - Experimental": {
147name: "Run iOS Hermes - Experimental",
34472878RedMickey5 years ago148cwd: "${workspaceFolder}",
149type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
150request: "launch",
151platform: PlatformType.iOS,
6f9a0779JiglioNero5 years ago152enableDebug: false,
259c018fYuri Skorokhodov5 years ago153},
d55f3c22Yuri Skorokhodov5 years ago154"Run Direct iOS - Experimental": {
34472878RedMickey5 years ago155name: "Run Direct iOS - Experimental",
156cwd: "${workspaceFolder}",
157type: DEBUG_TYPES.REACT_NATIVE_DIRECT,
158request: "launch",
159platform: PlatformType.iOS,
160enableDebug: false,
6f9a0779JiglioNero5 years ago161useHermesEngine: false,
162target: "device",
34472878RedMickey5 years ago163},
0bfa4e58Yuri Skorokhodov7 years ago164};
165
5471436aRedMickey5 years ago166private initialPickConfig: ReadonlyArray<vscode.QuickPickItem> = [
0bfa4e58Yuri Skorokhodov7 years ago167{
d55f3c22Yuri Skorokhodov5 years ago168label: "Debug Android",
0bfa4e58Yuri Skorokhodov7 years ago169description: localize("DebugAndroidConfigDesc", "Run and debug Android application"),
170},
5514e287RedMickey6 years ago171{
d55f3c22Yuri Skorokhodov5 years ago172label: "Run Android",
5514e287RedMickey6 years ago173description: localize("RunAndroidConfigDesc", "Run Android application"),
174},
0bfa4e58Yuri Skorokhodov7 years ago175{
d55f3c22Yuri Skorokhodov5 years ago176label: "Debug iOS",
0bfa4e58Yuri Skorokhodov7 years ago177description: localize("DebugiOSConfigDesc", "Run and debug iOS application"),
178},
5514e287RedMickey6 years ago179{
d55f3c22Yuri Skorokhodov5 years ago180label: "Run iOS",
5514e287RedMickey6 years ago181description: localize("RuniOSConfigDesc", "Run iOS application"),
182},
36e9730fDavid Serafimov6 years ago183{
d55f3c22Yuri Skorokhodov5 years ago184label: "Debug Windows",
36e9730fDavid Serafimov6 years ago185description: localize("DebugWindowsConfigDesc", "Run and debug Windows application"),
186},
341dba36Yuri Skorokhodov5 years ago187{
188label: "Debug macOS",
189description: localize("DebugmacOSConfigDesc", "Run and debug macOS application"),
190},
0bfa4e58Yuri Skorokhodov7 years ago191{
d55f3c22Yuri Skorokhodov5 years ago192label: "Attach to packager",
34472878RedMickey5 years ago193description: localize(
194"AttachToPackagerConfigDesc",
195"Attach to already working application packager",
196),
0bfa4e58Yuri Skorokhodov7 years ago197},
198{
d55f3c22Yuri Skorokhodov5 years ago199label: "Debug in Exponent",
34472878RedMickey5 years ago200description: localize(
201"DebugExpoConfigDesc",
202"Debug Expo application or React Native application in Expo",
203),
0bfa4e58Yuri Skorokhodov7 years ago204},
549baae2RedMickey6 years ago205{
d55f3c22Yuri Skorokhodov5 years ago206label: "Debug Android Hermes - Experimental",
34472878RedMickey5 years ago207description: localize(
208"DebugAndroidHermesConfigDesc",
209"Run and debug Android Hermes application",
210),
549baae2RedMickey6 years ago211},
212{
6f9a0779JiglioNero5 years ago213label: "Run Android Hermes - Experimental",
214description: localize("RunAndroidHermesConfigDesc", "Run Android Hermes application"),
215},
216{
217label: "Debug iOS Hermes - Experimental",
34472878RedMickey5 years ago218description: localize(
6f9a0779JiglioNero5 years ago219"DebugIosHermesConfigDesc",
220"Run and debug iOS Hermes application",
34472878RedMickey5 years ago221),
259c018fYuri Skorokhodov5 years ago222},
223{
6f9a0779JiglioNero5 years ago224label: "Run iOS Hermes - Experimental",
225description: localize("RunIosHermesConfigDesc", "Run iOS Hermes application"),
226},
5c9b8eb8RedMickey5 years ago227{
228label: "Debug macOS Hermes - Experimental",
229description: localize(
230"DebugMacOSHermesConfigDesc",
231"Run and debug macOS Hermes application",
232),
233},
008d88e5RedMickey4 years ago234{
235label: "Debug Windows Hermes - Experimental",
236description: localize(
237"DebugWindowsHermesConfigDesc",
238"Run and debug Windows Hermes application",
239),
240},
6f9a0779JiglioNero5 years ago241{
242label: "Attach to Hermes application - Experimental",
34472878RedMickey5 years ago243description: localize(
6f9a0779JiglioNero5 years ago244"AttachToPackagerHermesConfigDesc",
245"Attach to already working React Native Hermes application on Android directly",
34472878RedMickey5 years ago246),
259c018fYuri Skorokhodov5 years ago247},
248{
d55f3c22Yuri Skorokhodov5 years ago249label: "Debug Direct iOS - Experimental",
34472878RedMickey5 years ago250description: localize(
251"DebugDirectiOSConfigDesc",
252"Run and debug iOS application directly",
253),
259c018fYuri Skorokhodov5 years ago254},
255{
d55f3c22Yuri Skorokhodov5 years ago256label: "Run Direct iOS - Experimental",
34472878RedMickey5 years ago257description: localize(
258"RunDirectiOSConfigDesc",
259"Run iOS application with direct debugging support",
260),
549baae2RedMickey6 years ago261},
6f9a0779JiglioNero5 years ago262{
263label: "Attach to Direct iOS - Experimental",
264description: localize(
265"AttachToPackageriOSConfigDesc",
266"Attach to already working React Native iOS application directly",
267),
268},
0bfa4e58Yuri Skorokhodov7 years ago269];
270
5471436aRedMickey5 years ago271private sequentialPickConfig: ReadonlyArray<DebugConfigurationQuickPickItem> = [
272{
273label: "Run application",
274description: localize(
275"RunApplicationScenario",
276"Run React Native application without debugging",
277),
278type: DebugScenarioType.RunApp,
279},
280{
281label: "Debug application",
282description: localize("DebugApplicationScenario", "Debug React Native application"),
283type: DebugScenarioType.DebugApp,
284},
285{
286label: "Attach to application",
287description: localize(
288"AttachApplicationScenario",
289"Attach to running React Native application",
290),
291type: DebugScenarioType.AttachApp,
292},
293];
294
34472878RedMickey5 years ago295public async provideDebugConfigurations(
296folder: vscode.WorkspaceFolder | undefined, // eslint-disable-line @typescript-eslint/no-unused-vars
297token?: vscode.CancellationToken, // eslint-disable-line @typescript-eslint/no-unused-vars
298): Promise<vscode.DebugConfiguration[]> {
299return new Promise<vscode.DebugConfiguration[]>(resolve => {
0bfa4e58Yuri Skorokhodov7 years ago300const configPicker = this.prepareDebugConfigPicker();
301const disposables: vscode.Disposable[] = [];
302const pickHandler = () => {
34472878RedMickey5 years ago303let chosenConfigsEvent = TelemetryHelper.createTelemetryEvent(
304"chosenDebugConfigurations",
305);
0bfa4e58Yuri Skorokhodov7 years ago306let selected: string[] = configPicker.selectedItems.map(element => element.label);
74471e03Yuri Skorokhodov7 years ago307chosenConfigsEvent.properties["selectedItems"] = selected;
0bfa4e58Yuri Skorokhodov7 years ago308Telemetry.send(chosenConfigsEvent);
309const launchConfig = this.gatherDebugScenarios(selected);
310disposables.forEach(d => d.dispose());
311resolve(launchConfig);
312};
313
314disposables.push(
315configPicker.onDidAccept(pickHandler),
316configPicker.onDidHide(pickHandler),
34472878RedMickey5 years ago317configPicker,
0bfa4e58Yuri Skorokhodov7 years ago318);
319
320configPicker.show();
321});
322}
323
5471436aRedMickey5 years ago324public async provideDebugConfigurationSequentially(
325folder: vscode.WorkspaceFolder | undefined,
326token?: vscode.CancellationToken,
327): Promise<vscode.DebugConfiguration | undefined> {
328const config: Partial<ILaunchRequestArgs> = {};
329const state = { config, scenarioType: DebugScenarioType.DebugApp, folder, token };
330
331const multiStep = new MultiStepInput<DebugConfigurationState>();
332await multiStep.run((input, s) => this.pickDebugConfiguration(input, s), state);
333
334if (Object.keys(state.config).length === 0) {
335return;
336} else {
337if (state.config.type === DEBUG_TYPES.REACT_NATIVE_DIRECT) {
338state.config.name = DebugScenarioNameGenerator.createScenarioName(
339state.scenarioType,
340state.config.type,
341state.config.platform,
6f9a0779JiglioNero5 years ago342state.config.useHermesEngine !== false,
5471436aRedMickey5 years ago343true,
344);
345} else {
346state.config.name = DebugScenarioNameGenerator.createScenarioName(
347state.scenarioType,
348state.config.type || DEBUG_TYPES.REACT_NATIVE,
349state.config.platform,
350);
351}
352return state.config as vscode.DebugConfiguration;
353}
354}
355
356private async pickDebugConfiguration(
357input: IMultiStepInput<DebugConfigurationState>,
358state: DebugConfigurationState,
359): Promise<InputStep<DebugConfigurationState> | void> {
360state.config = {};
361const pick = await input.showQuickPick<
362DebugConfigurationQuickPickItem,
363IQuickPickParameters<DebugConfigurationQuickPickItem>
364>({
365title: localize("DebugConfigQuickPickSequentialLabel", "Select a debug configuration"),
366placeholder: "Debug Configuration",
367activeItem: this.sequentialPickConfig[0],
368items: this.sequentialPickConfig,
369});
370if (pick) {
371const provider = ConfigProviderFactory.create(pick.type);
372return provider.buildConfiguration.bind(provider);
373}
374}
375
0bfa4e58Yuri Skorokhodov7 years ago376private gatherDebugScenarios(selectedItems: string[]): vscode.DebugConfiguration[] {
34472878RedMickey5 years ago377let launchConfig: vscode.DebugConfiguration[] = selectedItems.map(
378element => this.debugConfigurations[element],
379);
0bfa4e58Yuri Skorokhodov7 years ago380return launchConfig;
381}
382
383private prepareDebugConfigPicker(): vscode.QuickPick<vscode.QuickPickItem> {
384const debugConfigPicker = vscode.window.createQuickPick();
385debugConfigPicker.canSelectMany = true;
386debugConfigPicker.ignoreFocusOut = true;
34472878RedMickey5 years ago387debugConfigPicker.title = localize(
388"DebugConfigQuickPickLabel",
389"Pick debug configurations",
390);
5471436aRedMickey5 years ago391debugConfigPicker.items = this.initialPickConfig;
0bfa4e58Yuri Skorokhodov7 years ago392// QuickPickItem property `picked` doesn't work, so this line will check first item in the list
393// which is supposed to be Debug Android
5471436aRedMickey5 years ago394debugConfigPicker.selectedItems = [this.initialPickConfig[0]];
0bfa4e58Yuri Skorokhodov7 years ago395return debugConfigPicker;
396}
397}