Как контролировать, что автозаполнение Ace Editor записывает в файл

Я использую редактор react-ace, чтобы пользователи могли вводить код Scala на веб-сайте. Я также определил для него автозаполнение. Прямо сейчас, когда пользователи принимают предложение автозаполнения для функции, автозаполнение вставляет в файл всю сигнатуру функции, заменяя аргументы именами параметров функции, что бесполезно и раздражает пользователей.

Я бы хотел, чтобы автозаполнение вместо этого делало следующее: когда пользователь принимает предложение для функции, просто вставляет имя функции и открывающую скобку. Затем автозаполнение должно показать пользователю список параметров функции, как их имена, так и их типы (т.е. param1: type1, param2: type2, …), но не вставлять их, если пользователь нажимает ввод. В качестве расширенной цели я бы хотел выделить жирным шрифтом позиционный параметр, для которого пользователь в настоящее время вводит аргумент. Поведение, которое я хочу, вдохновлено IDE, такими как IntelliJ или Visual Studio, которые делают именно это.

Есть ли способ сделать что-нибудь подобное в редакторе React-ace?


person Forrest Cinelli    schedule 28.07.2017    source источник


Ответы (1)


Элементы автозаполнения Ace могут иметь свойства фрагмента значения и подписи. caption — это то, что будет отображаться во всплывающем окне. Значение будет вставлено, когда пользователь нажмет Enter. snippet — это альтернатива value, которая представляет собой фрагмент стиля textmate, позволяющий указать положение курсора после выделения текста.

В этом случае вы можете вернуть товар, например

{value: "funcName", caption: "funcName(x, y, z)"}

or

{snippet: "funcName($0)", caption: "funcName(x, y, z)"}

или даже snippet: "funcName(${1:paramName1}, ${2:paramName2})$0", чтобы пользователь мог перемещаться по параметрам.

Просто не забудьте вернуть \$ и \\ во фрагмент, если вы хотите, чтобы они отображались как буквальные $ и \.

Что касается второй части отображения типов параметров, а не их вставки, это делается не автозаполнением, а всплывающей подсказкой, которая еще не встроена в ace. Вот как это реализовано в ide cloud9: https://github.com/c9/core/blob/master/plugins/c9.ide.language.core/tooltip.js

person a user    schedule 28.07.2017
comment
Что касается вашего последнего пункта, могу ли я имитировать желаемое поведение, задав value пустую строку? - person Forrest Cinelli; 03.08.2017
comment
то, как открывается всплывающее окно, и его сочетания клавиш совершенно разные, поэтому, даже если вы можете это сделать, это не сработает. - person a user; 03.08.2017