![](/img/trans.png)
[英]Codemirror lint feature not working react-codemirror in React/Redux/Typescript App
[英]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.