Javascript Codemirror-linting-是否存在明确触发linting的事件?

Javascript Codemirror-linting-是否存在明确触发linting的事件?,javascript,codemirror,Javascript,Codemirror,我正在使用工具栏附带的CodeMirror设计一个应用程序。由于性能原因,我没有通过异步或异步模式执行lint 我在工具栏中提供了一个图标,单击这个图标,我正在解析和构造错误。但我一直在思考如何在编辑器中更新lint错误 任何指针都会非常有用。您是否尝试过使用以下代码动态设置lint值 //enable editor.setOption("lint",true); //disable editor.setOption("lint",false); 您可以在这里看到一个演示它听起来像是一个不错

我正在使用工具栏附带的CodeMirror设计一个应用程序。由于性能原因,我没有通过异步或异步模式执行lint

我在工具栏中提供了一个图标,单击这个图标,我正在解析和构造错误。但我一直在思考如何在编辑器中更新lint错误


任何指针都会非常有用。

您是否尝试过使用以下代码动态设置lint值

//enable
editor.setOption("lint",true);

//disable
editor.setOption("lint",false);

您可以在这里看到一个演示

它听起来像是一个不错的功能,但似乎并不存在

创建一个按钮以从外部按钮启动验证是非常重要的

例如[无信用]

但是,这不会使CodeMirror编辑器中的验证消息显示在行号槽中,而这正是OP所寻找的

为此,您可以定制lint附加代码。 例如,标准插件中提供的json lint [

1.将registerHelper()的主体提取到一个新函数中,该函数将复制现有函数:

CodeMirror.registerHelper("lint", "json", function(text) {
   return mylinthandler(text)
}

mylinthandler(text) {
 var found = [];
  jsonlint.parseError = function(str, hash) {
    var loc = hash.loc;
    found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column),
                to: CodeMirror.Pos(loc.last_line - 1, loc.last_column),
                message: str});
  };
  try { jsonlint.parse(text); }
  catch(e) {}
  return found;
}
  • 使用关闭自动lint CodeMirror选项

    林东换:错

  • 然后,当你想脱毛时,打电话
    mylinthandler(editor.getValue())


  • 要在一行中触发皮棉,请执行以下操作:

    // trigger registered lint handler
    editor.setOption("lint", {});
    
    // trigger custom lint handler defined on the fly
    editor.setOption("lint", { 
      getAnnotations: function() { /* some smart code */ return found; }
    });
    
    如果您想知道它为什么会起作用,请特别注意以下几行:

      CodeMirror.defineOption("lint", false, function(cm, val, old) {
      ...
        if (val) {
          ...
          startLinting(cm);
        }
      });
    
    lint插件向所有名为
    performLint
    的编辑器实例添加一个“扩展”方法,并与
    lint:{lintOnChange:false}
    的编辑器选项相结合,然后您可以通过调用
    mirror.performLint()
    来调用linter

    如果您定义自己的lint方法

    CodeMirror.registerHelper('lint', 'mode', (text) => { /* your cool stuff here */ })
    

    这将在
    performLint()

    上被调用“我不是通过异步或异步模式执行lint”恐怕我不明白,你能澄清一下吗?(当然没有两种不同的模式称为“异步”和“异步”?)有两种方法可以注册lint代码镜像。registerHelper(“lint”,“自定义”,函数(text){}),并设置代码镜像选项lint=true。另一个使用lintWith选项。lintWith:{“getAnnotations”:myvalidator,“async”:true,}
    CodeMirror.registerHelper('lint', 'mode', (text) => { /* your cool stuff here */ })