ExpansionProvider, classe
Fournit la prise en charge d'insérer des extraits de code dans code source.
Cette API n'est pas conforme CLS.
Hiérarchie d'héritage
System.Object
Microsoft.VisualStudio.Package.ExpansionProvider
Espace de noms : Microsoft.VisualStudio.Package
Assemblys : Microsoft.VisualStudio.Package.LanguageService.10.0 (dans Microsoft.VisualStudio.Package.LanguageService.10.0.dll)
Microsoft.VisualStudio.Package.LanguageService (dans Microsoft.VisualStudio.Package.LanguageService.dll)
Microsoft.VisualStudio.Package.LanguageService.9.0 (dans Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
Microsoft.VisualStudio.Package.LanguageService.11.0 (dans Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
Syntaxe
'Déclaration
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public Class ExpansionProvider _
Implements IDisposable, IVsExpansionClient
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public class ExpansionProvider : IDisposable,
IVsExpansionClient
Le type ExpansionProvider expose les membres suivants.
Constructeurs
Nom | Description | |
---|---|---|
ExpansionProvider | Initialise une nouvelle instance de la classe ExpansionProvider. |
Début
Propriétés
Nom | Description | |
---|---|---|
Expansion | Retourne l'objet d'IVsExpansion utilisé pour insérer des extraits de code dans une mémoire tampon. | |
ExpansionSession | Retourne la session d'expansion créée pour gérer modifier l'extrait de code. | |
InTemplateEditingMode | Indique si l'extrait de code actuellement est modifié. | |
Source | Retourne l'objet d'Source associé à ce fournisseur d'expansion. | |
TextView | Retourne l'affichage de texte contenant le fichier source manipulé par le fournisseur d'expansion. |
Début
Méthodes
Nom | Description | |
---|---|---|
BeginTemplateEditing | Insère l'extrait de code au préalable préparé et démarre le mode de modification d'extrait de code. | |
DisplayExpansionBrowser | Affiche une liste de modèles d'expansion du type et du type spécifiés. | |
Dispose | Nettoie la ressource allouée juste avant que l'objet d'ExpansionProvider soit détruit. | |
EndExpansion | Appelé lorsqu'une session d'expansion s'est terminée. | |
EndTemplateEditing | Termine le mode de modification actuel d'extrait de code. | |
Equals | Détermine si l'objet Object spécifié est égal à l'objet Object actuel. (Hérité de Object.) | |
Finalize | Nettoie toutes les ressources juste avant que l'objet d'ExpansionProvider soit détruit. (Substitue Object.Finalize().) | |
FindExpansionByShortcut | Obtient le chemin d'accès et le titre d'un extrait de code donné le nom du raccourci de l'extrait de code. | |
FormatSpan | Met en forme l'étendue de texte spécifiée. | |
GetExpansionFunction(XmlElement, String) | Retourne un objet d'IVsExpansionFunction représentant la fonction d'expansion décrite dans le nœud donné de modèle de XML. | |
GetExpansionFunction(IXMLDOMNode, String, IVsExpansionFunction%) | Retourne un objet d'IVsExpansionFunction représentant la fonction d'expansion décrite dans le nœud donné de modèle de XML (implémentation de COM). | |
GetExpansionSpan | Retourne l'étendue occupée par l'extrait de code actuellement étant modifié. | |
GetFieldSpan | Obtient l'étendue de champ du champ spécifié | |
GetFieldValue | Retourne la valeur du champ spécifié. | |
GetHashCode | Sert de fonction de hachage pour un type particulier. (Hérité de Object.) | |
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) | |
HandlePostExec | Appelé après qu'une commande ait été exécutée. | |
HandlePreExec | Appelé avant une commande est exécuté. | |
HandleQueryStatus | Détermine si la commande spécifiée est gérée par la classe d'ExpansionProvider. | |
InsertNamedExpansion | Insère l'extrait de code spécifié dans la source à la position donnée. | |
InsertSpecificExpansion | Insère l'extrait de code spécifique dans la source à la position spécifiée. | |
IsValidKind | Détermine si ce est texte valide pour l'expansion.Cette méthode doit être substituée si vous souhaitez spécifier où dans le document source l'expansion peut avoir lieu. | |
IsValidType | Détermine si un type donné est valide pour l'expansion.Cette méthode doit être substituée si vous souhaitez spécifier où dans le document source l'expansion peut avoir lieu. | |
MemberwiseClone | Crée une copie superficielle de l'objet Object actuel. (Hérité de Object.) | |
OnAfterInsertion | Appelé après un extrait de code a été inséré dans la source. | |
OnBeforeInsertion | Appelé juste avant l'extrait de code a été inséré dans la source. | |
OnItemChosen | Appelé lorsqu'un élément est choisi dans un navigateur d'extrait de code. | |
PositionCaretForEditing | Place le signe insertion dans une position appropriée pour modifier. | |
PrepareTemplate | Prépare à la mise en place de l'extrait de code spécifié. | |
ToString | Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.) |
Début
Remarques
Un extrait de code est un modèle qui est développé dans code complet lorsque l'utilisateur insère l'extrait de code.Lorsque l'extrait de code est développé premier, l'éditeur du cœur de Visual Studio écrit un mode de modification de modèle spécial où l'extrait de code peut être modifié en place.Autrement dit, certaines parties de l'extrait de code sont indiquées en tant que champs, et ces champs peuvent facilement être modifiés par l'utilisateur avant que l'extrait de code soit validé à la mémoire tampon de l'éditeur.Les champs sont mis en surbrillance et peuvent comporter des zones déroulantes offrant des choix à l'utilisateur.
Un extrait de code a un nom pour identifier un et un fichier modèle contenant l'extrait de code lui-même.Le fichier modèle contient des balises de XML indiquant les éléments spécifiques du modèle de code, aux champs de substitution aux fonctions (appelé des fonctions d'expansion).Consultez Extraits de code pour plus de détails sur des extraits de code.
Remarques à l'attention des implémenteurs
La classe d'ExpansionProvider tout fournit la prise en charge de sélectionner et d'insérer un extrait de code dans un fichier source.La classe de base fournit toute la fonctionnalité de base ; toutefois, si vous souhaitez prendre en charge la mise en place contextuelle d'extrait de code (autrement dit, un extrait de code avec le même nom peut se comporter différemment selon le contexte dans lequel il est inséré), vous devez dériver une classe de la classe d'ExpansionProvider et substituer l'IsValidType et les méthodes d'IsValidKind pour stocker le type et le type appropriés d'extrait de code qui sont autorisés dans un contexte particulier.Assurez -vous de substituer la méthode d'CreateExpansionProvider dans votre version de la classe d'LanguageService pour retourner votre version de la classe d'ExpansionProvider.
Remarques à l'attention des appelants
Une instance de la classe d'ExpansionProvider est retournée de la méthode d'CreateExpansionProvider dans la classe d'LanguageService qui est appelée de la méthode d'GetExpansionProvider dans la classe d'Source.La classe d'ViewFilter appelle son propre GetExpansionProvider faisant suivre ensuite à l'appel la méthode d'GetExpansionProvider dans la classe d'Source.La classe d'ViewFilter appelle la méthode d'GetExpansionProvider lorsqu'une commande est exécutée de permettre à la classe d'ExpansionProvider la possibilité d'agir.
Exemples
Les expansions sont insérées de trois façons :
Le navigateur d'extrait de code,
Sélectionner un nom de raccourci d'extrait de code d'une liste de saisie semi-automatique, ou
En tapant un raccourci et en écrivant un personnage d'achèvement tel qu'un onglet ou un espace.
L'exemple suivant montre une façon de gérer l'automobile-expansion qui est déclenchée en tapant un raccourci d'expansion suivi de la touche TAB.Cette méthode est appelée chaque fois qu'une touche TAB est tapée.
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);
}
}
}
Sécurité des threads
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Voir aussi
Référence
Microsoft.VisualStudio.Package, espace de noms