ИР Автодополнение / контекстная подсказка

tormozit 29 1 3

При наборе текста программного кода многие из нас привыкли к автодополнению (контекстной подсказке), т.е. подсказывающему списку вариантов продолжения слова. Иногда он открывается автоматически (например после ".") и иногда мы открываем его явно сочетанием CTRL+Space.

В ТурбкоКонфе есть ряд улучшений этого механизма, включающих открытие собственного списка (Т9) через ALT+ или Ctrl+Space, когда штатный список не открывается или уже открыт (клавиша CTRL должна быть отжата). Однако в нем до сих пор отсутствовал глубокий анализ контекста. Адаптер ИР добавляет собственный мощный анализатор кода и потому список подсказки ТурбоКонфа теперь будет содержать значительно более релевантные элементы в огромном числе ситуаций.

Список подсказки при открытии всегда фильтруется по фрагменту левее каретки и применяет умную сортировку с учетом окружения и статистики выбора слов. Нажатием Alt+ или Ctrl+Space фильтрация и умная сортировка отключаются.

Видео и к нему демо конфигурация

Виды анализа кода

  1. Вычисление типов, например:
    • возвращаемых значений методов модулей
    • параметров через локальные вызовы метода
    • параметров через подписки на события объектов и форм
    • нетипизированных свойств объекта и переменных модуля в области инициации модуля
    • из типизирующих комментариев к инструкциям (подробнее далее)
    • типизирующие инструкции (подробнее далее)
    • в ветке условия проверяющего тип через ТипЗнч()=Тип("...")
  2. Вычисление динамических свойств объектов, например:
    • колонок и параметров запроса, построителя запроса, построителя отчетов
    • колонок таблицы значений, дерева значений, выборки результата запроса
    • свойств структуры
    • свойств данных управляемой и обычной формы
  3. Вычисление возможных значений строковых литералов, например:
    • в параметре метода платформы опираясь на имя метода и формального параметра
    • в параметре метода модуля опираясь на роль формального параметра в теле метода
  4. Вычисление контекстов запросов (подробнее далее)
    • входящих параметров, включая таблицы
    • входящих/исходящих временных таблиц
  5. Понимает синтаксически некорректный текст
  6. Другие виды анализа, которые можно найти в задачах проекта ИР

Учет фактических параметров

Анализатор кода может учитывать фактические значения некоторых параметров функции при вычислении результата каждого ее вызова. Это более затратный режим анализа, т.к. каждый вызов такого метода рассчитывается заново. Поэтому он применяется при выполнении следующих условий:

  • в комментарии к методу не описан результат жесткой структуры
  • параметр влияет на результат и удовлетворяет одному из условий:
    • передается в вызов функции Вычислить()
    • расчетный тип является составным
    • расчетный тип равен "Произвольный"
    • расчетный тип имеет пустой набор динамических свойств (например Структура, ТаблицаЗначений)

Пример

Функция Главный()
	я = ЗначенияВМассивЛкс(Новый Структура)[0].Количество();    
	я = ОбщийМодуль("ирОбщий").скопироватьк();
КонецФункции

Функция ОбщийМодуль(Имя) Экспорт
	Модуль = Вычислить(Имя);
	Возврат Модуль;
КонецФункции

// Параметры:
//  п1  - Произвольный - 
Функция ЗначенияВМассивЛкс(п1) Экспорт
	М = Новый Массив(); 
	М.Добавить(п1);
	Возврат М;
КонецФункции

Источники метаданных

  1. Конфигурация и расширения в приложении ИР. Обновляются при перезапуске приложения, который мягко делается в фоне по запросу пользователя.
  2. Собственный кэш модулей. Его предлагается целиком заполнить при первом подключении базы, но можно делать это и в любой момент командой ОбновитьКэшМодулей (например после массовых изменений модулей). Кэш модуля обновляется в его окне при вызове любой команды ИР, а также в TurboConf версии 6.0+ автоматически при редактировании, если его окно развернуто.
  3. Собственный кэш управляемых форм. Кэш управляемой формы обновляется (<1с) в окне ее модуля в следующих случаях:
    • автоматически при вызове любой команды ИР с обращением к отсутствующему в кэше конкретному элементу, реквизиту, команде
    • по прошествии 5 минут с последнего обновления кэша этой формы
  4. Внешние обработки и отчеты. При каждом вызове создается на клиенте объект из соответствующего файла. Но в случае ошибки его создания (ИР 7.52+):
    • создается копия файла без модуля объекта
    • помещается в кэш в памяти, не обновляемый автоматически
    • выводится уведомление с порядком действий

Сброс всех кэшей в памяти (памятного кэша) приложения ИР можно вызывать вручную командой "Обновить кэш объектов конфигурации" в списке подсказки

Где работает подсказка

Подсказка работает в следующих типах окружения встроенного языка:

  1. Инструкция встроенного языка
  2. Комментарий - например ввод имени типа, указателя на объект метаданных или метод модуля
  3. Текстовый (строковый) литерал - зависит от контекста, которым обычно является формальный параметр метода, либо аналогично комментарию

Если применять приложение ИР во всех базах, где редактируется код, то удобнее отключить автовызов штатной подсказки (автоподсказку) после нажатия ".".

В Турбоконф 6.1+ адаптер переключает эти настройки полуавтоматически через всплывающее уведомление.

В окне "Выражение" в TurboConf 6.0+ используется контекст последнего активного модуля.
А в нижних версиях TurboConf используется контекст последнего модуля, в котором вызывалась команда адаптера. Для этих версий есть специальная команда для открытия этого окна с передачей контекста Вычислить выражение с контекстом

В окнах "Условие останова" (8.3.23-) и "Параметры точки останова" (8.3.24+) поведение аналогичное

Типизирующие комментарии

В конфигураторе встроенный анализатор кода не предоставляет возможности явно назначить документирующий тип выражению.
Поэтому приходилось применять различные обходные пути типа таких.
Анализатор кода ИР допускает явное назначение типов с помощью комментариев:

  • переменным при их объявлении
  • параметрам методов
  • возвращаемым значениям функций
  • левым операндам в инструкциях присвоения
  • итераторам при обходе коллекций
  • свойствам структуры после Вставить()
  • колонкам таблицы/дерева значений после Добавить/Вставить()

Используется расширенный стандарт типизирующих комментариев EDT. Подробнее тут
Также поддерживаются произвольные инструкции для анализатора кода, не поддерживаемые со стороны EDT. Строка такой инструкции начинается с "//!" или "//:".

Примеры:

МояПеременная3 = 0; // ОбработкаОбъект.ЗагрузкаЦен
Для каждого МояПеременная4 из Массив Цикл // Структура
Структура.Вставить("ф"); // см. ирОбщий.ВсеОбработчикиСобытийФормаЛкс[0]
Таблица.Колонки.Добавить("ф"); // см. ирОбщий.ВсеОбработчикиСобытийФормаЛкс
//! МояПеременная1 = Обработки.ЗагрузкаЦен.Создать();
//! МояПеременная2 = 0; // ОбработкаОбъект.ЗагрузкаЦен

Язык запросов

Подсказка работает в редакторе модуля внутри строкового литерала с полным текстом запроса и учитывает просто вычисляемый контекст встроенного языка, включающий таблицы-параметры и сессию менеджера временных таблиц

Подсказка работает в любом окне редактора полного текста запроса. Например в редакторе запроса схемы компоновки данных

0

Еще в "TurboConf ИР"

ИР Кнопка "Прервать" в окне "Выражение"

ИР Свернуть другие строки

ИР Кнопка "Перейти" в окне "Событие"

ИР Кнопка "Изменить" в окне "Пользователь"

ИР Кнопка "Список" в окне "Выбор картинки"

ИР Кнопка "Сравнить" в окне "Различие между"

ИР Кнопка "Сравнить" в окне "Сравнение модулей"

ИР Кнопка "Установить тип" в окне "Редактирование параметров выбора"

ИР Кнопка "Только помеченные" в окне "Редактирование типа данных"

ИР Кнопка "Список" в окне "Отбор по подсистемам"

Модератору