簡體   English   中英

對 CodeMirror 的 lint 功能使用異步警告源

[英]Using an asynchronous warning source for CodeMirror's lint feature

這些示例僅展示了如何使用同步的 CodeMirror(基於 Javascript 的語法突出顯示編輯器)實現 JSON 和 Javascript lint 插件。

不幸的是,大多數語言都沒有現成的基於 Javascript 的解析器/lint'ers。 我想為 Python 實現我自己的 linter。 不幸的是,似乎現有的 lint 插件依賴於同步的 linter(由 lint 插件調用)。

Angelozerr 說在 remoting-lint.js 中有一個“CodeMirror.remotingValidator”插件,但 Github 顯示這個文件已被刪除。 marijnh 說它被刪除是因為它“通常沒有用”,但沒有說明任何替代方案。

是否有某種策略以某種方式異步調用 linter,以便我可以執行 Ajax 調用以遠程解析代碼?

當然有。 快速瀏覽最新版本的remoting-lint.js( https://github.com/marijnh/CodeMirror/commit/27f097ed75561e846bdb955f13f8dd2bcf0b589e )的內容表明它只是一個jQuery AJAX請求,它會調用提供的回調作為參數的功能。 只有在為lint插件提供“async”選項時才會傳遞此回調。 請注意,我有一些傳入CodeMirror的選項可能與您無關。 與棉絨有關的選項是“排水溝”和“lintWith”。

請注意,Python一次只出現一個錯誤,但lint插件接受錯誤列表。 由於前者,后者最多只能有一個項目。

function python_validator(cm, updateLinting, options) {
    var text = cm.getValue() + "\n";

    if(text.trim() == "")
    {
        updateLinting(cm, []);
        return;
    }

    function result_cb(error)
    {
        var found = [];

        if(error != null) {
            var start_line = error.line_no;
            var start_char = error.column_no;
            var end_line = error.line_no;
            var end_char = error.column_no;
            var message = error.message;

            found.push({
                from: CodeMirror.Pos(start_line - 1, start_char),
                to: CodeMirror.Pos(end_line - 1, end_char),
                message: message
            });
        }

        updateLinting(cm, found);
    }

    check_python_syntax(text, result_cb)
};  

var text_obj = $discriminator_text.get()[0];
var editor = CodeMirror.fromTextArea(text_obj, {
    mode: { name: "python",
            version: 2,
            singleLineStringErrors: false },
    lineNumbers: true,
    indentUnit: 4,
    tabMode: "shift",
    matchBrackets: true,
    styleActiveLine: true,
    lineWrapping: false,
    gutters: ["CodeMirror-lint-markers"],
    lintWith: {
        "getAnnotations": python_validator,
        "async" : true,
    },
});

我發布了一個非常簡單的項目,使其更簡單: https//github.com/dsoprea/CodeMirrorRemoteValidator

感謝您發布該項目,但對我而言,它現在仍然在 codemirror textarea 中顯示錯誤。 你能不能多加點光照

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM