Остановить сеанс intellisense от преждевременного закрытия

Я создал расширение Visual Studio, которое предоставляет intellisense для моего языка, специфичного для моего домена, наследуя от Microsoft.VisualStudio.Language.Intellisense.ICompletionSource.

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

Когда intellisense всплывает, вы можете начать вводить текст, а содержимое поля intellisense фильтруется, чтобы отображать только те элементы, которые начинаются с того, что вы набрали.

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

Есть ли способ остановить это поведение, чтобы подчеркивание можно рассматривать так же, как обычные буквенно-цифровые символы?

Ответ 1

Я не уверен, какой язык вы используете, но в вашем методе Exec кажется, что вы делаете что-то вроде (С#):

if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN || nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB || (char.IsWhiteSpace(typedChar) || char.IsPunctuation(typedChar))

Причиной здесь является то, что _ считается пунктуацией, поэтому char.IsPunctuation(typedChar) возвращает true, фиксируя текущий элемент.

Исправление - (char.IsPunctuation(typedChar) && typedChar != '_'):

if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN || nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB || (char.IsWhiteSpace(typedChar) || (char.IsPunctuation(typedChar) && typedChar != '_') || typedChar == '='))

FYI: Я тестировал это, отлаживая это расширение - https://github.com/kfmaurice/nla. Без этого изменения оно также выполнялось при наборе подчеркивания.

Ответ 2

Если вы перейдете в Инструменты- > Параметры- > Текст Редактор- > JavaScript- > IntelliSense- > Ссылки должны быть капли вниз для контрольной группы (в зависимости от того, какой тип проекта вы может потребоваться изменить это)

Как только у вас появится подходящая группа, вы заметите, что есть некоторые значения по умолчанию включены файлы ссылок intellisense. Попробуйте удалить underscorefilter.js

нашел здесь здесь. Сообщите мне, если это сработает для вас.

Ответ 3

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