Classe ExpansionProvider
Fornisce supporto per inserire i frammenti di codice nel codice sorgente.
Questa API non è conforme a CLS.
Gerarchia di ereditarietà
System.Object
Microsoft.VisualStudio.Package.ExpansionProvider
Spazio dei nomi: Microsoft.VisualStudio.Package
Assembly: Microsoft.VisualStudio.Package.LanguageService.10.0 (in Microsoft.VisualStudio.Package.LanguageService.10.0.dll)
Microsoft.VisualStudio.Package.LanguageService (in Microsoft.VisualStudio.Package.LanguageService.dll)
Microsoft.VisualStudio.Package.LanguageService.9.0 (in Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
Microsoft.VisualStudio.Package.LanguageService.11.0 (in Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
Sintassi
'Dichiarazione
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Class ExpansionProvider _
Implements IDisposable, IVsExpansionClient
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public class ExpansionProvider : IDisposable,
IVsExpansionClient
Il tipo ExpansionProvider espone i seguenti membri.
Costruttori
Nome | Descrizione | |
---|---|---|
ExpansionProvider | Inizializza una nuova istanza di ExpansionProvider classe. |
In alto
Proprietà
Nome | Descrizione | |
---|---|---|
Expansion | restituisce IVsExpansion oggetto utilizzato per l'inserimento di frammenti in un buffer. | |
ExpansionSession | restituisce la sessione di espansione creata per gestire modificare il frammento di codice. | |
InTemplateEditingMode | Indica se il frammento di codice è attualmente in corso la modifica. | |
Source | restituisce Source oggetto associato a questo provider di espansione. | |
TextView | Restituisce la visualizzazione di testo che contiene il file di origine che viene modificato dal provider di espansione. |
In alto
Metodi
Nome | Descrizione | |
---|---|---|
BeginTemplateEditing | Inserisce il frammento di codice in precedenza preparato e avvia la modalità di modifica del frammento. | |
DisplayExpansionBrowser | Visualizza un elenco di modelli dell'espansione del tipo e il tipo specificato. | |
Dispose | Pulisce la risorsa assegnata solo prima ExpansionProvider l'oggetto viene eliminato. | |
EndExpansion | Chiamato quando una sessione di espansione è terminata. | |
EndTemplateEditing | Termina la modalità di modifica corrente del frammento. | |
Equals | Determina se l'oggetto specificato equivale all'oggetto corrente. (Ereditato da Object) | |
Finalize | Pulizia delle risorse prima ExpansionProvider l'oggetto viene eliminato. (Esegue l'override di Object.Finalize()). | |
FindExpansionByShortcut | Ottiene il percorso e il titolo di un frammento di codice fornito il nome del collegamento del frammento. | |
FormatSpan | formatta l'intervallo di testo specificato. | |
GetExpansionFunction(XmlElement, String) | restituisce IVsExpansionFunction oggetto che rappresenta la funzione di espansione descritta nel nodo specificato del modello XML. | |
GetExpansionFunction(IXMLDOMNode, String, IVsExpansionFunction%) | Restituisce un oggetto IVsExpansionFunction oggetto che rappresenta la funzione di espansione descritta nel nodo specificato del modello XML (implementazione COM). | |
GetExpansionSpan | Restituisce l'intervallo occupata dal frammento attualmente in corso di modifica. | |
GetFieldSpan | Ottiene l'intervallo di campo del campo specificato | |
GetFieldValue | Restituisce il valore del campo specificato. | |
GetHashCode | Funge da funzione hash per un determinato tipo. (Ereditato da Object) | |
GetType | Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) | |
HandlePostExec | chiamato dopo che un comando è stato eseguito. | |
HandlePreExec | Chiamata prima di un comando viene eseguito. | |
HandleQueryStatus | Determina se il comando specificato è gestito da ExpansionProvider classe. | |
InsertNamedExpansion | Inserisce il frammento specificato nel database di origine nella posizione specificata. | |
InsertSpecificExpansion | Inserisce il frammento specifico nel database di origine nella posizione specificata. | |
IsValidKind | Determina se questo testo è valido per espansione.Questo metodo deve essere sottoposto a override se si desidera specificare la posizione nel documento di origine l'espansione può aver luogo. | |
IsValidType | Determina se in un tipo specificato sia valido per scopi di espansione.Questo metodo deve essere sottoposto a override se si desidera specificare la posizione nel documento di origine l'espansione può aver luogo. | |
MemberwiseClone | Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object) | |
OnAfterInsertion | Chiamato dopo che un frammento di codice è stato inserito nel database di origine. | |
OnBeforeInsertion | Chiamato appena prima del frammento di codice è stato inserito nel database di origine. | |
OnItemChosen | Chiamato quando un elemento viene scelto in un browser del frammento. | |
PositionCaretForEditing | Posizionare il cursore in una posizione appropriata per modificare. | |
PrepareTemplate | Prepara per l'inserimento del frammento specificato. | |
ToString | Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
In alto
Note
Un frammento di codice è un modello che è espanso nel codice completo quando l'utente inserisce il frammento.quando il frammento è primo espanso, Visual Studio l'editor principale attiva la modalità di modifica dei modelli in cui il frammento può essere modificato sul posto.Ovvero alcune parti del frammento sono definite come campi e questi campi possono essere modificati dall'utente prima del frammento venga eseguito il commit nel buffer dell'editor.I campi sono evidenziati e possono funzionalità le caselle a discesa che offrono le opzioni all'utente.
Un frammento ha un nome per identificare e un file modello contenente il frammento stesso.Il file modello contiene i tag XML che indicano gli elementi specifici del modello, dal codice ai campi di sostituzione alle funzioni (dette l'espansione funziona).vedere Frammenti di codice per ulteriori informazioni sui frammenti di codice.
Note per gli implementatori
ExpansionProvider la classe fornisce il supporto per selezionare e a inserire un frammento di codice in un file di origine.La classe base fornisce tutte le funzionalità di base; tuttavia, se si desidera supportare l'inserimento sensibile al contesto del frammento (ovvero un frammento con lo stesso nome potrebbe avere un comportamento diverso a seconda del contesto in cui viene inserito), è necessario derivare una classe da IsValidKind classificare e override di IsValidType e di ExpansionProvider metodi per indicare il tipo e il tipo appropriati del frammento che sono consentiti in un contesto specifico.Assicurarsi di eseguire l'override CreateExpansionProvider metodo nella versione di LanguageService classe per restituire la versione di ExpansionProvider classe.
Note per i chiamanti
Un'istanza di ExpansionProvider la classe viene restituita da CreateExpansionProvider metodo in LanguageService classe che viene chiamato dal GetExpansionProvider metodo in Source classe.ViewFilter la classe chiama il proprio GetExpansionProvider che a sua volta inoltra la chiamata a GetExpansionProvider metodo in Source classe.ViewFilter la classe chiama GetExpansionProvider metodo ogni volta un comando viene eseguito consentire ExpansionProvider classe una probabilità agire.
Esempi
Le espansioni vengono inserite in tre modi:
Il browser del frammento di codice,
Selezionare un nome di collegamento del frammento da un elenco di completamento, o
Digitando un collegamento e fornendo un carattere di terminazione come una scheda o uno spazio.
Nell'esempio seguente viene illustrato un modo per gestire l'auto-espansione che viene attivata digitando un collegamento di espansione TAB.Questo metodo viene chiamato ogni volta che un tasto TAB è dichiarato.
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);
}
}
}
Codice thread safe
Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.
Vedere anche
Riferimenti
Spazio dei nomi Microsoft.VisualStudio.Package