ExpansionProvider Klasse

Definition

Wichtig

Diese API ist nicht CLS-kompatibel.

Bietet Unterstützung für das Einfügen von Codeausschnitten in den Quellcode.

public ref class ExpansionProvider : IDisposable, Microsoft::VisualStudio::TextManager::Interop::IVsExpansionClient
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(true)]
public class ExpansionProvider : IDisposable, Microsoft.VisualStudio.TextManager.Interop.IVsExpansionClient
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ExpansionProvider = class
    interface IDisposable
    interface IVsExpansionClient
Public Class ExpansionProvider
Implements IDisposable, IVsExpansionClient
Vererbung
ExpansionProvider
Attribute
Implementiert

Beispiele

Erweiterungen werden auf drei Arten eingefügt:

  1. Der Code Ausschnitt Browser,

  2. Auswählen eines Ausschnitt Verknüpfungs namens aus einer Vervollständigungsliste oder

  3. Durch Eingeben einer Verknüpfung und Eingeben eines Vervollständigungs Zeichens, z. b. einer Registerkarte oder eines leer Zeichens.

Das folgende Beispiel zeigt eine Möglichkeit, die automatische Erweiterung zu behandeln, die durch Eingabe einer Erweiterungs Verknüpfung, gefolgt von der Tab-Taste, ausgelöst wird. Diese Methode wird jedes Mal aufgerufen, wenn eine Tab-Taste eingegeben wird.

using Microsoft.VisualStudio.Package;  
using Microsoft.VisualStudio;  

namespace MyLanguagePackage  
{  
    class MyViewFilter : ViewFilter  
    {  
        // This is called from our HandlePreExec when a tab key is pressed  
        bool HandleTabKey()  
        {  
            ExpansionProvider ep = GetExpansionProvider();  
            if (ep == null || ep.InTemplateEditingMode)  
            {  
                // No expansion provider or already editing a template,  
                // so nothing to do.  
                return false;  
            }  

            TokenInfo tokenInfo = Source.GetTokenInfo(TextView);  
            if (tokenInfo.StartLine != tokenInfo.EndLine ||  
                tokenInfo.StartIndex == tokenInfo.EndIndex)  
            {  
                // No shortcut found before caret, so nothing to do.  
                // Note that the above test does not allow for single  
                // character tokens to be shortcut names.  
                return false;  
            }  

            int line;  
            int col;  
            int hr;  
            hr = TextView.GetCaretPos(out line,out col);  
            if (hr != VsConstants.S_OK)  
            {  
                // Could not get current position, so nothing to do.  
                // GetCaretPos is used in Source.GetTokenInfo so if  
                // GetCaretPos fails, GetTokenInfo fails. However,  
                // better to be thorough and test again here.  
                return false;  
            }  

            // Get shortcut text that was just typed.  
            string shortcut = Source.GetText(line,  
                                             tokenInfo.StartIndex,  
                                             line,  
                                             tokenInfo.EndIndex);  
            if (shortcut == null || shortcut == "")  
            {  
                // No text was found at the position. This failure is  
                // is not likely if GetTokenInfo returned a valid token  
                // but better to be thorough.  
                return false;  
            }  

            string snippetTitle;  
            string snippetPath;  
            TextSpan pos = new TextSpan();  
            pos.iStartLine = line;  
            pos.iStartIndex = tokenInfo.StartIndex;  
            pos.iEndLine = line;  
            pos.iEndIndex = tokenInfo.EndIndex;  
            if (ep.FindExpansionByShortcut(TextView,  
                                            shortcut,  
                                            pos,  
                                            true,  
                                            out title,  
                                            out path) != VSConstants.S_OK)  
            {  
                // No snippet matched the shortcut, so nothing to do.  
                return false;  
            }  

            // If InsertNamedExpansion returns true, snippet was  
            // inserted and therefore the Tab key was handled.  
            // Otherwise, false is returned and the Tab key will be  
            // passed on to someone else.  
            return ep.InsertNamedExpansion(TextView,  
                                           title,  
                                           path,  
                                           pos,  
                                           false);  
        }  
    }  
}  

