LanguageService.GetProximityExpressions(IVsTextBuffer, Int32, Int32, Int32, IVsEnumBSTR) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna uma lista de expressões a serem avaliadas e mostradas na janela Autos, para um determinado trecho de linhas.
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
Parâmetros
- buffer
- IVsTextBuffer
no O IVsTextBuffer arquivo de origem em retenção.
- line
- Int32
no A primeira linha do intervalo a ser examinado em busca de expressões.
- col
- Int32
no O deslocamento na primeira linha para começar a procurar expressões.
- cLines
- Int32
no O número de linhas a serem examinadas.
- ppEnum
- IVsEnumBSTR
fora Um IVsEnumBSTR objeto que contém a lista de expressões a serem examinadas. Retornar um valor nulo para indicar que não há expressões.
Retornos
Se for bem-sucedido, retornará S_OK , retornará S_FALSE se não houver expressões; caso contrário, retornará um código de erro.
Implementações
Exemplos
Aqui está uma implementação possível do GetProximityExpressions método que chama o ParseSource analisador de método para obter o trecho de código associado ao local atual. Observe que o ParseSource método é chamado no thread atual, de modo que a manipulação do Autos motivo da análise deve ser muito rápida para evitar atrasos de desfazer na janela de preenchimento automático .
Os GetAutoExpressionsCount GetAutoExpression métodos e mostrados no exemplo são métodos personalizados no MyAuthoringSink objeto e foram adicionados para dar suporte a essa implementação de exemplo. Além disso, a MyVsEnumBSTR classe é uma classe que implementa a IVsEnumBSTR interface.
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;
}
}
}
Comentários
Esse método é chamado durante a depuração para obter uma lista de variáveis que podem ser exibidas na janela de automóveis . O intervalo de linhas normalmente abrange um método ou uma função.
Esse método pode ser implementado para usar sua versão da AuthoringSink classe que coletou expressões por meio do AutoExpression método. Sua implementação pesquisaria a lista de expressões coletadas durante uma operação de análise e retornará todas as expressões que ocorreram dentro da extensão especificada pelos line col argumentos, e cLines .
O método base sempre retorna um valor nulo.