Udostępnij za pośrednictwem


Klasa ExpansionProvider

Zapewnia obsługę wstawianie urywków kodu do kodu źródłowego.

Ten interfejs API nie jest zgodny ze specyfikacją CLS. 

Hierarchia dziedziczenia

System.Object
  Microsoft.VisualStudio.Package.ExpansionProvider

Przestrzeń nazw:  Microsoft.VisualStudio.Package
Zestawy:   Microsoft.VisualStudio.Package.LanguageService.10.0 (w Microsoft.VisualStudio.Package.LanguageService.10.0.dll)
  Microsoft.VisualStudio.Package.LanguageService (w Microsoft.VisualStudio.Package.LanguageService.dll)
  Microsoft.VisualStudio.Package.LanguageService.9.0 (w Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
  Microsoft.VisualStudio.Package.LanguageService.11.0 (w Microsoft.VisualStudio.Package.LanguageService.11.0.dll)

Składnia

'Deklaracja
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Class ExpansionProvider _
    Implements IDisposable, IVsExpansionClient
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public class ExpansionProvider : IDisposable, 
    IVsExpansionClient

Typ ExpansionProvider uwidacznia następujące elementy członkowskie.

Konstruktorzy

  Nazwa Opis
Metoda publiczna ExpansionProvider Inicjuje nowe wystąpienie ExpansionProvider klasy.

Początek

Właściwości

  Nazwa Opis
Właściwość publiczna Expansion Zwraca IVsExpansion obiekt używany do wstawiania urywków do buforu.
Właściwość publiczna ExpansionSession Zwraca sesji rozszerzeń utworzona w celu zarządzania Edytowanie wstawki kodu programu.
Właściwość publiczna InTemplateEditingMode Wskazuje, czy wstawki kodu programu jest aktualnie edytowana.
Właściwość publiczna Source Zwraca Source obiektu skojarzonego z tym dostawcą rozszerzenia.
Właściwość publiczna TextView Zwraca widoku tekst zawierający przetwarzane przez dostawcę rozszerzenia pliku źródłowego.

Początek

Metody

  Nazwa Opis
Metoda publiczna BeginTemplateEditing Wstawia urywek kodu uprzednio przygotowany i rozpoczyna urywka, w trybie edycji.
Metoda publiczna DisplayExpansionBrowser Wyświetla listę rozszerzeń szablonów określony typ i rodzaj.
Metoda publiczna Dispose Czyści przydzielonego zasobu tuż przed ExpansionProvider niszczony jest obiekt.
Metoda publiczna EndExpansion Wywoływane, gdy rozszerzenia sesja została zakończona.
Metoda publiczna EndTemplateEditing Kończy bieżące urywek tryb edycji.
Metoda publiczna Equals Określa, czy określony obiekt jest równa bieżącego obiektu. (Odziedziczone z Object).
Metoda chroniona Finalize Czyści wszystkie zasoby tuż przed ExpansionProvider niszczony jest obiekt. (Zastępuje Object.Finalize()).
Metoda publiczna FindExpansionByShortcut Uzyskuje ścieżka i nazwa nadawana nazwa skrótu urywek wstawki kodu programu.
Metoda publiczna FormatSpan Formaty zakres określony tekst.
Metoda publiczna GetExpansionFunction(XmlElement, String) Zwraca IVsExpansionFunction obiekt reprezentujący funkcji rozszerzeń opisany w danym węźle szablon XML.
Metoda publiczna GetExpansionFunction(IXMLDOMNode, String, IVsExpansionFunction%) Zwraca IVsExpansionFunction obiekt reprezentujący funkcji rozszerzeń opisany w danym węźle szablon XML (wykonanie COM).
Metoda publiczna GetExpansionSpan Zwraca zakres zajmowanych przez urywka, aktualnie edytowana.
Metoda publiczna GetFieldSpan Pobiera pola zakres określonego pola
Metoda publiczna GetFieldValue Zwraca wartość określonego pola.
Metoda publiczna GetHashCode Służy jako funkcja mieszania dla określonego typu. (Odziedziczone z Object).
Metoda publiczna GetType Pobiera Type bieżącej instancji. (Odziedziczone z Object).
Metoda publiczna HandlePostExec Wywoływana po wykonaniu polecenia.
Metoda publiczna HandlePreExec Wywoływana przed wykonaniem polecenia.
Metoda publiczna HandleQueryStatus Określa, jeżeli określone polecenie jest obsługiwane przez ExpansionProvider klasy.
Metoda publiczna InsertNamedExpansion Wstawia urywek określonego źródła w danym miejscu.
Metoda publiczna InsertSpecificExpansion Wstawia urywek określonego źródła w określonym położeniu.
Metoda publiczna IsValidKind Określa, czy jest to prawidłowy tekst dla rozszerzenia.Metoda ta powinna być pomijana, jeśli chcesz określić, gdzie w dokumencie źródłowym rozszerzenia może mieć miejsce.
Metoda publiczna IsValidType Określa, czy danego typu jest ważny do celów rozwoju.Metoda ta powinna być pomijana, jeśli chcesz określić, gdzie w dokumencie źródłowym rozszerzenia może mieć miejsce.
Metoda chroniona MemberwiseClone Tworzy kopię płytkie bieżące Object. (Odziedziczone z Object).
Metoda publiczna OnAfterInsertion Wywoływana po urywek zostało wstawione do źródła.
Metoda publiczna OnBeforeInsertion Wywoływana tuż przed urywka zostało wstawione do źródła.
Metoda publiczna OnItemChosen Wywoływane, gdy zostanie wybrany element w przeglądarce urywek.
Metoda publiczna PositionCaretForEditing Powoduje umieszczenie kursora w pozycji nadające się do edycji.
Metoda publiczna PrepareTemplate Przygotowuje się do wstawiania urywków określony.
Metoda publiczna ToString Zwraca ciąg, który reprezentuje bieżącego obiektu. (Odziedziczone z Object).

Początek

Uwagi

Wstawki kodu programu jest szablon, który jest rozwinięte w pełny kod, gdy użytkownik wstawia urywka.Po rozwinięciu urywka Visual Studio podstawowy edytor wprowadzi specjalnego szablonu, w trybie edycji, gdzie można modyfikować urywka w miejscu.Oznacza to, że niektóre części urywka są wyznaczone jako pola i tych pól można łatwo zmienić przez użytkownika przed urywka, jest zobowiązana do buforu edytora.Pola są wyróżnione i promować rozwijanych oferowania opcji użytkownikowi.

Urywek ma nazwę identyfikującą go i zawierające urywka, sam plik szablonu.Plik szablonu zawiera tagi języka XML, wskazując określone elementy szablonu, z kodu do pól zastępczych do funkcji (znany jako rozszerzenia funkcji).Zobacz Wstawki kodu programu więcej szczegółów na temat wstawki kodu programu.

Uwagi dotyczące implementacji

ExpansionProvider Klasy zapewnia pomocy technicznej do zaznaczania i wstawienie wstawki kodu programu do pliku źródłowego.Klasa bazowa zapewnia wszystkie podstawowe funkcje; Jednakże jeśli chcesz obsługiwać kontekstową zajawek (to znaczy urywek o tej samej nazwie mogą zachowywać się różnie w zależności od kontekstu, do której jest wstawiane), musi pochodzić od klasy, a następnie ExpansionProvider klasy i zastąpić IsValidType i IsValidKind metody raportować urywek odpowiedni typ i rodzaj, które są dozwolone w szczególnym kontekście.Pamiętaj zastąpić CreateExpansionProvider metody w wersji LanguageService klasy, aby powrócić do wersji ExpansionProvider klasy.

Uwagi dotyczące wywoływania

Wystąpienie ExpansionProvider klasy jest zwracana z CreateExpansionProvider metodę w LanguageService klasy, która jest wywoływana z GetExpansionProvider metodę w Source klasy.ViewFilter Klasy wywołuje własną GetExpansionProvider która z kolei przesyła dalej wywołanie GetExpansionProvider metodę w Source klasy.ViewFilter Klasy wywołania GetExpansionProvider metody w dowolnym momencie polecenie jest wykonywane w celu umożliwienia ExpansionProvider klasy szansę na działanie.

Przykłady

Rozszerzenia są wstawiane na trzy sposoby:

  1. Przeglądarki urywka kodu

  2. Wybierając nazwę skrótu urywka z listy Zakończenie, lub

  3. Wpisując skrót i wprowadzając dokańczanie, takich jak tabulatorem lub spacją.

Poniższy przykład przedstawia sposób obsługi rozszerzeń auto wyzwalająca wpisując skrót rozszerzenia, a następnie naciśnięcie klawisza tab.Ta metoda jest wywoływana za każdym razem, gdy klawisz tab zostanie wpisany.

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

Bezpieczeństwo wątku

Wszystkie publiczne static (Shared w języku Visual Basic) elementy członkowskie tego typu są bezpieczne dla wątków. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.

Zobacz też

Informacje

Przestrzeń nazw Microsoft.VisualStudio.Package

Inne zasoby

Wstawki kodu programu

Odwołanie schematu wstawek kodu