Hinweise

Ein Code Ausschnitt ist eine Vorlage, die in vollständigen Code erweitert wird, wenn der Benutzer den Ausschnitt einfügt. Wenn der Ausschnitt zum ersten Mal erweitert wird, Visual Studio wechselt der Kern Editor in einen speziellen Vorlagen Bearbeitungsmodus, in dem der Ausschnitt direkt geändert werden kann. Das heißt, dass bestimmte Teile des Code Ausschnitts als Felder bezeichnet werden und diese Felder leicht vom Benutzer geändert werden können, bevor der Code Ausschnitt in den Puffer des Editors committet wird. Die Felder sind hervorgehoben, und die Dropdown Felder können Funktionen für den Benutzer bereitstellen.

Ein Ausschnitt weist einen Namen auf, um ihn und eine Vorlagen Datei mit dem Ausschnitt selbst zu identifizieren. Die Vorlagen Datei enthält XML-Tags, die bestimmte Elemente der Vorlage angeben, vom Code zu den Ersetzungs Feldern bis zu Funktionen (als Erweiterungsfunktionen bezeichnet). Weitere Informationen zu Code Ausschnitten finden Sie unter Code Ausschnitte .

Hinweise für Vererber

Die ExpansionProvider -Klasse bietet alle Unterstützung für das auswählen und Einfügen eines Code Ausschnitts in eine Quelldatei. Die-Basisklasse stellt alle grundlegenden Funktionen bereit. Wenn Sie jedoch kontextabhängige Ausschnitt Einfügung unterstützen möchten (d. h., ein Ausschnitt mit dem gleichen Namen kann sich je nach dem Kontext, in den er eingefügt wird, unterschiedlich Verhalten), müssen Sie eine Klasse von der ExpansionProvider -Klasse ableiten und die IsValidType(IVsTextLines, TextSpan[], String[], Int32, Int32) -Methode und die- IsValidKind(IVsTextLines, TextSpan[], String, Int32) Methode überschreiben, um den entsprechenden ausschnittstyp und die Art in einem bestimmten Kontext zu melden. Stellen Sie sicher, dass Sie die- CreateExpansionProvider(Source) Methode in Ihrer Version der- LanguageService Klasse überschreiben, um die Version der-Klasse zurückzugeben ExpansionProvider .

Hinweise für Aufrufer

Eine Instanz der- ExpansionProvider Klasse wird von der- CreateExpansionProvider(Source) Methode in der-Klasse zurückgegeben LanguageService , die von der- GetExpansionProvider() Methode in der-Klasse aufgerufen wird Source . Die- ViewFilter Klasse ruft ihren eigenen auf GetExpansionProvider() , der wiederum den Aufruf an die- GetExpansionProvider() Methode in der-Klasse weiterleitet Source . Die- ViewFilter Klasse ruft die- GetExpansionProvider() Methode immer dann auf, wenn ein Befehl ausgeführt wird, damit die ExpansionProvider Klasse die Möglichkeit hat, zu agieren.

Konstruktoren

ExpansionProvider(Source)

Initialisiert eine neue Instanz der ExpansionProvider-Klasse.

Eigenschaften

Expansion

Gibt das IVsExpansion-Objekt zurück, das für das Einfügen von Ausschnitten in einen Puffer verwendet wird.

ExpansionSession

Gibt die Erweiterungssitzung zurück, die erstellt wird, um das Bearbeiten des Codeausschnitts zu verwalten.

InTemplateEditingMode

Gibt an, ob der Codeausschnitt gerade bearbeitet wird.

Source

Gibt das Source-Objekt zurück, das diesem Erweiterungsanbieter zugeordnet ist.

TextView

Gibt die Textansicht zurück, die die Quelldatei enthält, die vom Erweiterungsanbieter bearbeitet wird.

Methoden

BeginTemplateEditing(Int32, Int32)

Fügt den zuvor vorbereiteten Codeausschnitt ein und startet den Ausschnittsbearbeitungsmodus.

