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 | |
---|---|---|
ExpansionProvider | Inicjuje nowe wystąpienie ExpansionProvider klasy. |
Początek
Właściwości
Nazwa | Opis | |
---|---|---|
Expansion | Zwraca IVsExpansion obiekt używany do wstawiania urywków do buforu. | |
ExpansionSession | Zwraca sesji rozszerzeń utworzona w celu zarządzania Edytowanie wstawki kodu programu. | |
InTemplateEditingMode | Wskazuje, czy wstawki kodu programu jest aktualnie edytowana. | |
Source | Zwraca Source obiektu skojarzonego z tym dostawcą rozszerzenia. | |
TextView | Zwraca widoku tekst zawierający przetwarzane przez dostawcę rozszerzenia pliku źródłowego. |
Początek
Metody
Nazwa | Opis | |
---|---|---|
BeginTemplateEditing | Wstawia urywek kodu uprzednio przygotowany i rozpoczyna urywka, w trybie edycji. | |
DisplayExpansionBrowser | Wyświetla listę rozszerzeń szablonów określony typ i rodzaj. | |
Dispose | Czyści przydzielonego zasobu tuż przed ExpansionProvider niszczony jest obiekt. | |
EndExpansion | Wywoływane, gdy rozszerzenia sesja została zakończona. | |
EndTemplateEditing | Kończy bieżące urywek tryb edycji. | |
Equals | Określa, czy określony obiekt jest równa bieżącego obiektu. (Odziedziczone z Object). | |
Finalize | Czyści wszystkie zasoby tuż przed ExpansionProvider niszczony jest obiekt. (Zastępuje Object.Finalize()). | |
FindExpansionByShortcut | Uzyskuje ścieżka i nazwa nadawana nazwa skrótu urywek wstawki kodu programu. | |
FormatSpan | Formaty zakres określony tekst. | |
GetExpansionFunction(XmlElement, String) | Zwraca IVsExpansionFunction obiekt reprezentujący funkcji rozszerzeń opisany w danym węźle szablon XML. | |
GetExpansionFunction(IXMLDOMNode, String, IVsExpansionFunction%) | Zwraca IVsExpansionFunction obiekt reprezentujący funkcji rozszerzeń opisany w danym węźle szablon XML (wykonanie COM). | |
GetExpansionSpan | Zwraca zakres zajmowanych przez urywka, aktualnie edytowana. | |
GetFieldSpan | Pobiera pola zakres określonego pola | |
GetFieldValue | Zwraca wartość określonego pola. | |
GetHashCode | Służy jako funkcja mieszania dla określonego typu. (Odziedziczone z Object). | |
GetType | Pobiera Type bieżącej instancji. (Odziedziczone z Object). | |
HandlePostExec | Wywoływana po wykonaniu polecenia. | |
HandlePreExec | Wywoływana przed wykonaniem polecenia. | |
HandleQueryStatus | Określa, jeżeli określone polecenie jest obsługiwane przez ExpansionProvider klasy. | |
InsertNamedExpansion | Wstawia urywek określonego źródła w danym miejscu. | |
InsertSpecificExpansion | Wstawia urywek określonego źródła w określonym położeniu. | |
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. | |
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. | |
MemberwiseClone | Tworzy kopię płytkie bieżące Object. (Odziedziczone z Object). | |
OnAfterInsertion | Wywoływana po urywek zostało wstawione do źródła. | |
OnBeforeInsertion | Wywoływana tuż przed urywka zostało wstawione do źródła. | |
OnItemChosen | Wywoływane, gdy zostanie wybrany element w przeglądarce urywek. | |
PositionCaretForEditing | Powoduje umieszczenie kursora w pozycji nadające się do edycji. | |
PrepareTemplate | Przygotowuje się do wstawiania urywków określony. | |
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:
Przeglądarki urywka kodu
Wybierając nazwę skrótu urywka z listy Zakończenie, lub
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