salexdv / bsl_console

Консоль кода для 1С 8.3 (Управляемые и обычные формы)
MIT License
297 stars 55 forks source link

Как добавить штатные сниппеты редактора в список автодополнения? #200

Closed tormozit closed 3 years ago

tormozit commented 3 years ago

Редактор поставляется с набором сниппетов (snippets.js) . Как при выводе собственного списка автодополнения добавить их в список? Как в событии EVENT_ON_SELECT_SUGGEST_ROW выполнить выбранный пользователем сниппет?

salexdv commented 3 years ago

Как при выводе собственного списка автодополнения добавить их в список?

Сниппеты можно обновить через updateSnippets. На вход нужно JSON с объектом snippets, например:

updateSnippets('{"snippets": {...}}', true)

где второй параметр отвечает за полную замену штатных.

Как в событии EVENT_ON_SELECT_SUGGEST_ROW выполнить выбранный пользователем сниппет?

Выполнить никак. Он сам выполнится при выборе. Про синтаксис можно почитать тут

tormozit commented 3 years ago

В моем списке автодополнения штатные сниппеты не отображаются. Вызываю метод showCustomSuggestions() и вижу только свои слова

изображение

Я пока не уверен, нужны ли они мне там. Поэтому хотелось получить способ отображать/скрывать их при отображении этого списка.

salexdv commented 3 years ago

В моем списке автодополнения штатные сниппеты не отображаются. Вызываю метод showCustomSuggestions() и вижу только свои слова

Для showCustomSuggestions это действительно так, показывается только то, что было передано в метод. Доработаю структуру передаваемых данных, чтобы можно было и сниппеты туда же загрузить.

salexdv commented 3 years ago

Сниппет можно передать в showCustomSuggestions так:

showCustomSuggestions(`{
    "Для каждого": {
        "name": "ДляКаждого",
        "text": "Для каждого $\{1:Переменная\} Из $\{2:Коллекция\} Цикл\\n\\t$0\\nКонецЦикла;",
         "kind": "Snippet",
         "detail": "",
         "documentation": ""
    }
}`);

Или всё таки нужна возможность показывать/скрывать штатные сниппеты при вызове showCustomSuggestions?

tormozit commented 3 years ago

Да. Хотелось бы и встроенные подключать.

salexdv commented 3 years ago

Да. Хотелось бы и встроенные подключать.

Добавил опцию

setOption('showSnippetsOnCustomSuggestions', true);
tormozit commented 3 years ago

Сниппеты в список добавляются. Но нет возможности при выборе (например нажатием ENTER) их в списке - выполнить их. Ведь я использую свою обработку события EVENT_ON_SELECT_SUGGEST_ROW. Поэтому мне еще нужен метод, чтобы выполнить выбранный сниппет.

salexdv commented 3 years ago

Поэтому мне еще нужен метод, чтобы выполнить выбранный сниппет.

Добавил. Проверь, пожалуйста.

tormozit commented 3 years ago

Набрал текст "если" и выбрал из списка шаблон "Если". Сработал мой обработчик события и я в нем вызвал insertSnippet("Если"). При этом вставился текст "Если". В общем пока не заработала вставка. изображение

salexdv commented 3 years ago

Набрал текст "если" и выбрал из списка шаблон "Если". Сработал мой обработчик события и я в нем вызвал insertSnippet("Если"). При этом вставился текст "Если". В общем пока не заработала вставка.

А какого поведения ты ожидал? В функцию надо передавать полный текст сниппета.

salexdv commented 3 years ago
insertSnippet('Если ${1:Условие} Тогда\n\t$0\nКонецЕсли;');
tormozit commented 3 years ago

Как получить этот полный текст? Я ожидал, что по имени сниппета (тому которое в списке видимо), смогу обозначить сниппет для выполнения.

salexdv commented 3 years ago

А вот это интересный вопрос, ответа на который у меня пока нет. Постараюсь что-нибудь придумать и передать в событие EVENT_ON_SELECT_SUGGEST_ROW

salexdv commented 3 years ago

Как получить этот полный текст? Я ожидал, что по имени сниппета (тому которое в списке видимо), смогу обозначить сниппет для выполнения.

Добавил в параметры события EVENT_ON_SELECT_SUGGEST_ROW поле insert_text

tormozit commented 3 years ago

Заработало

tormozit commented 3 years ago

В режиме языка запросов почему то показываются сниппеты от встроенного языка

изображение

Пробовал так

    РедакторHTML.switchQueryMode();
    РедакторHTML.setOption("showSnippetsOnCustomSuggestions", Истина); 

и так

    РедакторHTML.setOption("showSnippetsOnCustomSuggestions", Истина); 
    РедакторHTML.switchQueryMode();
salexdv commented 3 years ago

Попробуй сейчас

tormozit commented 3 years ago

В режиме языка запросов чужие сниппеты пропали, но свои не появились (например для конструкции ВЫБОР).

salexdv commented 3 years ago

В режиме языка запросов чужие сниппеты пропали, но свои не появились (например для конструкции ВЫБОР).

Вообще нет сниппетов в списке? У меня вот так показывается:

suggest

tormozit commented 3 years ago

Да. Вообще сниппетов нет в режиме языка запросов.

salexdv commented 3 years ago

Можешь подсказать, как это воспроизвести или может ссылку на исходники сбросишь?

tormozit commented 3 years ago

Из-за предыдущей ошибки я отключил подключение сниппетов в режиме языка запросов и забыл включить обратно.