LanguageService.GetProximityExpressions(IVsTextBuffer, Int32, Int32, Int32, IVsEnumBSTR) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает список выражений для вычисления и отображения в окне видимые для заданного диапазона строк.
public:
virtual int GetProximityExpressions(Microsoft::VisualStudio::TextManager::Interop::IVsTextBuffer ^ buffer, int line, int col, int cLines, [Runtime::InteropServices::Out] Microsoft::VisualStudio::TextManager::Interop::IVsEnumBSTR ^ % ppEnum);
public:
virtual int GetProximityExpressions(Microsoft::VisualStudio::TextManager::Interop::IVsTextBuffer ^ buffer, int line, int col, int cLines, [Runtime::InteropServices::Out] Microsoft::VisualStudio::TextManager::Interop::IVsEnumBSTR ^ & ppEnum);
virtual int GetProximityExpressions(Microsoft::VisualStudio::TextManager::Interop::IVsTextBuffer const & buffer, int line, int col, int cLines, [Runtime::InteropServices::Out] Microsoft::VisualStudio::TextManager::Interop::IVsEnumBSTR const & & ppEnum);
public virtual int GetProximityExpressions (Microsoft.VisualStudio.TextManager.Interop.IVsTextBuffer buffer, int line, int col, int cLines, out Microsoft.VisualStudio.TextManager.Interop.IVsEnumBSTR ppEnum);
abstract member GetProximityExpressions : Microsoft.VisualStudio.TextManager.Interop.IVsTextBuffer * int * int * int * IVsEnumBSTR -> int
override this.GetProximityExpressions : Microsoft.VisualStudio.TextManager.Interop.IVsTextBuffer * int * int * int * IVsEnumBSTR -> int
Public Overridable Function GetProximityExpressions (buffer As IVsTextBuffer, line As Integer, col As Integer, cLines As Integer, ByRef ppEnum As IVsEnumBSTR) As Integer
Параметры
- buffer
- IVsTextBuffer
[in] Интерфейс IVsTextBuffer, содержащий исходный файл.
- line
- Int32
[in] Первая строка диапазона, который необходимо проверить на наличие выражений.
- col
- Int32
[in] Смещение для первой строки, с которого начинается поиск выражений.
- cLines
- Int32
[in] Количество строк, которые необходимо проверить.
- ppEnum
- IVsEnumBSTR
[out] Объект IVsEnumBSTR, содержащий список выражений, которые необходимо проверить. Верните значение NULL, чтобы не указывать ни одного выражения.
Возвращаемое значение
В случае успеха возвращает S_OK; возвращает S_FALSE при отсутствии выражений; в противном случае – возвращает код ошибки.
Реализации
Примеры
Ниже приведена одна из возможных реализаций GetProximityExpressions метода, который вызывает ParseSource средство синтаксического анализа метода для получения диапазона кода, связанного с текущим расположением. Обратите внимание, что ParseSource метод вызывается в текущем потоке, поэтому обработка Autos причины синтаксического анализа должна быть очень быстрой, чтобы избежать задержки отмены при заполнении окна видимые .
GetAutoExpressionsCountМетоды и, GetAutoExpression показанные в примере, являются пользовательскими методами MyAuthoringSink объекта и были добавлены для поддержки этого примера реализации. Кроме того, MyVsEnumBSTR класс является классом, реализующим IVsEnumBSTR интерфейс.
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace MyLanguagePackage
{
public class MyLanguageService : LanguageService
{
public override int GetProximityExpressions(IVsTextBuffer buffer,
int line,
int col,
int cLines,
out IVsEnumBSTR ppEnum)
{
int retval = HRESULT.E_NOTIMPL;
ppEnum = null;
if (buffer != null)
{
IVsTextLines textLines = buffer as IVsTextLines;
if (textLines != null)
{
Source src = this.GetSource(textLines);
if (src != null)
{
TokenInfo tokenInfo = new TokenInfo();
string text = src.GetText();
ParseRequest req = CreateParseRequest(src,
line,
col,
tokenInfo,
text,
src.GetFilePath(),
ParseReason.Autos,
null);
req.Scope = this.ParseSource(req);
MyAuthoringSink sink = req.Sink as MyAuthoringSink;
retval = VSConstants.S_FALSE;
int spanCount = sink.GetAutoExpressionsCount();
if (spanCount > 0) {
MyVsEnumBSTR bstrList = new MyVsEnumBSTR();
for (int i = 0; i < spanCount; i++)
{
TextSpan span;
sink.GetAutoExpression(i, out span);
string expression = src.GetText(span.iStartLine,
span.iStartIndex,
span.iEndLine,
span.iEndIndex);
bstrList.AddString(expression);
}
ppEnum = bstrList;
retval = VSConstants.S_OK;
}
}
}
}
return retval;
}
}
}
Комментарии
Этот метод вызывается во время отладки для получения списка переменных, которые могут отображаться в окне видимые . Диапазон строк обычно охватывает метод или функцию.
Этот метод можно реализовать для использования версии AuthoringSink класса, в которой собраны выражения с помощью AutoExpression метода. Ваша реализация будет искать в списке выражений, собранных во время операции синтаксического анализа, и возвращать все выражения, находящиеся в диапазоне, указанном line col cLines аргументами, и.
Базовый метод всегда возвращает значение null.