Intellisense

Материал из Вики проекта PascalABC.NET
Версия от 12:29, 30 апреля 2009; Ibond (обсуждение | вклад) (Новая: В PascalABC.NET реализован Intellisense. На данный момент он включает в себя: * подсказку по точке * подсказку по на...)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

В PascalABC.NET реализован Intellisense. На данный момент он включает в себя:

  • подсказку по точке
  • подсказку по нажатии ( и [
  • подсказку по наведении мышью
  • переход к описанию и реализации
  • вывод окна со всеми видимыми именами текущего модуля и всех подключенных модулей и пространств имен (Ctrl+Space)
  • вывод окна со всеми видимыми именами текущего модуля (Shift+Space)
  • поиск зависимостей (Find References)
  • генерация реализации методов (Ctrl+Shift+C)
  • вывод окна с переопределяемыми методами базового класса (Ctrl+Shift+Space)
  • реализация методов интерфейса (Ctrl+Shift+I)

Реализация

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

При нажатии клавиши справа налево считывается соответствующее выражение. Например, при нажатии точки считывается выражение перед точкой, при наведении курсора мыши считывается выражение под курсором. Парсинг при этом не происходит, так как внутреннее представление уже имеется. Это существенно ускоряет вывод подсказок.

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