Автодополнение кода¶
Контекстные подсказки по мере ввода: глобальные функции, методы и свойства объектов (с выводом типа), типы после оператора Новый, ключевые слова и локальные переменные.
Горячие клавиши: Ctrl+Space
Отбор и приоритет по контексту компиляции¶
При известных метаданных предложения отбираются и упорядочиваются с учётом текущего модуля, директивы метода и ветки препроцессора. Для проекта используются автоматически выбранные режимы конфигурации и общая настройка supportThickClientFileMode. По умолчанию заведомо недоступные варианты скрываются. Сначала идут доступные варианты, затем доступные лишь в части возможных контекстов.
Отбор управляется настройкой в .bsl-language-server.json:
{
"completion": {
"hideUnavailableByContext": true
}
}
При false недоступные варианты тоже показываются, в конце списка. Изменение применяется со следующего запроса completion.
Предложение скрывается, только если оно заведомо недоступно во всех текущих контекстах и для всех возможных целей.
Частичная доступность и неизвестные сведения не приводят к удалению предложения.
Порядок учитывает доступность платформенных членов и типов из СП, видимость общих модулей, условия объявлений прикладных методов и разрешённые серверные переходы. Поэтому серверный метод с разрешённым вызовом с клиента сохраняет обычный приоритет в клиентском коде.
Прикладные типы наследуют доступность базового типа из СП, например ДокументМенеджер.<Имя документа>.
У общих модулей учитываются флаги метаданных ещё до разбора файла. Глобальные свойства, включая Справочники,
ранжируются по собственной доступности и доступности типа значения.
После точки учитывается контекстный тип получателя. Если разные ветки #Если присваивают переменной разные структуры, повторная проверка того же условия выбирает соответствующий тип: поля исключённого типа не предлагаются. К членам оставшегося типа применяется тот же отбор по контексту; при выключенном отборе недоступные члены сохраняются с пониженным приоритетом.
Внутри групп сохраняются прежние приоритеты локальных имён, полей, глобальных функций и ключевых слов, а также порядок устаревших элементов. Недостаток сведений о доступности не понижает предложение. В OneScript, без метаданных или при неизвестном контексте сохраняется прежняя сортировка.
Ключевые слова¶
Ключевые слова предлагаются на языке исходного кода, как имена платформенных членов.
Состав списка и канонические написания задаёт словарь языка BSL/OneScript; справка используется
для описаний и шаблонов. Обозначения схем вроде Declarations, DefaultValue и DefVal не попадают
в список. В английском заголовке цикла предлагается To, а не встречающееся в справке By.
Учитывается окружающая конструкция:
ПродолжитьиПрерватьпредлагаются в теле цикла, включая вложенные блоки;Ждать— внутри асинхронного метода;Иначе,ИначеЕсли,Исключениеи закрывающие слова — для соответствующего открытого блока;Тогда,Цикл,Каждого,Из,По,ЗначиЭкспорт— в соответствующих частях заголовков.
Отбор работает и с незакрытыми блоками. Дописываемый префикс не считается уже вставленным словом:
например, при дописывании КонецЦикла цикл ещё открыт для подсказки. Слова в комментариях и строках
не создают ложных блоков. Внутри строк, комментариев и заголовков директив обычные ключевые слова не предлагаются.
Контексты методов и серверные вызовы¶
Справа от сигнатуры метода показывается только пометка серверного вызова перед возвращаемым типом, например →С · ТаблицаЗначений.
Имя, сигнатура и вставляемый код сохраняются. Язык подписи соответствует варианту встроенного языка проекта,
как имена платформенных методов и типов; язык сообщений диагностик задаётся отдельно языком сервера.
| Пометка | Значение | В английском проекте |
|---|---|---|
→С |
Из текущего места требуется переход на серверную сторону | →S |
→С? |
Переход зависит от режима или выбранной цели вызова | →S? |
Контексты компиляции и пояснение вызова добавляются обычным текстом под описанием метода,
в том числе после отложенной загрузки документации. Отдельного заголовка в поле detail нет.
Переход рассчитывается по текущей директиве и ветке препроцессора:
у серверного метода при вызове с сервера стрелки нет. Файловый локальный вызов общего модуля не считается
серверным переходом. Переход между частями формы не означает обязательного сетевого обмена.
Доступность платформенного метода из СП сама по себе не доказывает наличие серверного вызова.
При неизвестном контексте и в OneScript пометки не добавляются. Клиенты без поддержки подписи справа
получают краткую пометку в обычном поле деталей после сигнатуры и типа.
Автодополнение глобальных функций по префиксу¶
После ввода Сообщ внутри процедуры срабатывает автодополнение по префиксу. Во всплывающем списке предлагаются глобальные функции, начинающиеся на эту строку, в том числе Сообщить.
Автодополнение методов объекта через точку (вывод типа после «Новый»)¶
Тип переменной Список выведен из присваивания Новый Массив, и после ввода Список. всплывает список методов массива. Набор Доб фильтрует список до метода Добавить.
Автодополнение типов после оператора Новый¶
После ввода Новый Масс срабатывает автодополнение типов платформы. В списке предлагаются классы, начинающиеся на Масс (например Массив), а у выделенного класса показана сигнатура конструктора с числом вариантов синтаксиса.
Автодополнение локальных переменных¶
Внутри процедуры объявлены переменные КоличествоСтрок и СуммаПродаж, и после ввода Сумм срабатывает автодополнение. Во всплывающем списке предлагается локальная переменная СуммаПродаж.
Автодополнение процедур и функций модуля¶
После ввода Вычисл в теле процедуры срабатывает автодополнение методов текущего модуля. В списке предлагается функция ВычислитьИтог с её сигнатурой и описанием.
Автодополнение членов коллекции (ТаблицаЗначений)¶
Тип переменной Таблица выведен из Новый ТаблицаЗначений, и после ввода Таблица. всплывает список её членов. В подсказке предлагаются свойства и методы таблицы значений, такие как Колонки и Добавить.
Автодополнение методов общего модуля¶
После ввода ОбщегоНазначения.Знач срабатывает автодополнение членов общего модуля конфигурации. В списке предлагаются экспортные методы модуля (например ЗначениеРеквизитаОбъекта) с их сигнатурами и типами возвращаемого значения.
Автодополнение коллекций метаданных (Справочники.)¶
В обычном списке предлагаются сами коллекции (Справочники, Документы, РегистрыНакопления), без полного перечня путей к каждому объекту. Имена коллекций соответствуют языку исходного кода; имена объектов из метаданных сохраняются без перевода.
После ввода Справочники. срабатывает автодополнение коллекции объектов метаданных. В списке предлагаются справочники конфигурации вместе с методами менеджера.
Автодополнение членов менеджера перечисления¶
После ввода Перечисления.ВажностьПроблемыУчета. срабатывает автодополнение членов менеджера перечисления. В списке предлагаются значения самого перечисления вместе с методами менеджера.
OneScript: классы библиотеки после Новый (при #Использовать)¶
В OneScript-модуле с #Использовать demolib после ввода Новый Форматир срабатывает автодополнение классов подключённой библиотеки. В списке предлагаются классы библиотеки, начинающиеся на этот префикс.
OneScript: автодополнение методов модуля библиотеки¶
В OneScript-модуле с #Использовать demolib после ввода СтроковыеУтилиты. срабатывает автодополнение членов модуля библиотеки. В списке предлагаются экспортные методы модуля СтроковыеУтилиты.
OneScript: классы/модули библиотеки видны в автокомплите только при #Использовать (или в том же пакете)¶
Сначала автодополнение после Новый Форматир без #Использовать ничего из библиотеки не предлагает, затем в начало файла добавляется директива #Использовать demolib. После этого тот же ввод вызывает автодополнение классов и модулей библиотеки.
Поля структуры из описания параметра¶
Параметр Заказ описан в BSLDoc-комментарии как структура с полями Номер и Сумма, и после ввода Заказ. срабатывает автодополнение. В списке предлагаются поля структуры с типами и описанием, взятыми из комментария.
Поля структуры, добавленные через Вставить()¶
В структуру Запись поля добавлены вызовами Вставить("Имя", …) и Вставить("Возраст", …), и после ввода Запись. срабатывает автодополнение. В списке предлагаются поля Имя и Возраст, выведенные из этих вызовов.
Поля структуры: описание + расширение через Вставить()¶
Структура Заказ описана в BSLDoc-комментарии полями Номер и Сумма, а в теле процедуры дополнена вызовом Вставить("Скидка", 0). После ввода Заказ. автодополнение предлагает и поля из описания, и динамически добавленное поле Скидка.
Колонки строки ТаблицыЗначений¶
В цикле Для Каждого Строка Из Таблица после ввода Строка. срабатывает автодополнение колонок строки таблицы значений. В списке предлагаются колонки Артикул и Цена, добавленные ранее через Колонки.Добавить.
Автодополнение предопределённых элементов справочника¶
После ввода Справочники.ВидыКонтактнойИнформации. срабатывает автодополнение членов менеджера справочника. В списке предлагаются предопределённые элементы справочника наряду с методами менеджера.
Нечёткое автодополнение (подстрока, не только префикс)¶
В .os-файле после СтроковыеУтилиты. набирается Форм — подстрока из середины имени, а не префикс. Нечёткий поиск находит реальный метод модуля ВыполнитьФорматирование (совпавшие буквы подсвечены), хотя имя на Форм не начинается.