ExpansionProvider Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
O navegador de trechos de código,
Selecionando um nome de atalho de trecho de código de uma lista de conclusão ou
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. |