Вывод текста функции в подсказке

1 11 января 2019 10:34
Сергей

TurboConf SDK Скрипты OneScript

Скачать

Иногда, при чтении кода, бывает нужно заглянуть в функцию или процедуру, чтобы понять, что там выполняется, но при этом приходится перепрыгивать в другое место модуля и терять фокус с текущей строки. Данный скрипт показывает текст функции под курсором в виде всплывающей подсказки. Лучше всего подходит для чтения небольших функций или процедур. Нажимаем Control+Shift+H
//@script_name ShowFunctionText
//@script_display_name Просмотр текста функции
//@script_description Показывает текст функции в виде всплывающей подсказки, чтобы не прыгать по тексту модуля и не терять фокус при чтении кода
//@script_author alonehobo
//@script_developer_url https://turboconf.ru
//@script_hotkey Control+Shift+H
//@retain_clipboard 1
//@enterprise_mode 1
//@hide_actions 1
//@turbomenu 0
//@turbobutton 0

Перем ТурбоКонф;
Перем ИмяФункции;
Перем ИсхКолонка;
Перем ИсхСтрока;

ТурбоКонф = Новый ТурбоКонф;
Поз = 0;
Текст = ТурбоКонф.ПолучитьТекстСПозицией(ИмяФункции, Поз, ИсхКолонка, ИсхСтрока); 

ТурбоКонф.КонтролКлавиша(Keys.Left);
ТурбоКонф.КонтролШифтКлавиша(Keys.Right);

Текст = ТурбоКонф.ПолучитьТекстМодуля(ИмяФункции, Поз); 

РегВыражение = Новый РегулярноеВыражение("(?:(?:(?:Процедура|Функция)\s" + Имяфункции + "\(.*\).*\n)((.*\n)*?)(?:КонецПроцедуры|КонецФункции))");

РегВыражение.ИгнорироватьРегистр = Истина;
РегВыражение.Многострочный = Истина;

СписокСовпадений = РегВыражение.НайтиСовпадения(Текст);
Если СписокСовпадений.Количество() = 0 Тогда
	ТурбоКонф.ПоказатьПодсказку("Не удалось получить текст функции");
Иначе
	Для Каждого ТекСовпадение Из СписокСовпадений Цикл
		Если ТекСовпадение.Группы.Количество() > 0 Тогда
			ТурбоКонф.ПоказатьПодсказку(СокрЛП(ТекСовпадение.Группы[0].Значение));
		КонецЕсли;
		Прервать;
	КонецЦикла;
КонецЕсли;

ТурбоКонф.ПерейтиВПозицию(ИсхКолонка, ИсхСтрока)

Товары

Вывод текста функции в подсказке

Скачать 9

См. также

coloratos

os-confluence

Объявление переменной из выделенного текста

yaspeller

Дополнительное документирование модулей

Перейти к началу/концу метода

Навигация

Комментарии

bolsun
#1, 11 января 2019 12:58

Класс! 😃 попробую


bolsun
#2, 11 января 2019 13:09

Предлагаю улучшения ))

Получение текста функции можно попробовать сделать по другому.

ТурбоКонф.Клавиша(Keys.F12);
ТурбоКонф.ControlShiftKey(Keys.OemCloseBrackets);
ТурбоКонф.Копировать();
ТурбоКонф.ControlKey(Keys.OemMinus);
ТурбоКонф.ControlKey(Keys.OemMinus);

ТурбоКонф.ПоказатьПодсказку(ТурбоКонф.ПолучитьБуферОбмена());

Будет работать и для методов, расположенных в других модулях


Сергей
#3, 11 января 2019 13:22

Издеваетесь? Я весь мозг сломал с написанием регулярного выражения, а Вы... Так не делается....)))


bolsun
#4, 11 января 2019 13:28

Тяжело в учении... (с) 😃


Сергей
#5, 11 января 2019 14:09

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


bolsun
#6, 11 января 2019 14:10

Нужно будет еще после F12 проверить, что не появилось окно "Объект перехода"

Попытка
Указатель = ТурбоКонф.ЖдатьОкно("Объект перехода", 200, Истина);
ТурбоКонф.Клавиша(Keys.Enter);
//Переход занимает какое-то время
ТурбоКонф.Ждать(200);
Исключение
//Окна не было, продолжаем
КонецПопытки;


bolsun
#7, 11 января 2019 14:10

Указатель = можно убрать


bolsun
#8, 11 января 2019 14:18

Нужно добавить задержку после копирования в буфер

Можно так попробовать, у меня вроде работает

//@script_name ShowFunctionText
//@script_display_name Просмотр текста функции
//@script_description Показывает текст функции в виде всплывающей подсказки, чтобы не прыгать по тексту модуля и не терять фокус при чтении кода
//@script_author alonehobo
//@script_developer_url https://turboconf.ru
//@script_hotkey Control+Shift+H
//@retain_clipboard 1
//@enterprise_mode 1
//@hide_actions 1
//@turbomenu 0
//@turbobutton 0

ТурбоКонф = Новый ТурбоКонф;

ТурбоКонф.Клавиша(Keys.F12);

Попытка
Указатель = ТурбоКонф.ЖдатьОкно("Объект перехода", 200, Истина);
ТурбоКонф.Клавиша(Keys.Enter);
ТурбоКонф.Ждать(200);
Исключение
//Окна не было, продолжаем
КонецПопытки;

ТурбоКонф.ControlShiftKey(Keys.OemCloseBrackets);
ТурбоКонф.ControlKey(Keys.C);
ТурбоКонф.Ждать(200);

ТекстМетода = ТурбоКонф.ПолучитьБуферОбмена();

Сообщить("ТекстМетода: "+ТекстМетода);

ТурбоКонф.ControlKey(Keys.OemMinus);
ТурбоКонф.ControlKey(Keys.OemMinus);

//Подождем пока вернемся обратно
ТурбоКонф.Ждать(200);

ТурбоКонф.ПоказатьПодсказку(ТекстМетода);


bolsun
#9, 16 февраля 2021 15:44

bolsun переместил тему в раздел Скрипты пользователей


Модератору