我正在使用默认的TypeScript服务,并且根据一个模型对另一个模型进行异步初始化。在某些情况下,两个模型无法相互检测,因此显示出语义错误。如果我在从属模型中进行了一些编辑,导致重新验证了模型,则错误消失了。
我尝试手动设置setModel,从而解决了问题。但是,它破坏了撤消历史。
是否可以手动重新验证模型?
答案 0 :(得分:0)
这就是我要解决的问题:
setInterval(() => {
const range = new monaco.Range(1,1,1,1);
const addEmptySpace = {forceMoveMarkers: true, range, text: ' '};
for (const m of monaco.editor.getModels()) {
const toInvert = m.applyEdits([addEmptySpace]);
m.applyEdits(toInvert);
}
}, 50*1000)
每插入五十秒钟,立即删除一个空格。我不喜欢,但是可以。
答案 1 :(得分:0)
这是我的解决方案,摘自monaco-typescript:
async function revalidateModel(model) {
if (!model || model.isDisposed()) return;
const getWorker = await monaco.languages.typescript.getTypeScriptWorker();
const worker = await getWorker(model.uri);
const diagnostics = (await Promise.all([
worker.getSyntacticDiagnostics(model.uri.toString()),
worker.getSemanticDiagnostics(model.uri.toString())
])).reduce((a, it) => a.concat(it));
const markers = diagnostics.map(d => {
const start = model.getPositionAt(d.start);
const end = model.getPositionAt(d.start + d.length);
return {
severity: monaco.MarkerSeverity.Error,
startLineNumber: start.lineNumber,
startColumn: start.column,
endLineNumber: end.lineNumber,
endColumn: end.column,
message: flattenDiagnosticMessageText(d.messageText, "\n")
};
});
const owner = model.getLanguageIdentifier().language;
monaco.editor.setModelMarkers(model, owner, markers);
}
异步创建模型时,请调用上面的函数。