in vscode/qodana/src/core/handler/index.ts [43:118]
async handleUri(uri: vscode.Uri) {
if (uri.path === '/showMarker') {
let query = uri.query.split('&');
let uriPathArg = query.find((value) => {
return value.startsWith('path=');
});
if (!uriPathArg) {
vscode.window.showErrorMessage(FAILED_PATH_NOT_PRESENT);
telemetry.errorReceived('#handleUri no path');
return;
}
let uriPath = decodeURIComponent(uriPathArg?.split('=')[1]);
let cloudProjectIdArg = query.find((value) => {
return value.startsWith('cloud_project_id=');
});
if (!cloudProjectIdArg) {
vscode.window.showErrorMessage(FAILED_ID_NOT_PRESENT);
telemetry.errorReceived('#handleUri no projectId');
return;
}
let cloudHostArg = query.find((value) => {
return value.startsWith('cloud_host=');
});
if (cloudHostArg) {
let authorized = extensionInstance.auth?.getAuthorized();
let cloudHost = cloudHostArg.split('=')[1];
if (!authorized || !hostsEqual(authorized.environment?.frontendUrl, cloudHost)) {
await extensionInstance.auth?.logOut();
let newAuthorized = await extensionInstance.auth?.logIn(cloudHost);
if (!newAuthorized) {
return;
}
}
}
let cloudProjectId = cloudProjectIdArg.split('=')[1];
let projectIdAccepted = await this.projectIdNotSet(cloudProjectId);
if (!projectIdAccepted) {
// user didn't accept this project id
return;
}
let cloudReportIdArg = query.find((value) => {
return value.startsWith('cloud_report_id=');
});
if (!cloudReportIdArg) {
vscode.window.showErrorMessage(FAILED_REPORT_ID_NOT_PRESENT);
telemetry.errorReceived('#handleUri no reportId');
return;
}
let cloudReportId = cloudReportIdArg.split('=')[1];
Events.instance.fireUrlCallback({ projectId: cloudProjectId, reportId: cloudReportId });
let pathValueParts = uriPath.split(':');
if (pathValueParts.length === 3) {
let filePath = pathValueParts[0];
let line = pathValueParts[1];
let column = pathValueParts[2];
let pathPrefix = config.getAbsolutePrefix(this.context);
if (pathPrefix) {
let length = query.find((value) => {
return value.startsWith('length=');
});
let lengthValue = length?.split('=')[1] || '1';
let settings = vscode.Uri.file(join(pathPrefix, filePath));
let doc = await vscode.workspace.openTextDocument(settings);
let editor = await vscode.window.showTextDocument(doc);
let startPosition = new vscode.Position(Number(line) - 1, Number(column) - 1);
let endPosition = new vscode.Position(Number(line) - 1, Number(column) - 1 + Number(lengthValue));
editor.selection = new vscode.Selection(startPosition, endPosition);
editor.revealRange(new vscode.Range(startPosition, endPosition), vscode.TextEditorRevealType.InCenter);
return;
} else {
vscode.window.showErrorMessage(FAILED_PREFIX_NOT_SET);
telemetry.errorReceived('#handleUri no prefix');
}
}
}
}