为CodeMirror的lint特性使用异步警告源

2024-09-29 00:13:47 发布

您现在位置:Python中文网/ 问答频道 /正文

这些示例只展示了如何使用codemrror(语法突出显示基于Javascript的编辑器)实现JSON和Javascript lint插件,它们是同步的。在

不幸的是,大多数语言都没有基于Javascript的解析器/lint'er。我想为Python实现我自己的linter。不幸的是,现有的lint插件似乎依赖于linter(lint插件调用它)是同步的。在

angelozerr说CodeMirror.remotingValidator“位于远程处理中的插件-皮棉,但Github显示此文件已被删除。marijnh说它被删除是因为它“一般不有用”,但没有澄清任何替代方案。在

有没有一种策略,以某种方式异步调用linter,这样我就可以通过Ajax调用远程解析代码了?在


Tags: 插件语言json解析器示例远程linter语法
1条回答
网友
1楼 · 发布于 2024-09-29 00:13:47

当然有。快速浏览远程处理的最新版本的内容-皮棉(https://github.com/marijnh/CodeMirror/commit/27f097ed75561e846bdb955f13f8dd2bcf0b589e)表明它只不过是一个jqueryajax请求,它调用作为参数提供给函数的回调函数。只有将“async”选项赋予lint插件时,才会传递此回调。请注意,我有一些选项被传递到CodeMirror中,这些选项可能与您无关。与lint相关的选项是“gutters”和“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

相关问题 更多 >