Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Быстрый поиск библиотечных методов #49

Open
adminimusRU opened this issue Aug 12, 2023 · 4 comments
Open

Comments

@adminimusRU
Copy link

Практически любая конфигурация, хоть типовая, хоть самописная, имеет в составе библиотеки, начиная от БСП и заканчивая специфическими отраслевыми. В больших конфигурациях уровня ERP может быть встроено сразу несколько библиотек (БСП, БЭД, Бухгалтерский учет, Зарплата и кадры и т.д.).

Многие библиотеки содержат в себе модули и методы общего назначения для работы с массивами, строками, объектами метаданных и прочими универсальными сущностями. Также большие конфигурации могут иметь собственные модули общего назначения, например ОбщегоНазначенияУТ. Кроме того, модули разделяюся по контексту выполнения.

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

Было бы удобно иметь функцию быстрого поиска библиотечных методов по части имени. Еще можно проиндексировать описание в документирующем комментарии, иногда само название метода может быть не совсем очевидным.

Пример подсказки:

library method context help

Можно прикрутить дополнительной страницей к контекстной подсказке по Ctrl+Пробел, или сделать срабатывание по отдельному хоткею.

Для начала можно просто проиндексировать все экспортные методы в областях ПрограммныйИнтерфейс общих модулей, это уже сильно поможет. Далее можно реализовать настройки исключения некоторых модулей из индекса для увеличения релевантности поиска. Например можно исключить модули специфичных подсистем вроде ВедомостьНаВыплатуЗарплатыКлиентСервер, модули с суффиксом Служебный. Это можно реализовать отбором по подсистемам, по маске имени или даже просто сделать выбор конкретных модулей в явном виде галками.

@marmyshev
Copy link
Owner

@adminimusRU можешь уточнить.

Вот проблема:

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

Но дальше предлагается решение

Было бы удобно иметь функцию быстрого поиска библиотечных методов по части имени.

Не понятно, оно щас как работает? Как на картинке? или то как на картинке - это как хотелось бы чтобы работало?

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

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

Наверное, было правильно описать тут: как пользователь должен использовать точный поиск (когда он знает где и что) вместе с неточным нечетким поиском - и как не потянуть в тыщах ложных срабатываний по слову "Строка", т.е. принципы как ограничивать поиск.

Так же, почему поиск по конфигурации (по модулям) не удобен?

@adminimusRU
Copy link
Author

Не понятно, оно щас как работает? Как на картинке? или то как на картинке - это как хотелось бы чтобы работало?

на картинке предложение с примером реализации. Видимо настолько качественно нафотошопил, что запутал даже разработчика :)

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

Так же, почему поиск по конфигурации (по модулям) не удобен?

Если попытаться просто найти выражение "строк", то найдутся десятки тысяч результатов по всему коду модулей, включая имена локальных переменных, строковые литералы и вызовы методов платформы.

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

Если попробовать искать только экспортные методы шаблоном "строк*(*экспорт", то мы не сможем найти методы, у которых сигнатура разбита на несколько строк, например так:
image
Кроме того, такой шаблон даст множество ложных срабатываний на методы из служебного программного интерфейса, а также экспортные служебные методы (такое тоже встречается на практике).

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

@tormozit
Copy link

tormozit commented Aug 13, 2023

Может сразу сделать отдельную форму для супер поиска общего метода как в ИР?
Тут правда немного устаревшая картинка, но основные возможности уже видны https://www.hostedredmine.com/issues/888168

@adminimusRU
Copy link
Author

@tormozit

Может сразу сделать отдельную форму для супер поиска общего метода как в ИР?

Лично мне в большинстве случаев хватило бы и краткого результата в контекстной подсказке, если будет возможность заранее настроить область поиска по подсистемам и маскам имен модулей, то и результаты получатся почти всегда релевантные и их будет немного. Выбрать из контекстной подсказки всё же гораздо быстрее, чем вызывать отдельный сложный диалог.

Форму можно тоже сделать для сложных случаев, когда краткого списка результатов не хватает и хочется вдумчиво почитать описания методов, покрутить настройки поиска. Можно интегрировать в текущий глобальный поиск - просто еще один режим будет с отдельной вкладкой настроек. Только вывод результатов нужно доработать, чтобы можно было сразу в списке увидеть описание отдельной колонкой.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants