in src/extension/rn-extension.ts [82:232]
export async function activate(context: vscode.ExtensionContext): Promise<void> {
const extensionName = getExtensionName();
const appVersion = getExtensionVersion();
if (!appVersion) {
throw new Error(localize("ExtensionVersionNotFound", "Extension version is not found"));
}
if (extensionName) {
const extensionFirstTimeInstalled = !cachedVersionExists();
const isUpdatedExtension = isUpdatedVersion(appVersion);
if (extensionName.includes("preview")) {
if (showTwoVersionFoundNotification()) {
return;
}
} else if (isUpdatedExtension) {
showChangelogNotificationOnUpdate(appVersion);
}
if (isUpdatedExtension) {
TipNotificationService.getInstance().updateTipsConfig();
}
void TipNotificationService.getInstance().showTipNotification();
SurveyService.getInstance().setExtensionFirstTimeInstalled(extensionFirstTimeInstalled);
void SurveyService.getInstance().promptSurvey();
}
outputChannelLogger.debug("Begin to activate...");
outputChannelLogger.debug(`Extension version: ${appVersion}`);
// eslint-disable-next-line @typescript-eslint/no-var-requires
const ExtensionTelemetryReporter = require("vscode-extension-telemetry").default;
const reporter = new ExtensionTelemetryReporter(
APP_NAME,
appVersion,
Telemetry.APPINSIGHTS_INSTRUMENTATIONKEY,
);
const configProvider = (debugConfigProvider = new ReactNativeDebugConfigProvider());
const dymConfigProvider = (dynamicDebugConfigProvider =
new ReactNativeDebugDynamicConfigProvider());
const completionItemProviderInst = new LaunchJsonCompletionProvider();
const workspaceFolders: readonly vscode.WorkspaceFolder[] | undefined =
vscode.workspace.workspaceFolders;
let extProps: ICommandTelemetryProperties = {};
if (workspaceFolders) {
extProps = {
workspaceFoldersCount: { value: workspaceFolders.length, isPii: false },
};
}
EXTENSION_CONTEXT = context;
return entryPointHandler.runApp(
APP_NAME,
appVersion,
ErrorHelper.getInternalError(InternalErrorCode.ExtensionActivationFailed),
reporter,
async () => {
EXTENSION_CONTEXT.subscriptions.push(
vscode.workspace.onDidChangeWorkspaceFolders(event =>
onChangeWorkspaceFolders(event),
),
);
EXTENSION_CONTEXT.subscriptions.push(
vscode.workspace.onDidChangeConfiguration(() => onChangeConfiguration()),
);
EXTENSION_CONTEXT.subscriptions.push(TipNotificationService.getInstance());
EXTENSION_CONTEXT.subscriptions.push(SurveyService.getInstance());
EXTENSION_CONTEXT.subscriptions.push(
vscode.debug.registerDebugConfigurationProvider(
DEBUG_TYPES.REACT_NATIVE,
configProvider,
),
);
EXTENSION_CONTEXT.subscriptions.push(
vscode.debug.registerDebugConfigurationProvider(
DEBUG_TYPES.REACT_NATIVE,
dymConfigProvider,
vscode.DebugConfigurationProviderTriggerKind.Dynamic,
),
);
EXTENSION_CONTEXT.subscriptions.push(
vscode.debug.registerDebugConfigurationProvider(
DEBUG_TYPES.REACT_NATIVE_DIRECT,
dymConfigProvider,
vscode.DebugConfigurationProviderTriggerKind.Dynamic,
),
);
EXTENSION_CONTEXT.subscriptions.push(
vscode.languages.registerCompletionItemProvider(
{ language: JsonLanguages.json },
completionItemProviderInst,
),
);
EXTENSION_CONTEXT.subscriptions.push(
vscode.languages.registerCompletionItemProvider(
{ language: JsonLanguages.jsonWithComments },
completionItemProviderInst,
),
);
const sessionManager = new ReactNativeSessionManager();
EXTENSION_CONTEXT.subscriptions.push(
vscode.debug.registerDebugAdapterDescriptorFactory(
DEBUG_TYPES.REACT_NATIVE,
sessionManager,
),
);
EXTENSION_CONTEXT.subscriptions.push(
vscode.debug.registerDebugAdapterDescriptorFactory(
DEBUG_TYPES.REACT_NATIVE_DIRECT,
sessionManager,
),
);
EXTENSION_CONTEXT.subscriptions.push(sessionManager);
EXTENSION_CONTEXT.subscriptions.push(
DebugSessionBase.onDidTerminateRootDebugSession(terminateEvent => {
sessionManager.terminate(terminateEvent);
}),
);
const activateExtensionEvent = TelemetryHelper.createTelemetryEvent("activate");
Telemetry.send(activateExtensionEvent);
const promises: Promise<void>[] = [];
if (workspaceFolders) {
outputChannelLogger.debug(`Projects found: ${workspaceFolders.length}`);
workspaceFolders.forEach((folder: vscode.WorkspaceFolder) => {
promises.push(onFolderAdded(folder));
});
} else {
outputChannelLogger.warning("Could not find workspace while activating");
TelemetryHelper.sendErrorEvent(
"ActivateCouldNotFindWorkspace",
ErrorHelper.getInternalError(InternalErrorCode.CouldNotFindWorkspace),
);
}
await Promise.all(promises);
registerReactNativeCommandPaletteCommands();
registerReactNativeSpecialCommands();
},
extProps,
);
}