2014-07-04 102 views
2

我正在设计一个使用工具栏附带的CodeMirror的应用程序。由于性能原因,我不是通过异步模式或异步模式执行lint。Codemirror-linting - 是否有事件可以明确触发linting?

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

任何指针都会非常有帮助。

+0

*“我没有通过异步或异步模式执行皮棉”*我恐怕我不明白,你能澄清吗? (肯定有没有两种不同的*模式称为“async”和“asynch”?) –

+0

有两种方法可以注册lint CodeMirror.registerHelper(“lint”,“custom”,function(text){} )并设置codemirror选项lint = true。另一个是使用lintWith选项。 lintWith:{ “getAnnotations”:myvalidator, “async”:true, } – Chetan

回答

2

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

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

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

你可以看到一个演示这里JSFiddle link

2

这听起来像没有出现存在一个很好的功能。

创建按钮以从外部按钮启动验证很简单。

例如[无信用] https://jsfiddle.net/AlexAtIkanow/3pVxP/

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

然而,这并不呈现在CodeMirror编辑器中的验证消息的行号排水沟,这是什么OP一直在寻找可以显示。

为此,您可以自定义lint附加代码。 例如从标准插件提供的JSON-棉绒 [https://github.com/codemirror/CodeMirror/blob/master/addon/lint/json-lint.js]

1.Extract 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选项。

    lintOnChange:假

  • 然后,当你想皮棉,叫 mylinthandler(editor.getValue())

  • 1

    要在一行触发皮棉:

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

    皮棉插件增加了一个“扩展”的方法称为performLint所有编辑器的情况下,与lint: { lintOnChange: false }编辑器选项结合起来,然后你可以通过调用mirror.performLint()调用棉短绒。

    如果你定义自己的皮棉方法ALA

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

    即会得到performLint()调用。

    相关问题