2015-02-10 2 views
0

Мы используем редактор ACE для написания кода javascript, который интерпретируется на стороне сервера. Таким образом, сервер имеет интерфейс JavaScript и может выполнять отправленный код для выполнения какой-либо задачи извне.Как добавить некоторые известные объекты в синтаксический анализатор ace-редакторов?

Сервер реализует некоторые новые объекты, которые не известны ACE. Поэтому ACE показывает предупреждение, если один из этих неизвестных объектов используется в коде.

Каков правильный способ сказать ACE, что есть некоторые новые объекты, переменные и функции? Я уже посмотрел на worker-javascript.js, но я НЕ хочу переопределять весь этот материал (обновление ACE будет сложнее). Есть ли интерфейс, который я могу использовать?

ответ

3

Ace использует jshint, у которых есть возможность установить список глобальных переменных. Ace поддерживает changeOptions слово работника, чтобы изменить параметры по умолчанию она переходит в jshint, но не способ передать список gloabals

Вы можете добавить его, изменив линию на https://github.com/ajaxorg/ace/blob/v1.1.8/lib/ace/mode/javascript_worker.js#L130 в lint(value, this.options, this.options.globals);

и от код вызова

editor.session.$worker.call("changeOptions", [{ 
    globals: {foo: false, bar: false...}, 
    undef: true, // enable warnings on undefined variables 
    // other jshint options go here check jshint site for more info 
}]); 

Изменение в worker.js # L130 достаточно проста и должна быть принята, если вы сделаете запрос тянуть туз

+0

это, кажется, работает. Не могли бы вы добавить краткое объяснение того, как это работает и что делает «undef: true»? Знаете ли вы параметры, которые я могу использовать в объекте globals? – SuperNova

+0

, см. Https://github.com/jshint/jshint/blob/master/src/options.js для полного списка опций jshint. –

+0

Возможно, вам потребуется установить тайм-аут (или другой метод) для задержки вызова выше пока редактор не будет настроен тузом или вы получите сообщение об ошибке из-за того, что рабочий еще не «уже существует». –