DisplayExpansionBrowser(IVsTextView, String, String[], Boolean, String[], Boolean)

Zeigt eine Liste von Erweiterungsvorlagen des angegebenen Typs und der angegebenen Art an.

Dispose()

Bereinigt alle zugeordneten Ressourcen, kurz bevor das ExpansionProvider-Objekt zerstört wird.

EndExpansion()

Wird aufgerufen, wenn eine Erweiterungssitzung beendet wurde.

EndTemplateEditing(Boolean)

Beendet den aktuellen Ausschnittsbearbeitungsmodus.

Finalize()

Bereinigt alle Ressourcen, kurz bevor das ExpansionProvider-Objekt zerstört wird.

FindExpansionByShortcut(IVsTextView, String, TextSpan, Boolean, String, String)

Ruft den Pfad und den Titel eines Codeausschnitts ab, der den Verknüpfungsnamen des Ausschnitts erhalten hat.

FormatSpan(IVsTextLines, TextSpan[])

Formatiert den angegebenen Textabschnitt.

GetExpansionFunction(IXMLDOMNode, String, IVsExpansionFunction)

Gibt ein IVsExpansionFunction-Objekt zurück, das die Erweiterungsfunktion darstellt, die im angegebenen XML-Vorlagenknoten beschrieben wird (COM-Implementierung).

GetExpansionFunction(XmlElement, String)

Gibt ein IVsExpansionFunction-Objekt zurück, das die Erweiterungsfunktion darstellt, die im angegebenen XML-Vorlagenknoten beschrieben wird.

GetExpansionSpan()

Gibt die Spanne zurück, die von dem Ausschnitt belegt wird, der gerade bearbeitet wird.

GetFieldSpan(String, TextSpan)

Ruft die Feldspanne des angegebenen Felds ab.

GetFieldValue(String, String)

Gibt den Wert des angegebenen Felds zurück.

HandlePostExec(Guid, UInt32, UInt32, Boolean, IntPtr, IntPtr)

Wird aufgerufen, nachdem ein Befehl ausgeführt wurde.

HandlePreExec(Guid, UInt32, UInt32, IntPtr, IntPtr)

Wird aufgerufen, bevor ein Befehl ausgeführt wird.

HandleQueryStatus(Guid, UInt32, Int32)

Bestimmt, ob der angegebene Befehl durch die ExpansionProvider-Klasse behandelt wird.

InsertNamedExpansion(IVsTextView, String, String, TextSpan, Boolean)

Fügt den angegebenen Ausschnitt in die Quelle an der angegebenen Position ein.

InsertSpecificExpansion(IVsTextView, XmlElement, TextSpan, String)

Fügt den bestimmten Ausschnitt in die Quelle an der angegebenen Position ein.

IsValidKind(IVsTextLines, TextSpan[], String, Int32)

Bestimmt, ob dies ein gültiger Text für eine Erweiterung ist. Diese Methode sollte überschrieben werden, wenn Sie angeben möchten, wo im Quelldokument die Erweiterung stattfinden kann.

IsValidType(IVsTextLines, TextSpan[], String[], Int32, Int32)

Bestimmt, ob ein bestimmter Typ für Erweiterungszwecke gültig ist. Diese Methode sollte überschrieben werden, wenn Sie angeben möchten, wo im Quelldokument die Erweiterung stattfinden kann.

OnAfterInsertion(IVsExpansionSession)

Wird aufgerufen, nachdem ein Ausschnitt in die Quelle eingefügt wurde.

OnBeforeInsertion(IVsExpansionSession)

Wird aufgerufen, kurz bevor der Ausschnitt in die Quelle eingefügt wird.

OnItemChosen(String, String)

Wird aufgerufen, wenn ein Element in einem Ausschnittsbrowser ausgewählt wird.

PositionCaretForEditing(IVsTextLines, TextSpan[])

Setzt die Einfügemarke in eine Position ein, die zum Bearbeiten geeignet ist.

PrepareTemplate(String, String)

Bereitet sich auf Einfügen des angegebenen Ausschnitts vor.

Gilt für