Condividi tramite


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
Metodo pubblico ExpansionProvider Inizializza una nuova istanza di ExpansionProvider classe.

In alto

Proprietà

  Nome Descrizione
Proprietà pubblica Expansion restituisce IVsExpansion oggetto utilizzato per l'inserimento di frammenti in un buffer.
Proprietà pubblica ExpansionSession restituisce la sessione di espansione creata per gestire modificare il frammento di codice.
Proprietà pubblica InTemplateEditingMode Indica se il frammento di codice è attualmente in corso la modifica.
Proprietà pubblica Source restituisce Source oggetto associato a questo provider di espansione.
Proprietà pubblica TextView Restituisce la visualizzazione di testo che contiene il file di origine che viene modificato dal provider di espansione.

In alto

Metodi

  Nome Descrizione
Metodo pubblico BeginTemplateEditing Inserisce il frammento di codice in precedenza preparato e avvia la modalità di modifica del frammento.
Metodo pubblico DisplayExpansionBrowser Visualizza un elenco di modelli dell'espansione del tipo e il tipo specificato.
Metodo pubblico Dispose Pulisce la risorsa assegnata solo prima ExpansionProvider l'oggetto viene eliminato.
Metodo pubblico EndExpansion Chiamato quando una sessione di espansione è terminata.
Metodo pubblico EndTemplateEditing Termina la modalità di modifica corrente del frammento.
Metodo pubblico Equals Determina se l'oggetto specificato equivale all'oggetto corrente. (Ereditato da Object)
Metodo protetto Finalize Pulizia delle risorse prima ExpansionProvider l'oggetto viene eliminato. (Esegue l'override di Object.Finalize()).
Metodo pubblico FindExpansionByShortcut Ottiene il percorso e il titolo di un frammento di codice fornito il nome del collegamento del frammento.
Metodo pubblico FormatSpan formatta l'intervallo di testo specificato.
Metodo pubblico GetExpansionFunction(XmlElement, String) restituisce IVsExpansionFunction oggetto che rappresenta la funzione di espansione descritta nel nodo specificato del modello XML.
Metodo pubblico GetExpansionFunction(IXMLDOMNode, String, IVsExpansionFunction%) Restituisce un oggetto IVsExpansionFunction oggetto che rappresenta la funzione di espansione descritta nel nodo specificato del modello XML (implementazione COM).
Metodo pubblico GetExpansionSpan Restituisce l'intervallo occupata dal frammento attualmente in corso di modifica.
Metodo pubblico GetFieldSpan Ottiene l'intervallo di campo del campo specificato
Metodo pubblico GetFieldValue Restituisce il valore del campo specificato.
Metodo pubblico GetHashCode Funge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblico GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblico HandlePostExec chiamato dopo che un comando è stato eseguito.
Metodo pubblico HandlePreExec Chiamata prima di un comando viene eseguito.
Metodo pubblico HandleQueryStatus Determina se il comando specificato è gestito da ExpansionProvider classe.
Metodo pubblico InsertNamedExpansion Inserisce il frammento specificato nel database di origine nella posizione specificata.
Metodo pubblico InsertSpecificExpansion Inserisce il frammento specifico nel database di origine nella posizione specificata.
Metodo pubblico 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.
Metodo pubblico 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.
Metodo protetto MemberwiseClone Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblico OnAfterInsertion Chiamato dopo che un frammento di codice è stato inserito nel database di origine.
Metodo pubblico OnBeforeInsertion Chiamato appena prima del frammento di codice è stato inserito nel database di origine.
Metodo pubblico OnItemChosen Chiamato quando un elemento viene scelto in un browser del frammento.
Metodo pubblico PositionCaretForEditing Posizionare il cursore in una posizione appropriata per modificare.
Metodo pubblico PrepareTemplate Prepara per l'inserimento del frammento specificato.
Metodo pubblico 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:

  1. Il browser del frammento di codice,

  2. Selezionare un nome di collegamento del frammento da un elenco di completamento, o

  3. 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

Altre risorse

Frammenti di codice

Riferimento dello schema dei frammenti di codice