Вопрос

Я надеюсь, что это обоснованный вопрос:как intellisense работает в VS2008?Мне нужно знать все, что известно об алгоритме, который он использует для поиска предложений, когда именно он появляется ("." - это всего лишь один очевидный триггер), как его поведение может быть изменено, если это вообще возможно, и т.д.

Чтобы поместить этот вопрос в контекст:Основная проблема, которую я пытаюсь решить, заключается в том, как активировать и деактивировать intellisense в отдельных частях экрана редактора и как изменить место поиска, чтобы заполнить поле с предложениями.

Любая информация приветствуется.

Это было полезно?

Решение

Ознакомьтесь с этой статьей DIY Intellisense в CodeProject.

Другие советы

Однако гораздо интереснее провести его реинжиниринг.Давайте рассмотрим эту проблему:

  • вам нужно определить интересующие вас слова
  • вам нужно найти возможные варианты
  • вам нужно представить их

Теперь первый шаг означает, что вы должны разобрать код.У вас есть ключевые слова C / C **, вы предварительно анализируете различные объявления функций и классов и загружаете их в какую-то структуру данных.Затем вы анализируете код и сохраняете имена классов, переменных и т.д. И помещаете их в одну и ту же структуру данных.

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

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

Eclipse также имеет эту функцию, и это проект с открытым исходным кодом. Почему бы не проверить, как Eclipse это делает, глядя на код?

Этот вопрос слишком широкий. Поскольку существует несколько разных языков, VS IDE поддерживает «из коробки» И существует N улучшений DSL и IDE, которые поддерживают альтернативный intellisense, что подразумевает ряд ответов. Если вы говорите именно о C #, тогда смотрите Инструменты | Варианты | Текстовый редактор | C # | Область Intellisense, чтобы увидеть доступные варианты вариантов завершения. Что касается используемого алгоритма, то вы будете искать метаданные сборок, обильное кэширование элементов типа, список MRU для последнего элемента, выбранного для определенного типа, и т. Д. Если у вас есть более конкретный вопрос, я бы предложил Вы уточните.

См. пример DSL (ironpython) и его реализации здесь .

Я не видел ни одного текстового редактора в VS, который бы ограничивал возможности IntelliSense. Это все зависит от языка. Если ваш курсор находится в точке, где IntelliSense может внести свой вклад в действительный токен, именно тогда он будет использоваться.

Я считаю, что есть некоторая взаимосвязь с используемой системой проекта, но это, насколько я знаю. Я также считаю, что в Visual Studio SDK есть пример системы проектов, и это может дать вам представление.

В таких случаях я иногда использую собственную версию InteliSense, разработанную для AutoHotKey Когда я хочу конкретного поведения. Смысл этого скрипта в том, что его можно использовать с любым редактором или практически любым элементом управления, принимающим текст. Он работает путем записи ввода текста и интерпретации его в файле синтаксиса.

Возможно, вы сможете использовать его как основу для того, чего хотите достичь. Я успешно использовал ISense с несколькими языками, в которых такого нет, например, Csound или даже пакетным скрипты. Можно будет расширить его для поддержки C #, используя мониторинг ввода в сочетании с Reflection.

В любом случае, с помощью AHK вы даже можете контролировать VS intelissense, "взяв" список предметов, которые он представляет и фильтрует, или подобные вещи. У вас могут быть небольшие проблемы с границами процесса, но ничего нельзя исправить.

Intellisense ius в целом, AFAIK, реализован с использованием различных методов. Я читал, что Delphi настолько быстр, что реализует isense, перекомпилируя проект на каждом токене, и поэтому C ++ Builder не имеет isense, поскольку его компиляция идет очень медленно.

Что касается того, как вы меняете, где выглядит вопрос, краткий ответ, вы не можете. Intellisense по большей части обеспечивается отражением сборок, включенных в ваш проект (и некоторыми другими приемами с C ++). То, что вы получаете, является результатом обработки VS всеми включенными вами сборками и всеми сборками из GAC.

Тем не менее, если вы хотите предоставить явные результаты intellisense для проекта, над которым вы работаете, загляните в IVsContextualIntellisenseFilterProvider

Наконец, для некоторого понимания скрытого процесса, проверьте это сообщение в блоге

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top