CodeMirror 3.x - 每次linter完成时是否会触发事件?

时间:2013-06-10 03:39:34

标签: codemirror

背景

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

问询

我想计算掉色错误的数量和类型,并在页面的其他位置显示摘要。为此,我想知道linter何时完成执行,以便我不必轮询更改。

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

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

参考

这是我的错误计数器代码段(coffeescript):

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"

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

Javascript在CodeMirror中使用完成回调

进行linting

很多感谢Marijn编写优秀的CodeMirror并对其提供支持。这个答案旨在提供一个完整的解释/解决方案(结合Marijn的答案)。

具体而言,以下特征/要求:

  • 初始化Code​​Mirror
  • 应用随附的javascript验证程序(linter)
  • 使用内置linting界面
  • 公开linter的完成回调

初始化Code​​Mirror

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
  }
]