ExpansionProvider Classe

Definição

Importante

Esta API não está em conformidade com CLS.

Fornece suporte para inserir trechos de código no código-fonte.

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
Herança
ExpansionProvider
Atributos
Implementações

Exemplos

As expansões são inseridas de três maneiras:

  1. O navegador de trechos de código,

  2. Selecionando um nome de atalho de trecho de código de uma lista de conclusão ou

  3. Digitando um atalho e inserindo um caractere de conclusão, como uma Tabulação ou um espaço.

O exemplo a seguir mostra uma maneira de lidar com a expansão automática que é disparada digitando um atalho de expansão seguido pela tecla Tab. Esse método é chamado toda vez que uma tecla Tab é digitada.

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

Comentários

Um trecho de código é um modelo que é expandido em código completo quando o usuário insere o trecho. Quando o trecho de código é expandido pela primeira vez, o Visual Studio Editor de núcleo entra em um modo de edição de modelo especial em que o trecho pode ser modificado em vigor. Ou seja, determinadas partes do trecho são designadas como campos, e esses campos podem ser facilmente alterados pelo usuário antes de o trecho ser confirmado no buffer do editor. Os campos são realçados e as caixas suspensas de recursos podem oferecer opções para o usuário.

Um trecho de código tem um nome para identificá-lo e um arquivo de modelo que contém o próprio trecho de código. O arquivo de modelo contém marcas XML que indicam elementos específicos do modelo, do código para campos de substituição a funções (conhecidas como funções de expansão). Consulte trechos de código para obter mais detalhes sobre trechos de código.

Notas aos Herdeiros

A ExpansionProvider classe fornece todo o suporte para selecionar e inserir um trecho de código em um arquivo de origem. A classe base fornece toda a funcionalidade básica; no entanto, se você quiser oferecer suporte à inserção de trecho contextual (ou seja, um trecho com o mesmo nome pode se comportar de forma diferente dependendo do contexto no qual ele é inserido), você deve derivar uma classe da ExpansionProvider classe e substituir os IsValidType(IVsTextLines, TextSpan[], String[], Int32, Int32) IsValidKind(IVsTextLines, TextSpan[], String, Int32) métodos e para relatar o tipo de trecho apropriado e o tipo que são permitidos em um contexto específico. Certifique-se de substituir o CreateExpansionProvider(Source) método em sua versão da LanguageService classe para retornar a versão da ExpansionProvider classe.

Notas aos Chamadores

Uma instância da ExpansionProvider classe é retornada do CreateExpansionProvider(Source) método na LanguageService classe que é chamada a partir do GetExpansionProvider() método na Source classe. A ViewFilter classe chama sua própria GetExpansionProvider() que, por sua vez, encaminha a chamada para o GetExpansionProvider() método na Source classe. A ViewFilter classe chama o GetExpansionProvider() método sempre que um comando é executado para permitir que a classe tenha a ExpansionProvider chance de agir.

Construtores

ExpansionProvider(Source)

Inicializa uma nova instância da classe ExpansionProvider.

Propriedades

Expansion

Retorna o IVsExpansion objeto usado para inserir trechos em um buffer.

ExpansionSession

Retorna a sessão de expansão criada para gerenciar a edição do trecho de código.

InTemplateEditingMode

Indica se o trecho de código está sendo editado no momento.

Source

Retorna o Source objeto associado a este provedor de expansão.

TextView

Retorna a exibição de texto que contém o arquivo de origem que está sendo manipulado pelo provedor de expansão.

Métodos

BeginTemplateEditing(Int32, Int32)

Insere o trecho de código preparado anteriormente e inicia o modo de edição de trecho.

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

Exibe uma lista de modelos de expansão do tipo especificado e do tipo.

Dispose()

Limpa o recurso alocado logo antes de o ExpansionProvider objeto ser destruído.

EndExpansion()

Chamado quando uma sessão de expansão termina.

EndTemplateEditing(Boolean)

Encerra o modo de edição do trecho atual.

Finalize()

Limpa todos os recursos logo antes de o ExpansionProvider objeto ser destruído.

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

Obtém o caminho e o título de um trecho de código dado o nome do atalho do trecho.

FormatSpan(IVsTextLines, TextSpan[])

Formata o intervalo de texto especificado.

GetExpansionFunction(IXMLDOMNode, String, IVsExpansionFunction)

Retorna um IVsExpansionFunction objeto que representa a função de expansão descrita no nó de modelo XML fornecido (implementação com).

GetExpansionFunction(XmlElement, String)

Retorna um IVsExpansionFunction objeto que representa a função de expansão descrita no nó de modelo XML fornecido.

GetExpansionSpan()

Retorna a extensão ocupada pelo trecho que está sendo editado no momento.

GetFieldSpan(String, TextSpan)

Obtém a extensão de campo do campo especificado

GetFieldValue(String, String)

Retorna o valor do campo especificado.

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

Chamado após a execução de um comando.

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

Chamado antes da execução de um comando.

HandleQueryStatus(Guid, UInt32, Int32)

Determina se o comando especificado é manipulado pela ExpansionProvider classe.

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

Insere o trecho de código especificado na fonte na posição especificada.

InsertSpecificExpansion(IVsTextView, XmlElement, TextSpan, String)

Insere o trecho específico na origem na posição especificada.

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

Determina se este é um texto válido para expansão. Esse método deve ser substituído se você quiser especificar o local no documento de origem que a expansão pode ocorrer.

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

Determina se um determinado tipo é válido para fins de expansão. Esse método deve ser substituído se você quiser especificar o local no documento de origem que a expansão pode ocorrer.

OnAfterInsertion(IVsExpansionSession)

Chamado depois que um trecho de código foi inserido na origem.

OnBeforeInsertion(IVsExpansionSession)

Chamado logo antes de o trecho ter sido inserido na origem.

OnItemChosen(String, String)

Chamado quando um item é escolhido em um navegador de trechos de código.

PositionCaretForEditing(IVsTextLines, TextSpan[])

Coloca o cursor em uma posição adequada para edição.

PrepareTemplate(String, String)

Prepara para a inserção do trecho especificado.

Aplica-se a