You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Monaco Editor中为新注册的Java语言添加未知包导入错误高亮

如何在Monaco Editor中为Java语言添加未知包/模块的错误提示

首先明确:Tokenizer只负责语法高亮,和错误诊断完全无关,你之前的方向不对,要实现类似TypeScript的红色错误下划线,核心是利用Language Server Protocol(LSP)的诊断能力,让Java Language Server(JLS)把错误信息传递给Monaco Editor。

具体步骤如下:

1. 确保JLS能生成并发送诊断信息

  • 检查Monaco与JLS的LSP通信链路是否正常,确认JLS在检测到未知导入时,能生成符合LSP规范的Diagnostic对象,包含:
    • 错误文本的精确range(起始/结束的行号、列号)
    • 错误级别(设为Error级)
    • 清晰的错误提示信息(比如“无法解析此导入包”)
  • 确保JLS通过textDocument/publishDiagnostics通知,把诊断数据发送给Monaco客户端。

2. 在Monaco中处理诊断信息并显示

当Monaco收到JLS的诊断通知后,调用monaco.editor.setModelMarkers方法,把诊断信息绑定到对应的Java模型上:

// 示例代码:处理JLS的publishDiagnostics通知
connection.onPublishDiagnostics((params) => {
  const model = monaco.editor.getModel(monaco.Uri.parse(params.uri));
  if (model) {
    // 将LSP的Diagnostic转换为Monaco的Marker格式
    const markers = params.diagnostics.map(diag => ({
      severity: diag.severity === 1 ? monaco.MarkerSeverity.Error : monaco.MarkerSeverity.Warning,
      startLineNumber: diag.range.start.line + 1,
      startColumn: diag.range.start.character + 1,
      endLineNumber: diag.range.end.line + 1,
      endColumn: diag.range.end.character + 1,
      message: diag.message,
      source: 'java'
    }));
    monaco.editor.setModelMarkers(model, 'java', markers);
  }
});

这样Monaco就会自动为错误位置添加红色下划线,并在hover时显示错误信息。

效果对比

当前Java编辑器无错误提示的状态:
Java导入无错误提示

期望实现的TypeScript式错误提示效果:
TypeScript未知包错误提示

内容的提问来源于stack exchange,提问作者Bansl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:48:23