当使用诊断并一起悬停时将信息存储在模型中

问题描述

我正在用Monaco Editor编写自己的IDE。

首先,我有一个诊断程序,可以根据optimizeFormula(text,"A1")的结果设置标记:

export class DiagnosticsAdapter {

    private async _doValidate(model: monaco.editor.ITextModel): Promise<void> {
        if (model.isDisposed()) {
            // model was disposed in the meantime
            return;
        }

        const promises: Promise<Diagnostic>[] = [];

        let text = model.getValue();

        let resultA = optimizeFormula(text,"A1");  

        resultA.forEach(resultA1 => {
            promises.push(Promise.resolve({ // see "interface Diagnostic" and "interface DiagnosticRelatedInformation" above
                category: DiagnosticCategory.Warning,// DiagnosticCategory.Suggestion,category: DiagnosticCategory.Error,code: utilities.codeFromRule(resultA1.rule),file: undefined,length: resultA1.ending - resultA1.start,messageText: utilities.diagnosticMessageFromResult(resultA1),start: resultA1.start + 1,}))    
        });

        const diagnostics = await Promise.all(promises);

        if (!diagnostics || model.isDisposed()) {
            // model was disposed in the meantime
            return;
        }

        const markers = diagnostics
            .map(d => this._convertDiagnostics(model,d));

        monaco.editor.setModelMarkers(model,this._selector,markers);
    }
}

因为我们可以在悬停的弹出窗口中编写markdown,所以我也使用悬停,它是由先前生成的标记制成的。

public async provideHover(model: monaco.editor.ITextModel,position: monaco.Position,token: CancellationToken): Promise<monaco.languages.Hover | undefined> {

        let contents : any[] = [];
        monaco.editor.getModelMarkers({}).forEach(marker => {
        let markerStart = new monaco.Position(marker.startLineNumber,marker.startColumn);
        let markerEnd = new monaco.Position(marker.endLineNumber,marker.endColumn);
            if (markerStart.isBeforeOrEqual(position) && position.isBeforeOrEqual(markerEnd) && marker.code != undefined) {  
                contents.push({ value: utilities.contentMarkdownFromCodeMessage(marker.code,marker.message),isTrusted: false })
            }
        })
        return { contents: contents };
}

请注意,悬停的内容是由之前生成的标记制成的。

但是,在构建标记的过程中,我希望直接根据optimizeFormula(text,"A1")的结果构建悬停的内容。但是我不想再次运行optimizeFormula(text,"A1")

因此,理想情况下,我想一次在optimizeFormula(text,"A1")中计算 _doValidate的结果,将其保存在模型中的某个地方,然后在provideHover中得到它。

有可能吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)