2013-04-16 15 views
11

Örnekler, JSON ve Javascript tiftik eklerinin yalnızca CodeMirror (syntax-highlighting Javascript-based editor) ile eşzamanlı olarak nasıl uygulanacağını gösterir. Ne yazık ki, çoğu dil için hazırda Javascript tabanlı ayrıştırıcılar/tiftikler bulunmuyor. Python için kendi linterimi uygulamak istiyorum. Ne yazık ki, var olan tiftik addonunun, lint (lint eklentisinin başladığı) zamana bağlı olması gibi görünmektedir.CodeMirror'ın lint özelliği için eşzamansız bir uyarı kaynağı kullanma

angelozerr, remoting-lint.js'de bulunan bir "CodeMirror.remotingValidator" eklentisinin olduğunu söylüyor, ancak Github bu dosyanın kaldırıldığını gösteriyor. marijnh, "genel olarak yararlı değil" olduğu için kaldırıldığını, ancak herhangi bir alternatı netleştirmediğini söylüyor.

Kodun eşzamansız olarak çağırılması için bir yöntem var mı, kodun uzaktan ayrıştırılması için bir Ajax çağrısı yapabilmem için mi?

cevap

16

Elbette var. Remoting-lint.js'nin (https://github.com/marijnh/CodeMirror/commit/27f097ed75561e846bdb955f13f8dd2bcf0b589e) son sürümünün içeriğine hızlı bir bakış, bir jQuery AJAX isteğinden çok daha az olduğunu gösterir; bu, işlev için bir parametre olarak sağlanan bir geri çağırma başlatır. Bu geri çağrı sadece tiftik eklentisine "async" seçeneği verildiğinde iletilecektir. CodeMirror'a, sizin için alakalı olmayan bazı seçeneklerin olduğunu unutmayın. Tüylerle ilgili seçenekler "oluklar" ve "lintWith" dir.

Python'un aynı anda yalnızca bir hata gösterdiğini, ancak lint addon'un bir hata listesi kabul ettiğini unutmayın. Eskiden beri, ikincisi en fazla bir tane olacak. Bunun biraz daha anlaşılır hale getirmek için çok basit bir proje gönderdiniz

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

: iyi koymak https://github.com/dsoprea/CodeMirrorRemoteValidator

+2

, 1 bilginizi paylaşmak için istekli ve ekstra çaba (kendi yazı cevap) bir github projesi yayınlamak. –

+2

Her şey bununla ilgili. –