codemmirror -检查-是否有一个事件显式地触发检查

Codemirror- linting - Is there a event to trigger linting explictly?

本文关键字:检查 事件 是否 有一个 codemmirror      更新时间:2023-09-26

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

我在工具栏中提供了一个图标,在单击这个图标时,我正在进行解析和构造错误。但是我被困在如何更新编辑器中的lint错误?

lint插件为所有名为performLint的Editor实例添加了一个"extension"方法,结合lint: { lintOnChange: false }的编辑器选项,然后您可以通过调用mirror.performLint()来调用linter。

如果你定义了自己的lint方法ala

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

将被performLint()调用

你试过使用下面的代码动态设置lint值吗?

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

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

在一行中触发lint:

// 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; }
});

如果你想知道为什么它会工作,看看addon/lint/lint.js,特别是以下几行:

  CodeMirror.defineOption("lint", false, function(cm, val, old) {
  ...
    if (val) {
      ...
      startLinting(cm);
    }
  });

这听起来像是一个似乎不存在的好功能。

创建一个按钮来从外部按钮启动验证是很简单的。

例如[no credit] https://jsfiddle.net/q43drhyk/

function checkFormat(editor) {
    var success = JSHINT(editor.getValue());
    var output = '';
    if (!success) {
        output = "Check format error:'n'n";
        for (var i in JSHINT.errors) {
            var err = JSHINT.errors[i];
            if (null != err) {
                output += err.line + '[' + err.character + ']: ' + err.reason + ''n';
            } else {
                output += "Check format unknown error:'n";
            }
        }
        alert(output);
    }
    return success;
}

然而,这并没有呈现codemmirror编辑器中的验证消息,以显示在linenumber沟中,这是OP正在寻找的。

要做到这一点,你可以自定义lint附加代码。例如,从json-lint提供的标准插件[https://github.com/codemirror/CodeMirror/blob/master/addon/lint/json-lint.js]

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;
}
  • 使用。

    关闭自动检测CodeMirror选项

    lintOnChange:假

  • 当你想要检查时,呼叫mylinthandler(editor.getValue())