3

背景

  • 我目前正在使用 CodeMirror 3.13
  • 我在一个页面上有多个编辑器(可能不重要)

我想计算掉毛错误的数量和类型,并在页面的其他地方显示摘要。为此,我想知道 linter 何时完成执行,这样我就不必轮询更改。

什么是基于事件的解决方案?

感谢您的时间!(我赞成所有有效的尝试......当然这显然不是错误的)

参考

这是我的错误计数器片段(咖啡脚本):

for eachError in doc.getAllMarks()
  numStaticErrors++ if eachError.className is "CodeMirror-lint-mark-error"
  numStaticErrors++ if eachError.className is "CodeMirror-lint-marker-warning"
  numStaticErrors++ if eachError.className is "CodeMirror-lint-marker-multiple"
4

2 回答 2

4

目前,通知 linting 事件的唯一方法是将"lintWith"选项设置为包含onUpdateLinting属性的对象,这是一个回调,每当更新标记时,将调用 linting 错误/警告列表作为其第一个参数。

于 2013-06-12T07:57:31.333 回答
1

带有完成回调的 CodeMirror 中的 Javascript linting

非常感谢 Marijn 编写了出色的 CodeMirror 并对其提供了如此出色的支持。该答案旨在提供完整的解释/解决方案(结合上述 Marijn 的答案)。

具体来说,以下功能/要求:

  • 初始化代码镜像
  • 应用包含的 javascript 验证器(linter)
  • 使用内置的 linting 接口
  • 公开 linter 的完成回调

初始化代码镜像

CoffeeScript中(因为它更清晰):

options = 
        mode: "javascript"
        lineNumbers: true 
        gutters: ["CodeMirror-lint-markers"]
        lintWith: 
          getAnnotations: CodeMirror.javascriptValidator
          onUpdateLinting: (lintErrorsWarnings) -> 
            # Do something with the linter's errors and warnings
CodeMirror $("#editor"), options

lintErrorsWarnings 格式

linter 的完成回调接受一个参数,它是一个对象数组,如下例所示:

[
  {
    from: Pos
      ch: 0
      line: 0
    message: "Expected an assignment or function call and instead saw an expression."
    severity: "error"
    to: Pos
      ch: 5
      line: 0
  },
  {
    from: Pos
      ch: 5
      line: 0
    message: "Missing semicolon."
    severity: "error"
    to: Pos
      ch: 6
      line: 0
  }
]
于 2013-08-11T00:44:14.917 回答