Condividi tramite


Metodo LanguageService.GetProximityExpressions

Restituisce un elenco di espressioni da valutare e indicarne automobili finestra, per un intervallo specificato di righe.

Spazio dei nomi:  Microsoft.VisualStudio.Package
Assembly:   Microsoft.VisualStudio.Package.LanguageService.9.0 (in Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
  Microsoft.VisualStudio.Package.LanguageService.10.0 (in Microsoft.VisualStudio.Package.LanguageService.10.0.dll)
  Microsoft.VisualStudio.Package.LanguageService.11.0 (in Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
  Microsoft.VisualStudio.Package.LanguageService (in Microsoft.VisualStudio.Package.LanguageService.dll)

Sintassi

'Dichiarazione
Public Overridable Function GetProximityExpressions ( _
    buffer As IVsTextBuffer, _
    line As Integer, _
    col As Integer, _
    cLines As Integer, _
    <OutAttribute> ByRef ppEnum As IVsEnumBSTR _
) As Integer
public virtual int GetProximityExpressions(
    IVsTextBuffer buffer,
    int line,
    int col,
    int cLines,
    out IVsEnumBSTR ppEnum
)

Parametri

  • line
    Tipo: System.Int32
    [in] La prima riga dell'intervallo da analizzare per le espressioni.
  • col
    Tipo: System.Int32
    [in] L'offset nella prima riga per avviare la ricerca di espressioni.
  • cLines
    Tipo: System.Int32
    [in] Il numero di righe da esaminare.

Valore restituito

Tipo: System.Int32
Se l'operazione riesce, restituisce S_OK, restituisce S_FALSE se non esistono espressioni; in caso contrario, restituisce un codice di errore.

Implementa

IVsLanguageDebugInfo.GetProximityExpressions(IVsTextBuffer, Int32, Int32, Int32, IVsEnumBSTR%)

Note

Questo metodo viene chiamato durante il debug per ottenere un elenco di variabili che possono essere visualizzati in automobili finestra.L'intervallo delle righe in genere include un metodo o una funzione.

Questo metodo può essere implementato per utilizzare la versione di AuthoringSink classe che ha ricevuto le espressioni con AutoExpression metodo.L'implementazione cercherà elenco delle espressioni raccolte durante l'operazione di analisi e restituire tutte le espressioni che ha apportato parte dell'intervallo specificato dal line, cole cLines argomenti.

il metodo di base restituisce sempre un valore null.

Esempi

Di seguito è un'implementazione possibile di GetProximityExpressions metodo che chiama ParseSource parser del metodo per ottenere l'intervallo di codice associata alla posizione corrente.si noti che ParseSource viene chiamato il metodo sul thread corrente così la gestione di Autos il motivo di analisi deve essere molto rapido evitare ritardi di annullamento in popolare automobili finestra.

GetAutoExpressionsCount e GetAutoExpression i metodi indicati nell'esempio sono metodi personalizzati in MyAuthoringSink oggetto e si aggiungono per supportare questa implementazione di esempio.inoltre, MyVsEnumBSTR la classe è una classe che implementa IVsEnumBSTR interfaccia.

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;
        }
    }
}

Sicurezza di .NET Framework

Vedere anche

Riferimenti

LanguageService Classe

Spazio dei nomi Microsoft.VisualStudio.Package