有没有办法在摩纳哥编辑器中手动触发验证?
Is there a way to trigger validation manually in monaco editor?
我正在使用默认的 TypeScript 服务,并且模型是异步初始化的,一个模型依赖于另一个模型。有一种情况是两个模型无法检测到对方,因此显示语义错误。如果我在依赖模型中进行一些编辑,导致模型重新验证,错误就会消失。
我试过手动setModel,解决了问题。但是,它会破坏撤消历史。
有没有办法手动重新验证模型?
这是我修复它的方法:
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)
每五十秒插入并立即删除 space。我不喜欢它,但它有效。
这是我的解决方案,摘自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);
}
异步创建模型时调用上述函数。
我正在使用默认的 TypeScript 服务,并且模型是异步初始化的,一个模型依赖于另一个模型。有一种情况是两个模型无法检测到对方,因此显示语义错误。如果我在依赖模型中进行一些编辑,导致模型重新验证,错误就会消失。
我试过手动setModel,解决了问题。但是,它会破坏撤消历史。
有没有办法手动重新验证模型?
这是我修复它的方法:
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)
每五十秒插入并立即删除 space。我不喜欢它,但它有效。
这是我的解决方案,摘自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);
}
异步创建模型时调用上述函数。