in src/extension.ts [33:225]
export function activate(context: vscode.ExtensionContext) {
TelemetryClient.sendEvent("extensionActivated");
const outputChannel: vscode.OutputChannel = vscode.window.createOutputChannel(Constants.edgeDisplayName);
const edgeManager = new EdgeManager(context);
const gallery = new Gallery(context);
const simulator = new Simulator(context);
simulator.validateSimulatorUpdated(outputChannel);
const containerManager = new ContainerManager(simulator);
Utility.checkDockerState(outputChannel);
const statusBar: vscode.StatusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, -10000);
statusBar.command = "azure-iot-edge.setDefaultPlatform";
statusBar.text = formatStatusBarText(Platform.getDefaultPlatformStr());
statusBar.tooltip = Constants.platformStatusBarTooltip;
statusBar.show();
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e: vscode.ConfigurationChangeEvent) => {
if (e.affectsConfiguration("azure-iot-edge.defaultPlatform")) {
statusBar.text = formatStatusBarText(Platform.getDefaultPlatformStr());
}
}));
context.subscriptions.push(statusBar);
context.subscriptions.push(
vscode.languages.registerCompletionItemProvider([{ scheme: "file", language: "json" }, { scheme: "file", language: "jsonc" }],
new ConfigCompletionItemProvider(), "\"", ".", ":"));
context.subscriptions.push(
vscode.languages.registerHoverProvider([{ scheme: "file", language: "json" }, { scheme: "file", language: "jsonc" }],
new ConfigHoverProvider()));
// Calling registerDefinitionProvider will add "Go to definition" and "Peek definition" context menus to documents matched with the filter.
// Use the strict { pattern: "**/deployment.template.json" } instead of { language: "json" }, { language: "jsonc" } to avoid polluting the context menu of non-config JSON files.
context.subscriptions.push(
vscode.languages.registerDefinitionProvider([{ scheme: "file", pattern: Constants.deploymentTemplatePattern }, { scheme: "file", pattern: Constants.debugDeploymentTemplatePattern }],
new ConfigDefinitionProvider()));
const diagCollection: vscode.DiagnosticCollection = vscode.languages.createDiagnosticCollection(Constants.edgeDisplayName);
const configDiagnosticProvider: ConfigDiagnosticProvider = new ConfigDiagnosticProvider();
if (vscode.window.activeTextEditor) {
configDiagnosticProvider.updateDiagnostics(vscode.window.activeTextEditor.document, diagCollection);
}
context.subscriptions.push(diagCollection);
// For files that are over 5MB in size, an undefined event will be created
// https://github.com/Microsoft/vscode/issues/27100
context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor((event) => { if (event) { configDiagnosticProvider.updateDiagnostics(event.document, diagCollection); } }));
context.subscriptions.push(vscode.workspace.onDidSaveTextDocument((document) => configDiagnosticProvider.updateDiagnostics(document, diagCollection)));
context.subscriptions.push(vscode.workspace.onDidCloseTextDocument((document) => diagCollection.delete(document.uri)));
context.subscriptions.push(outputChannel);
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider("edge-coreclr", {resolveDebugConfiguration}));
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider("edge-node", {resolveDebugConfiguration}));
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider("edge-python", {resolveDebugConfiguration}));
context.subscriptions.push(vscode.languages.registerCodeLensProvider({ pattern: `**/{deployment.*.template.json,deployment.template.json}` }, new ASAModuleUpdateCodeLensProvider()));
initCommandAsync(context, outputChannel,
"azure-iot-edge.buildModuleImage",
(fileUri?: vscode.Uri): Promise<void> => {
return containerManager.buildModuleImage(fileUri, false);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.buildAndPushModuleImage",
(fileUri?: vscode.Uri): Promise<void> => {
return containerManager.buildModuleImage(fileUri, true);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.newSolution",
(parentUri?: vscode.Uri): Promise<void> => {
return edgeManager.createEdgeSolution(outputChannel, parentUri);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.buildSolution",
(templateUri?: vscode.Uri): Promise<void> => {
return containerManager.buildSolution(outputChannel, templateUri, false, false);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.buildAndPushSolution",
(templateUri?: vscode.Uri): Promise<void> => {
return containerManager.buildSolution(outputChannel, templateUri, true, false);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.buildAndRunSolution",
(templateUri?: vscode.Uri): Promise<void> => {
return containerManager.buildSolution(outputChannel, templateUri, false, true);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.runSolution",
(deployFileUri?: vscode.Uri): Promise<void> => {
return simulator.runSolution(outputChannel, deployFileUri);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.stopSolution",
(): Promise<void> => {
return simulator.stopSolution(outputChannel);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.generateDeployment",
(templateUri?: vscode.Uri): Promise<void> => {
return containerManager.generateDeployment(outputChannel, templateUri);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.addModule",
(templateUri?: vscode.Uri): Promise<void> => {
return edgeManager.addModuleForSolution(outputChannel, templateUri);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.convertModule",
(fileUri?: vscode.Uri): Promise<void> => {
return edgeManager.convertModule(fileUri);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.setupIotedgehubdev",
(deviceItem?: IDeviceItem): Promise<void> => {
return simulator.setupIotedgehubdev(deviceItem, outputChannel);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.startEdgeHubSingle",
(): Promise<void> => {
return simulator.startEdgeHubSingleModule(outputChannel);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.setModuleCred",
(): Promise<void> => {
return simulator.setModuleCred(outputChannel);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.setDefaultPlatform",
async (): Promise<void> => {
await edgeManager.selectDefaultPlatform(outputChannel);
const document = vscode.window && vscode.window.activeTextEditor ? vscode.window.activeTextEditor.document : null;
return configDiagnosticProvider.updateDiagnostics(document, diagCollection);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.setDefaultEdgeRuntimeVersion",
async (): Promise<void> => {
await edgeManager.selectDefaultEdgeRuntimeVersion(outputChannel);
const document = vscode.window && vscode.window.activeTextEditor ? vscode.window.activeTextEditor.document : null;
return configDiagnosticProvider.updateDiagnostics(document, diagCollection);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.showGallery",
async (): Promise<void> => {
return gallery.loadWebView();
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.addDevContainer",
async (): Promise<void> => {
return edgeManager.addDevContainerDefinition();
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.initializeSample",
async (name: string, url: string, platform: string): Promise<void> => {
return gallery.initializeSample(name, url, platform, outputChannel);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.internal.addModule",
async (templateFile: string, isNewSolution: boolean, moduleInfo: ModuleInfo, template: string): Promise<void> => {
return edgeManager.addModuleInfo(templateFile, outputChannel, isNewSolution, template, moduleInfo);
});
initCommandAsync(context, outputChannel,
"azure-iot-edge.internal.checkUpdateForASAModule",
async (templateFile: string, moduleName: string): Promise<void> => {
return edgeManager.checkAndUpdateASAJob(templateFile, moduleName);
});
context.subscriptions.push(vscode.window.onDidCloseTerminal((closedTerminal: vscode.Terminal) => {
Executor.onDidCloseTerminal(closedTerminal);
}));
const folders = vscode.workspace.workspaceFolders;
if (folders && folders.length > 0) {
folders.forEach((value) => edgeManager.checkRegistryEnv(value));
}
}