async handleUri()

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');
                }
            }
        }
    }