2015-06-23 17 views
8

Chcę dodać listę zdefiniowanych przez użytkownika funkcji i zmiennych do autouzupełniania edytora asa. Aby to zrobić Chcę zbadać cały wstawiony do dokumentu użytkownika kodu, znaleźć określone funkcje (i ich argumentów), zdefiniowane zmienne i ich zakres, itpDodawanie do ace-editor mądrego autouzupełniania: Lista zdefiniowanych przez użytkownika funkcji i zmiennych (język javascript)

Główne pytanie

Czy to już dane obliczony gdzieś w ace kodu źródłowego (lub język-plugin) i może po prostu chwycić go w sposób `

Co chcę

dla exapmle, jeśli użytkownik wprowadzony kod jak poniżej:

var var0 = 'abcd'; 

function foo(var1, var2){ 
    var var3 = 'efg'; 
} 

Chcę dodać do pola autouzupełniania, funkcja o nazwie "foo" z dwoma parametrami - var1 i var2. Chcę dodać także listę zmiennych var0 do zmiennych oraz dodać var3 właśnie wtedy, gdy użytkownik pisze w zakresie, w którym został zdefiniowany (w funkcji).

co już wie:

  • wiem jak włączyć autouzupełnianie i na żywo autouzupełniania.
  • wiem jak add new completer
  • wiem, że wbudowane w Podstawowy autouzupełnianie dodając wszystkie słowa w dokumencie bez wyjątku
  • wiem o ace-tern plugin, i nie sądzę, chcę go używać. Na razie jest jeszcze hackowaty, pozbawiony dokumentów i nie wiem, jak go włączyć.
  • Wiem, że Ace ma już niektóre dane, które znam po. Na przykład ostrzega, gdy zmienna jest ponownie zdefiniowana, gdy jest już zdefiniowana w tym samym zakresie. Miała więc listę zmiennych i ich zakres. Zgaduję, że używa on jshint - ale czy istnieje sposób, aby go pobrać?
  • Czytam ace documation i znajduję wiele przydatnych metod, których mogę użyć do wyodrębnienia danych, jeśli muszę. Pytanie brzmi, czy naprawdę muszę to zrobić sam.
+0

Czytałaś że: https://github.com/ajaxorg/ace/wiki/Creating-or- Rozszerzanie-trybu-edycji # rozszerzanie TheHighlighter Zalecam również, aby zobaczyć problemy, a następnie pobrać żądanie (otwórz/zamknij) – Aminadav

+0

https://github.com/ajaxorg/ace/pulls , na przykład: https: // github.com/ajaxorg/ace/pull/2213 – Aminadav

+0

Tak, czytam strony wiki i szukam w zagadnieniach github/PR. Dzięki. – anysite

Odpowiedz

3

UPDATE: I sugerował, że w mojej odpowiedzi, ale do wyjaśnienia - Tern zrobi dokładnie to, o co prosicie w co chcę. Poniższy fragment rozwiązuje jeszcze jeden problem związany z zapewnieniem kontekstu, którego użytkownik nie chce nawet widzieć w edytorze. Zobacz screeny z kodu stosowanego w Ace.Tern live demo

autocomplete for function with two parameters inside function scope you have var0, var1, var2 and local var3

To jest opionated, ale imo najlepsza opcja dodawania autouzupełnianie w ACE Tern.

Tern akceptuje typedef opcję konfiguracji (opisany tutaj: http://ternjs.net/doc/manual.html#typedef), ale to, co jest bardziej interesujące, że przyjmie niestandardowego obiektu js jako dziecko, a mianowicie:

var myContext = { 
    name: 'myContext', 
    obj: obj 
} 

Gdzie obj to Twój obiekt js.Następnie w Tern konfiguracji będzie go używać jako:

DEFS: [ „” podkreślenia, myContext]

która wykorzysta zarówno swój własny obiekt i podkreślają modułu do autouzupełniania.

Tern związane ace.js config: (Patrz https://github.com/sevin7676/Ace.Tern/blob/master/demo.html z komentarzami do opcji config)

var myContext = { ... } 

    var editor = ace.edit("editor"); 
    editor.getSession().setUseWorker(true); 

    ace.config.loadModule('ace/ext/tern', function() { 
     editor.setOptions({ 
      enableTern: { 
       defs: ['browser', 'ecma5', myContext], 
       plugins: { 
        doc_comment: { 
         fullDocs: true 
        } 
       },      
       useWorker: true,      
       startedCb: function() { 
        console.log('editor.ternServer:', editor.ternServer); 
       }, 
      }, 
      enableSnippets: true, 
      enableBasicAutocompletion: true, 
     }); 
    }); 
+0

Dziękuję bardzo. Wygląda obiecująco. – anysite