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, чтобы не указывать ни одного выражения.

Возвращаемое значение

Int32

В случае успеха возвращает 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.

Применяется к