gifts2017

8.3 - контекстная подсказка по параметрам процедуры или функции

Опубликовал Артем Пластинин (a_plastinin) в раздел Программирование - Практика программирования

Одним из самых "комфортных" для программиста нововведений свежеиспеченной платформы стала реализация возможности контекстной подсказки по параметрам процедуры или функции. Мы все этого очень долго ждали, и хочется от души поблагодарить разработчиков за эту приятную неожиданность ;-)

Давайте скорей разбираться в том, как это работает.

В момент редактирования процедуры или функции в редакторе текстов модулей отображается всплывающая подсказка, как на рисунке:

Итак, контексная подсказка сообщает нам:

1. Мы работаем с Функцией;

2. Сейчас необходимо ввести параметр ТекстВопроса - это обязательный параметр;

3. ТекстВопроса может принимать значения с типом ФорматированнаяСтрока, Строка;

4. Отображает все остальные параметры, которые необходимо передать функции.

Некоторые особенности: 

- Если параметр обязателен к заполнению, в контекстной подсказке к его наименованию добавляется постфикс (Обязательный), в противном случае подсказка отображает только наименование текущего параметра;

- Очень хочется, но пока возможности отображения типа возвращаемого элемента функции нет;

- Если процедура/функция/конструктор имеет несколько вариантов определения, отображается переключатель:

- В контекстной подсказке отображатся ссылки на описание типа текущего параметра в синтаксис-помощнике;

- Если используется подсказка по конструктору, то отображается почему-то "Функция";

- Если используется подсказка по процедуре, то само слово "Процедура" почему-то не выделяется красным цветом, как "Функция";

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

- Принудительно вызвать контексную подсказку можно нажатием клавиш (Ctrl + Shift + Space) - упоминания об этом во встроенной справке не нашел :(;

- Контекстная подсказка работает для как для встроенных процедур/функций/методов объектов/конструкторов, так и для пользовательских, но при этом, для того, чтобы получить информацию о типах параметров и их описание, требуется соответствие формату комментирования, описанных в документе Система стандартов и методик разработки конфигураций - о формате оформления во встроенной справке также ничего не нашел :( Методом "тыка":

1. Если вообще ничего не описывать, то получим следующую картину:

Как видим, не очень-то информативно, но хоть что-то.

2. Если опишем комментарий перед функцией:

То есть, формат оформления должен быть следующим:

// %

// Параметры:

// {НаименованиеПараметра} - % (тип параметра) - % (описание параметра)

// {НаименованиеПараметра} - % (описание параметра)

где:

    % - любой набор символов

     "жирным" выделены обязательные "литералы"

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Новиков (Новиков) 31.05.13 00:42
Если мне память не изменяет, то вроде VS 2003 умела еще это делать в каком году? в 2003 вроде? не? :) И вроде, насколько я помню, в комментах перед методами ничего не нужно было ставить, а параметры методов сами расчухивались.

Хотя сейчас да, прикольно стало. Особенно сворачивание кусков кода в секции.

Осталось дождаться когда можно будет отладчиком в обратную сторону ходить, и все - можно уходить на пенсию. Жизнь прожили не зря!
Дмитрий74Чел; Светлый ум; +2 Ответить 2
2. Сергей Ожерельев (Поручик) 31.05.13 00:57
(1) (0) Неужели грядёт долгожданный штатный Телепат, от того самого, которого все знают.

Если мне память не изменяет, что-то подобное уже было в Delphi, VisualFoxpro и ещё где-то в начале 2000-х.
3. Александр Орефков (orefkov) 31.05.13 01:22
Это было еще в Visual C++ 4.2, 1996 или 97 года.
А так да, дождались!
Хотелось бы еще уточнить, как подсказка ведет себя, если не может вычислить тип выражения?
4. Артем Пластинин (a_plastinin) 31.05.13 01:33
Delphi и VS (C++, C#) строготипизированные ЯП. Потому они всегда умели подсказывать какую переменную и какого типа нужно в функцию вставить. Более того, дебаггер бы не дал скомпилировать код с несоответствием типов.

А вот описание параметров, полей классов, методов действительно появилось в какой-то там студии и описывалось специальной разметкой, похожей на XML за символами /// (тройной слэш)

Ждем полноценный IntelliSence от 1С
5. Василий Казьмин (awk) 31.05.13 01:36
(3) orefkov, Да как обычно. ЗабЪет на все. А браузер рефакторинга (выделение метода) еще для smalltalk в 90-х был. 1С на запад собралось. Глядишь в 9.0 не будет русского языка.
6. Василий Казьмин (awk) 31.05.13 01:38
(4) a_plastinin, Да ты что? Возьми современный IDE и посмотри как JavaScript и посмотри, как они типы переменных подсказывают.
7. Антон Стеклов (asved.ru) 31.05.13 06:11
Хехе, теперь имеет смысл заполнять каменты к функциям :)
8. Александр Лыткин (TrinitronOTV) 31.05.13 07:22
спасибо автору за предоставленный материал в статье, очень полезно и информативно
9. Евгений Сосна (pumbaE) 31.05.13 08:39
Имхо, в некоторой степени надо благодарить Орефкова Александра, за снегопат и за тот волшебный пинок компании из 2 букв.
Дмитрий74Чел; +1 Ответить
10. Тимофей Шантин (ShantinTD) 31.05.13 08:45
Было информационное письмо о выходе платформы 8.3, в самом низу которого есть раздел "новые инструменты для разработчика". Там про контекстную подсказку и про авторские комментарии написано. Коротко и без картинок, естественно. И про авторские комментарии там написано лишь что
Стандарты разработки подразумевают, что каждая процедура/функция, написанная разработчиком, должна предваряться комментариями, составленными по определенным правилам.
Сами стандарты и правила оставлены "на самостоятельное изучение".

Автору СПАСИБО за потраченное время, за наглядную заметку.
11. Евгений Шабалин (xzorkiix) 31.05.13 08:51
[здесь должна была быть фотография магнита с холодильника]Инфостарт разрешил[/здесь должна была быть фотография магнита с холодильника]

Благая весть.
12. Евгений Шабалин (xzorkiix) 31.05.13 08:53
(1) Новиков,

Осталось дождаться когда можно будет отладчиком в обратную сторону ходить


Это простите как?
13. Артем Пластинин (a_plastinin) 31.05.13 09:34
14. Василий Казьмин (awk) 31.05.13 09:50
(13) a_plastinin, Да бред сумасшедшего. Понять может лишь другой сумасшедший и психиатр. Не обращай внимания. ;)
15. Алексей Новиков (Новиков) 31.05.13 09:54
(4) a_plastinin, спасибо за разъяснения.

(12) xzorkiix,
Это простите как?

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

Напр., из последнего: сидите вы где-то в типовой конфе с внедренной БСП. И где-то там в потрохах, внезапно вам потребовалось разобраться с вопросом - а почему вот эта штука вот тут работает так? Вы начинаете "слаломить" по какому-то ключевому слову. Нашли все вхождения - затем начинаете открывать их, читать, фтыкать. Затем начинаете промечать точками останова все эти места. И наконец, когда все это вы проделали, далее, вы начинаете трейсить. Естественно, что даже где-то там в потрохах вы остановитесь, но возникает вопрос - а как вы туда попали? Сейчас это можно посмотреть по стеку вызову. Однако, следует понять, что стек вызова - только помогалка. Он вам скажет - я залетел сюда из вот этой процедуры/функции. Вы заходите туда, ставите опять точку останову, опять читаете-фтыкаете, и так - каждый раз. Рекурсивно, без выхода из цикла, пока, наконец, у вас в голове не построится четка цепочка алгоритма для трейсинга. В VS на эту тему давно придумали отладку назад - т.е. вы первый раз попали на точку останова, и уже дальше в обратную сторону по шагам, начинаете проматывать алгоритм. Уходит тысяча лишних и не нужных движений, которые я описал выше...Но на все это можно забить, если вы серьезно, что-то не трейсили типовое :))
16. Евгений Шабалин (xzorkiix) 31.05.13 10:27
(15) Новиков,

VS 2010: отладка с IntelliTrace

А ведь действительно такое есть. Каждый день что-то да новое.
17. Сергей Старых (tormozit) 31.05.13 10:28
По поводу бэк-трассировки (шагания назад) есть куча вещей которые невозможно корректно восстановить, например удаленный или измененный файл. Таким образом трассировка с гарантированной полной фиксацией разницы между каждой парой соседних шагов в принципе невозможна. VS предполагаю фиксирует только состояния переменных, но например не содержимое кусков памяти, на которые они указывают. Соглашусь, что в ряде случаев и такая информация будет полезна, но все же от разработчика требуется четкое понимание, что при бэк-трассировке будет куча дезинформации.
18. Алексей Роза (DoctorRoza) 31.05.13 10:38
Предлагаю не благодарить разработчиков за разработку оного! Ибо это должно и так быть! Вопрос в другом: почему этого механизма не было раньше? ИМХО, подушки безопасности должны быть в автомобиле по факту, если нет, то значит хрень!
19. Алексей Новиков (Новиков) 31.05.13 10:55
(17) tormozit,
есть куча вещей которые невозможно корректно восстановить, например удаленный или измененный файл

Не понятно, зачем только трейсить это, а не сам процесс формирования значений для записи

VS предполагаю фиксирует только состояния переменных

Вы сами определяете те параметры, и те события, которые фиксируются в журнале отладки. Там гибкий механизм, и вы можете под себя его подстроить. Таким образом можно трейсить всякие крэш-ошибки, трудно-воспроизводимые и т.д. Т.е. просто запись включил, определил те события, которые будут писаться, и запустил юнит-тест или ручками. Как крэш настал, можно просто подняться из этого лога, и отматывать назад, мониторя те параметры, которые вы определили для записи.

Естественно, это не серебряная пуля :)
20. Максим (maxkisa) 31.05.13 11:03
(15) Новиков,

В большинстве случаев или как минимум для сокращения геморроя достаточно будет воспользоваться "стеком вызовов".
21. Сергей Старых (tormozit) 31.05.13 11:05
(19) Почитал более подробно описание. В общем все ожидаемо, как я и описал. Куча не очевидных ограничений. Если не понимаешь, как это все устроено, то рискуешь запутаться еще сильнее, чем при итерационном смещении назад точки остановки.

Повторяю. Согласен, что польза от этого будет. Но ты явно преувеличиваешь ее полезность. Эта фича из разряда "грязных", т.е. при ее использовании появляются некоторые негативные эффекты.

Думаю неплохо бы привести пример, как это работало бы в 1С.
22. Алексей Новиков (Новиков) 31.05.13 11:43
(21) tormozit,

Но ты явно преувеличиваешь ее полезность. Эта фича из разряда "грязных", т.е. при ее использовании появляются некоторые негативные эффекты.

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

Думаю неплохо бы привести пример, как это работало бы в 1С.

Я уже описал все в (15). Если при отладке используется "слалом", тогда тебе нужно прометить как-то абсолютно все места - сначала по глобальному поиску, затем в каждом случае, по стеку вызовов, подниматься выше и опять промечать. Если такого промеченного кода становится много, то теряется весь эффект слалома. Нужно начинать стартовать от самой розетки, если оную ты еще сможешь найти. В случае, если бы был обратный откат, то достаточно в первом глобальном поиске прометить все места, забрейкпоинтиться в нужных по смыслу, ткнутся туда, и включить запись всех параметров. За второй проход ты поднимешь весь контекст выполнения по логу, и уже без тысячи-кратных перезапусков сможешь посмотреть разворачивание событий. Опять же в свете автоматизации тестирования в 8.3, можно было подумать как-то на тему увязки теста со сбором лога.

Вот так как-то, на основе опыта подобной работы в VS, я себе представляю как бы это могло быть в конфигураторе. И да, коллеги - это доп.функционал все же. Если вы хотите, вы его юзаете. Нет - считает грязным и не уместным и не юзаете :) Я бы его юзал, если бы он примерно таким, как я его описал. И наверное, были бы люди, которые это тоже юзали. Ведь в VS юзается и активно.
23. Михаил Болсун (m.bolsun) 31.05.13 12:05
Удивительно конечно, что такие возможности появляются в IDE в 2013 году. Но в любом случае, лучше позже чем никогда. Сделали бы еще API для конфигуратора, тогда вообще счастье настанет.
24. Павел Колмаков (Stim213) 31.05.13 12:37
(15) Новиков, молодой человек, отдел фантастики на втором этаже
25. Евгений Шабалин (xzorkiix) 31.05.13 12:52
Когда Конфигуратор станет самостоятельной коробкой. Тогда можно требовать (ждать) что-либо. А пока радоваться мелочам - чем не занятие? "Улыбаемся и машем. Улыбаемся и машем."
26. Евгений Сосна (pumbaE) 31.05.13 13:00
(23) m.bolsun, А кто-то API будет использовать... Кто будет следить, что бы конфигуратор работал стабильно и всякие API пользователи не насели удар по престижу фирмы 1С?
27. Михаил Болсун (m.bolsun) 31.05.13 13:16
(26) pumbaE, Microsoft вот не боится удара по престижу и их Visual Studio полностью открыта для доработки.
28. Александр Орефков (orefkov) 31.05.13 13:24
(27)
Ну не знаю, насколько сейчас студии открыты для доработки, давно их API не смотрел.
Но вот в 6ой студии через родное апи сделать можно было ровно нихрена, и VisualAssist работал точно также, как опенконф - внедряясь и хача все что только можно, благо она, как и 7.7, была на MFC написана.
И почему-то мне кажется, что и Assist, и Resharper до сих пор не все делают только через API.
29. Александр Орефков (orefkov) 31.05.13 13:28
(25)
Конфигуратор вряд ли станет отдельной коробкой.
Хотя, если грамотно отделить средства разработки от средств администрирования, тогда вполне может быть.
И будем закупать - N лицензий для рабочих мест, M лицензий для администрирования, К лицензий разработчика.
Либо все остается как было, но появится Конфигуратор+ какой-нибудь.
30. Михаил Болсун (m.bolsun) 31.05.13 13:31
(28) orefkov, ну думаю точно не через SendKeys и Dll Injection ;)
31. Михаил Болсун (m.bolsun) 31.05.13 13:37
(29) orefkov, судя по тому сколько лет понадобилось на подсветку параметров, скорее всего не раньше 1С 10.
32. Евгений Сосна (pumbaE) 31.05.13 14:18
(31) m.bolsun, Александру стоит добавить работу с подсказками после точки (это не просто) и получиться опять "жареный петух клюнул в " .
33. Михаил Болсун (m.bolsun) 31.05.13 14:26
(32) pumbaE, издержки динамической типизации. Да, можно сделать определенную поддержку, для локальных переменных, но узнать тип переданного параметра или возвращенного функцией значения, в 100% случаях уже не получится.
34. Александр Орефков (orefkov) 31.05.13 14:37
(33)
Со 100% нет. Но вот процентов 80 - достижимо, путем более глубокого анализа (для параметров - вызывателей, для возвращаемого значения - оператора Возврат). Для функций-обработчиков событий типы параметров сразу известны.
Остальные 20 - закрываются явным указанием типа в комментариях, как делали в 7.7:
Код
таб = ВызовМетода(); //:ТаблицаЗначений
Показать полностью

У tormozit'а вроде уже неплохо работает контекстная подсказка, скоро дам ему возможность портировать ее в снегопат :)
35. Михаил Болсун (m.bolsun) 31.05.13 14:59
(34) orefkov, про 80% согласен, можно сделать и будет работать, но что правда кто-то будет писать тип переменной в комментариях, чтобы потом получить подсказку через точку? Такой костыль - ИМХО уже перебор. Плюс как быть с таким выражением КакойТоПараметр.КакаяТоФункция().КакаяТоПроцедура(); Или обращение к значениям коллекций с разными типами.
36. Александр Орефков (orefkov) 31.05.13 15:03
(35)
Почему не будут? Будут, вот даже здесь есть "хитрость" - http://infostart.ru/public/65470/
А для снегопата даже скрипт есть, который помогает делать то, что там в публикации написано.
37. Александр Орефков (orefkov) 31.05.13 15:06
(35)
[quote]
Плюс как быть с таким выражением КакойТоПараметр.КакаяТоФункция().КакаяТоПроцедура();[/quote]
Ну как обычно. Сначала анализировать КакойТоПараметр.
Если смогли, анализировать, что возвращает КакаяТоФункция(). И так далее.
Возможен еще один поход - если название "КакаяТоФункция" уникально и встречается только в одном типе.
Говорю, масса эвристик может применяться.
38. Михаил Болсун (m.bolsun) 31.05.13 15:10
(36) orefkov, ну я же привел пример, где не будет работать комментарий. Да я в общем то не против. Уж мне то, как и тебе, к костылям для 1С не привыкать.
39. Mark Genuine (markgenuine) 31.05.13 15:46
Неважно когда, главное разработчики не стоят на месте и двигаются вперед, только уж что-то мелкими шагами, наверное им штата не хватает, чтобы все успеть, это как обычно=)
40. Kostya Zhurov (It-developer) 31.05.13 16:47
Зашибись! Все никак не доберусь до 8.3. Еще 8.2 не до конца прочитал %))
41. Kostya Zhurov (It-developer) 31.05.13 16:49
То что в С++ Builder и Delphi было 10-12 лет назад сейчас появилось и в 1с...
42. Яков Коган (Yashazz) 31.05.13 18:15
Да, и 20 лет не прошло. Нахрен это теперь надо, когда все привыкли обходиться имеющимся, а для особо требовательных давно уж есть снегопат... Да ещё и объявление выписывать, когда тупейший VB 3.0 уже в 1998 году всё читал из объявления самой функции, а у VB тоже типизация вольная. Короче, прикрутили безделушку, радуемся и громко заявляем о продвинутом софте.
43. Алексей Новиков (Новиков) 31.05.13 19:18
(42) Yashazz,
Нахрен это теперь надо, когда все привыкли обходиться имеющимся


Что-то работающее, вместо нуля - все же всегда лучше. Это как лучше хренова сидеть, нежели круто стоять, т.к. в ногах правды нет :)

Я думаю, со временем, до делают до уровня продвинутых стандартных IDE.

А про снегопат интересно узнать у разработчика: почему 1С лавочку не прикроет его? :) Ведь, видимо прикрыть можно же. Хотя, не удивлюсь, если и в самой 1С юзают его.

P.s.: сам не пробовал оный не разу. Может не знаю - чего потерял ))))
44. Евгений Сосна (pumbaE) 31.05.13 19:32
(43) Новиков, не знаешь, не знаешь. Последняя демка снегопата, очень даже функциональная - попробуй сравни. (Особенно переназначь Ctrl+F3 на расширенный поиск, а Ctrl+Shift+F3 на глобальный фоновый поиск)

Судя по добавленному функционалу, 1С взяла старую демку снегопата почерпнула идеи и реализовала.
45. Ловыгин Антон (wunderland) 01.06.13 17:06
Всегда уважал первопроходцев
46. Ivan Khorkov (vano-ekt) 02.06.13 13:25
47. Тимофей Шантин (ShantinTD) 02.06.13 21:43
(46), ИМХО, Снегопат вне опасности. Для тех, кто знаком со снегопатом, конечно.
asylum90; +1 Ответить
48. Василий Казьмин (awk) 02.06.13 23:51
(46) vano-ekt, Да щас... Если 1С так раскачиваться и дальше будет, то снегопату жить, да жить.
49. Виталий Черненко (SeiOkami) 03.06.13 10:19
Вот такой косячек в этой подсказке имеется:
http://www.forum.mista.ru/topic.php?id=667344
50. Алекс Ю (AlexO) 03.06.13 10:27
(24) Stim213,
отдел фантастики на втором этаже

Вообще-то, описаны элементарные функции ЯП, реализованные в других ЯП еще в конце 90-х - как винда на ноги встала.
Называется это - "отладочный запуск части кода".
51. Александр Кузин (sashocq) 03.06.13 10:54
Вот я удивляюсь: кто-то старается, делает что-то новое, полезное, или пишет что-то, что никто до него не писал. А кто-то просто переписывает документацию - и сразу получает кучу плюсов.
Тоже, что-ли, что-нибудь из справки запостить...
leonidol; ilov_boris; +2 Ответить 1
52. Евгений Шабалин (xzorkiix) 03.06.13 11:13
(51) sashocq, ещё можно гневные Комменты писать, тоже выхлоп даёт не плохой.
asylum90; ilov_boris; _also; +3 Ответить 1
53. Алексей Новиков (Новиков) 03.06.13 19:53
(52) xzorkiix, угу. Если б еще карма росла с поправочным коэффициентом > 1, тогда бы все взяли фамилию Белинского, и пустились во все тяжкие :)
54. Алексей Новиков (Новиков) 05.06.13 12:44
А между тем появился Анонс Visual Studio 2013

Заметьте что среда развивается с учетом средств групповой разработки и автоматического тестирования, а также сборки релизов. Уже получается целое окружение :)
55. Юрий Гуреев (Gureev) 17.07.13 12:38
Картинки не отображаются.

Работа сайта http://aplastinin.ru приостановлена.

А разве на инфостарт картинки выложить нельзя? Зачем тянуть с левых сайтов.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа