Привет. Во-первых, спасибо за эту потрясающую библиотеку!
Есть ли какой-нибудь пример поддержки пользовательского автозавершения кода? Я имею в виду ... Я хотел реализовать поддержку небольшого синтаксиса, над которым я работал. Это не совсем такой язык программирования, как JavaScript.
Любая идея?
Большое тебе спасибо.
@andrerpena , я думаю, это должно быть довольно легко реализовать (не принимая во внимание сложность вашего
Чтобы включить завершение, нам нужно использовать расширение ace:
/* set up custom completer by using a ace extension */
import ace from 'brace'
/* figured out how to load the extension properly
* by referring to ptmt's response in https://github.com/thlorenz/brace/issues/19
*/
import 'brace/ext/language_tools'
let langTools = ace.acequire('ace/ext/language_tools');
Настройте комплектующее следующим образом:
/* your custom completer */
var customCompleter = {
getCompletions: function(editor, session, pos, prefix, callback) {
// your code
/* for example
* let TODO = ...;
* callback(null, [{name: TODO, value: TODO, score: 1, meta: TODO}]);
*/
}
}
langTools.addCompleter(customCompleter);
В настоящее время существует проблема (№ 59), касающаяся того, как следует обрабатывать дополнительные параметры редактора. Без этого, я думаю, нам нужно было бы его взломать:
/* in some render somewhere
* need this refs hack to set an editor option (another open issue in this repo)
* inspired by elijahsmith's response in https://github.com/securingsincity/react-ace/issues/65
*/
<AceEditor ref="code" ...>
// with that setup, you can do something like
this.refs.code.editor.setOption('enableBasicAutocompletion', true);
Прошу прощения, если что-то из этого является странным или неправильным. Я только начинаю с react и только начал использовать обертку react-ace для ace. Хотя почти все это основано на чужих трудах.
Некоторые другие краткие ссылки / примеры:
@eemp Приносим извинения за поздний ответ и большое спасибо за пример. Это действительно кажется довольно простым делом. Я попытаюсь. Спасибо еще раз.
Нет необходимости во взломах, вы также можете передать все завершатели через enableBasicAutocompletion в виде массива, например:
<AceEditor
...
setOptions={{
enableBasicAutocompletion: [this.yourCustomCompleter]
}}
/>
Я добавил свой собственный омплер, но мне нужно нажать ctr + пробел, чтобы показать соревнование. Есть ли способ показать завершение автоматически.
@ go299 Вам просто нужно включить опцию enableLiveAutocompletion
в ace.
@fijolekProjects Как написать кастомный комплектующий? Есть какие-нибудь документы по этому поводу?
@oakland Не знаю о документах, но вот рабочий пример https://github.com/TouK/nussknacker/blob/v0.0.9/ui/client/components/graph/ExpressionSuggest.js#L31
В основном это объект с реализованным методом getCompletions
. Надеюсь, это поможет
@fijolekProjects Большое спасибо! Я попробую это сделать в своем проекте.
как мы запускаем автозаполнение без ctrl + space. Что, если мы хотим, чтобы он запускался автоматически
Самый полезный комментарий
Нет необходимости во взломах, вы также можете передать все завершатели через enableBasicAutocompletion в виде массива, например: