Давайте скорей разбираться в том, как это работает.
В момент редактирования процедуры или функции в редакторе текстов модулей отображается всплывающая подсказка, как на рисунке:
Итак, контексная подсказка сообщает нам:
1. Мы работаем с Функцией;
2. Сейчас необходимо ввести параметр ТекстВопроса — это обязательный параметр;
3. ТекстВопроса может принимать значения с типом ФорматированнаяСтрока, Строка;
4. Отображает все остальные параметры, которые необходимо передать функции.
Некоторые особенности:
— Если параметр обязателен к заполнению, в контекстной подсказке к его наименованию добавляется постфикс (Обязательный), в противном случае подсказка отображает только наименование текущего параметра;
— Очень хочется, но пока возможности отображения типа возвращаемого элемента функции нет;
— Если процедура/функция/конструктор имеет несколько вариантов определения, отображается переключатель:
— В контекстной подсказке отображатся ссылки на описание типа текущего параметра в синтаксис-помощнике;
— Если используется подсказка по конструктору, то отображается почему-то «Функция»;
— Если используется подсказка по процедуре, то само слово «Процедура» почему-то не выделяется красным цветом, как «Функция»;
— По умолчанию, контекстная подсказка отображается автоматически при наборе «(» и «, «. Есть возможность управлять этой опцией в параметрах конфигуратора:
— Принудительно вызвать контексную подсказку можно нажатием клавиш (Ctrl + Shift + Space) — упоминания об этом во встроенной справке не нашел :(;
— Контекстная подсказка работает для как для встроенных процедур/функций/методов объектов/конструкторов, так и для пользовательских, но при этом, для того, чтобы получить информацию о типах параметров и их описание, требуется соответствие формату комментирования, описанных в документе Система стандартов и методик разработки конфигураций — о формате оформления во встроенной справке также ничего не нашел 🙁 Методом «тыка»:
1. Если вообще ничего не описывать, то получим следующую картину:
Как видим, не очень-то информативно, но хоть что-то.
2. Если опишем комментарий перед функцией:
То есть, формат оформления должен быть следующим:
// %
// Параметры:
// {НаименованиеПараметра} — % (тип параметра) — % (описание параметра)
// {НаименованиеПараметра} — % (описание параметра)
где:
% — любой набор символов
«жирным» выделены обязательные «литералы»
Если мне память не изменяет, то вроде VS 2003 умела еще это делать в каком году? в 2003 вроде? не? 🙂 И вроде, насколько я помню, в комментах перед методами ничего не нужно было ставить, а параметры методов сами расчухивались.
Хотя сейчас да, прикольно стало. Особенно сворачивание кусков кода в секции.
Осталось дождаться когда можно будет отладчиком в обратную сторону ходить, и все — можно уходить на пенсию. Жизнь прожили не зря!
(1) (0) Неужели грядёт долгожданный штатный Телепат, от того самого, которого все знают.
Если мне память не изменяет, что-то подобное уже было в Delphi, VisualFoxpro и ещё где-то в начале 2000-х.
Это было еще в Visual C++ 4.2, 1996 или 97 года.
А так да, дождались!
Хотелось бы еще уточнить, как подсказка ведет себя, если не может вычислить тип выражения?
(3) orefkov, Да как обычно. ЗабЪет на все. А браузер рефакторинга (выделение метода) еще для smalltalk в 90-х был. 1С на запад собралось. Глядишь в 9.0 не будет русского языка.
(4) Да ты что? Возьми современный IDE и посмотри как JavaScript и посмотри, как они типы переменных подсказывают.
Хехе, теперь имеет смысл заполнять каменты к функциям 🙂
спасибо автору за предоставленный материал в статье, очень полезно и информативно
Имхо, в некоторой степени надо благодарить Орефкова Александра, за снегопат и за тот волшебный пинок компании из 2 букв.
Было информационное письмоо выходе платформы 8.3 , в самом низу которого есть раздел «новые инструменты для разработчика». Там про контекстную подсказку и про авторские комментарии написано. Коротко и без картинок, естественно. И про авторские комментарии там написано лишь что
Сами стандарты и правила оставлены «на самостоятельное изучение».
Автору СПАСИБО за потраченное время, за наглядную заметку.
[здесь должна была быть фотография магнита с холодильника]Инфостарт разрешил[/здесь должна была быть фотография магнита с холодильника]
Благая весть.
(1) Новиков,
Это простите как?
(6) awk, Вы о чем?
(13) Да бред сумасшедшего. Понять может лишь другой сумасшедший и психиатр. Не обращай внимания. 😉
(4) спасибо за разъяснения.
(12) xzorkiix,
Сейчас вы можете трейсить по ходу выполнения алгоритма. Однако, часто бывают случаи, когда вам очень бы хотелось посмотреть картинку, прокрученную назад.
Напр., из последнего: сидите вы где-то в типовой конфе с внедренной БСП. И где-то там в потрохах, внезапно вам потребовалось разобраться с вопросом — а почему вот эта штука вот тут работает так? Вы начинаете «слаломить» по какому-то ключевому слову. Нашли все вхождения — затем начинаете открывать их, читать, фтыкать. Затем начинаете промечать точками останова все эти места. И наконец, когда все это вы проделали, далее, вы начинаете трейсить. Естественно, что даже где-то там в потрохах вы остановитесь, но возникает вопрос — а как вы туда попали? Сейчас это можно посмотреть по стеку вызову. Однако, следует понять, что стек вызова — только помогалка. Он вам скажет — я залетел сюда из вот этой процедуры/функции. Вы заходите туда, ставите опять точку останову, опять читаете-фтыкаете, и так — каждый раз. Рекурсивно, без выхода из цикла, пока, наконец, у вас в голове не построится четка цепочка алгоритма для трейсинга. В VS на эту тему давно придумали отладку назад — т.е. вы первый раз попали на точку останова, и уже дальше в обратную сторону по шагам, начинаете проматывать алгоритм. Уходит тысяча лишних и не нужных движений, которые я описал выше…Но на все это можно забить, если вы серьезно, что-то не трейсили типовое :))
(15) Новиков,
А ведь действительно такое есть. Каждый день что-то да новое.
По поводу бэк-трассировки (шагания назад) есть куча вещей которые невозможно корректно восстановить, например удаленный или измененный файл. Таким образом трассировка с гарантированной полной фиксацией разницы между каждой парой соседних шагов в принципе невозможна. VS предполагаю фиксирует только состояния переменных, но например не содержимое кусков памяти, на которые они указывают. Соглашусь, что в ряде случаев и такая информация будет полезна, но все же от разработчика требуется четкое понимание, что при бэк-трассировке будет куча дезинформации.
Предлагаю не благодарить разработчиков за разработку оного! Ибо это должно и так быть! Вопрос в другом: почему этого механизма не было раньше? ИМХО, подушки безопасности должны быть в автомобиле по факту, если нет, то значит хрень!
(17) tormozit,
Не понятно, зачем только трейсить это, а не сам процесс формирования значений для записи
Вы сами определяете те параметры, и те события, которые фиксируются в журнале отладки. Там гибкий механизм, и вы можете под себя его подстроить. Таким образом можно трейсить всякие крэш-ошибки, трудно-воспроизводимые и т.д. Т.е. просто запись включил, определил те события, которые будут писаться, и запустил юнит-тест или ручками. Как крэш настал, можно просто подняться из этого лога, и отматывать назад, мониторя те параметры, которые вы определили для записи.
Естественно, это не серебряная пуля 🙂
(15) Новиков,
В большинстве случаев или как минимум для сокращения геморроя достаточно будет воспользоваться «стеком вызовов».
(19) Почитал более подробно описание. В общем все ожидаемо, как я и описал. Куча не очевидных ограничений. Если не понимаешь, как это все устроено, то рискуешь запутаться еще сильнее, чем при итерационном смещении назад точки остановки.
Повторяю. Согласен, что польза от этого будет. Но ты явно преувеличиваешь ее полезность. Эта фича из разряда «грязных», т.е. при ее использовании появляются некоторые негативные эффекты.
Думаю неплохо бы привести пример, как это работало бы в 1С.
(21) tormozit,
я не думаю, что невозможность поднять записанный куда-то поток чего-то, это негативный эффект. Нужно просто с умом подойти к процессу. Это не серебряная пуля.
Я уже описал все в (15). Если при отладке используется «слалом», тогда тебе нужно прометить как-то абсолютно все места — сначала по глобальному поиску, затем в каждом случае, по стеку вызовов, подниматься выше и опять промечать. Если такого промеченного кода становится много, то теряется весь эффект слалома. Нужно начинать стартовать от самой розетки, если оную ты еще сможешь найти. В случае, если бы был обратный откат, то достаточно в первом глобальном поиске прометить все места, забрейкпоинтиться в нужных по смыслу, ткнутся туда, и включить запись всех параметров. За второй проход ты поднимешь весь контекст выполнения по логу, и уже без тысячи-кратных перезапусков сможешь посмотреть разворачивание событий. Опять же в свете автоматизации тестирования в 8.3, можно было подумать как-то на тему увязки теста со сбором лога.
Вот так как-то, на основе опыта подобной работы в VS, я себе представляю как бы это могло быть в конфигураторе. И да, коллеги — это доп.функционал все же. Если вы хотите, вы его юзаете. Нет — считает грязным и не уместным и не юзаете 🙂 Я бы его юзал, если бы он примерно таким, как я его описал. И наверное, были бы люди, которые это тоже юзали. Ведь в VS юзается и активно.
Удивительно конечно, что такие возможности появляются в IDE в 2013 году. Но в любом случае, лучше позже чем никогда. Сделали бы еще API для конфигуратора, тогда вообще счастье настанет.
(15) Новиков, молодой человек, отдел фантастики на втором этаже
Когда Конфигуратор станет самостоятельной коробкой. Тогда можно требовать (ждать) что-либо. А пока радоваться мелочам — чем не занятие? «Улыбаемся и машем. Улыбаемся и машем.»
(23) m.bolsun, А кто-то API будет использовать… Кто будет следить, что бы конфигуратор работал стабильно и всякие API пользователи не насели удар по престижу фирмы 1С?
(26) pumbaE, Microsoft вот не боится удара по престижу и их Visual Studio полностью открыта для доработки.
(27)
Ну не знаю, насколько сейчас студии открыты для доработки, давно их API не смотрел.
Но вот в 6ой студии через родное апи сделать можно было ровно нихрена, и VisualAssist работал точно также, как опенконф — внедряясь и хача все что только можно, благо она, как и 7.7, была на MFC написана.
И почему-то мне кажется, что и Assist, и Resharper до сих пор не все делают только через API.
(25)
Конфигуратор вряд ли станет отдельной коробкой.
Хотя, если грамотно отделить средства разработки от средств администрирования, тогда вполне может быть.
И будем закупать — N лицензий для рабочих мест, M лицензий для администрирования, К лицензий разработчика.
Либо все остается как было, но появится Конфигуратор+ какой-нибудь.
(28) orefkov, ну думаю точно не через SendKeys и Dll Injection 😉
(29) orefkov, судя по тому сколько лет понадобилось на подсветку параметров, скорее всего не раньше 1С 10.
(31) m.bolsun, Александру стоит добавить работу с подсказками после точки (это не просто) и получиться опять «жареный петух клюнул в » .
(32) pumbaE, издержки динамической типизации. Да, можно сделать определенную поддержку, для локальных переменных, но узнать тип переданного параметра или возвращенного функцией значения, в 100% случаях уже не получится.
(33)
Со 100% нет. Но вот процентов 80 — достижимо, путем более глубокого анализа (для параметров — вызывателей, для возвращаемого значения — оператора Возврат). Для функций-обработчиков событий типы параметров сразу известны.
Остальные 20 — закрываются явным указанием типа в комментариях, как делали в 7.7:
Показать полностью
У tormozit’а вроде уже неплохо работает контекстная подсказка, скоро дам ему возможность портировать ее в снегопат 🙂
(34) orefkov, про 80% согласен, можно сделать и будет работать, но что правда кто-то будет писать тип переменной в комментариях, чтобы потом получить подсказку через точку? Такой костыль — ИМХО уже перебор. Плюс как быть с таким выражением КакойТоПараметр.КакаяТоФункция().КакаяТоПроцедура(); Или обращение к значениям коллекций с разными типами.
(35)
http://infostart.ru/public/65470/
Почему не будут? Будут, вот даже здесь есть «хитрость» —
А для снегопата даже скрипт есть, который помогает делать то, что там в публикации написано.
(35)
[quote]
Плюс как быть с таким выражением КакойТоПараметр.КакаяТоФункция().КакаяТоПроцедура();[/quote]
Ну как обычно. Сначала анализировать КакойТоПараметр.
Если смогли, анализировать, что возвращает КакаяТоФункция(). И так далее.
Возможен еще один поход — если название «КакаяТоФункция» уникально и встречается только в одном типе.
Говорю, масса эвристик может применяться.
(36) orefkov, ну я же привел пример, где не будет работать комментарий. Да я в общем то не против. Уж мне то, как и тебе, к костылям для 1С не привыкать.
Неважно когда, главное разработчики не стоят на месте и двигаются вперед, только уж что-то мелкими шагами, наверное им штата не хватает, чтобы все успеть, это как обычно=)
Зашибись! Все никак не доберусь до 8.3. Еще 8.2 не до конца прочитал %))
То что в С++ Builder и Delphi было 10-12 лет назад сейчас появилось и в 1с…
Да, и 20 лет не прошло. Нахрен это теперь надо, когда все привыкли обходиться имеющимся, а для особо требовательных давно уж есть снегопат… Да ещё и объявление выписывать, когда тупейший VB 3.0 уже в 1998 году всё читал из объявления самой функции, а у VB тоже типизация вольная. Короче, прикрутили безделушку, радуемся и громко заявляем о продвинутом софте.
(42) Yashazz,
Что-то работающее, вместо нуля — все же всегда лучше. Это как лучше хренова сидеть, нежели круто стоять, т.к. в ногах правды нет 🙂
Я думаю, со временем, до делают до уровня продвинутых стандартных IDE.
А про снегопат интересно узнать у разработчика: почему 1С лавочку не прикроет его? 🙂 Ведь, видимо прикрыть можно же. Хотя, не удивлюсь, если и в самой 1С юзают его.
P.s.: сам не пробовал оный не разу. Может не знаю — чего потерял ))))
(43) Новиков, не знаешь, не знаешь. Последняя демка снегопата, очень даже функциональная — попробуй сравни. (Особенно переназначь Ctrl+F3 на расширенный поиск, а Ctrl+Shift+F3 на глобальный фоновый поиск)
Судя по добавленному функционалу, 1С взяла старую демку снегопата почерпнула идеи и реализовала.
Всегда уважал первопроходцев
(0)убийца снегопата 🙁
(46), ИМХО, Снегопат вне опасности. Для тех, кто знаком со снегопатом, конечно.
(46) vano-ekt, Да щас… Если 1С так раскачиваться и дальше будет, то снегопату жить, да жить.
Вот такой косячек в этой подсказке имеется:
http://www.forum.mista.ru/topic.php?id=667344
(24) Stim213,
Вообще-то, описаны элементарные функции ЯП, реализованные в других ЯП еще в конце 90-х — как винда на ноги встала.
Называется это — «отладочный запуск части кода».
Вот я удивляюсь: кто-то старается, делает что-то новое, полезное, или пишет что-то, что никто до него не писал. А кто-то просто переписывает документацию — и сразу получает кучу плюсов.
Тоже, что-ли, что-нибудь из справки запостить…
(51) sashocq, ещё можно гневные Комменты писать, тоже выхлоп даёт не плохой.
(52) xzorkiix, угу. Если б еще карма росла с поправочным коэффициентом > 1, тогда бы все взяли фамилию Белинского, и пустились во все тяжкие 🙂
А между тем появилсяАнонс Visual Studio 2013
Заметьте что среда развивается с учетом средств групповой разработки и автоматического тестирования, а также сборки релизов. Уже получается целое окружение 🙂
Картинки не отображаются.
Работа сайтаhttp://aplastinin.ru приостановлена.
А разве на инфостарт картинки выложить нельзя? Зачем тянуть с левых сайтов.