Partager via


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
Méthode publique ExpansionProvider Initialise une nouvelle instance de la classe ExpansionProvider.

Début

Propriétés

  Nom Description
Propriété publique Expansion Retourne l'objet d'IVsExpansion utilisé pour insérer des extraits de code dans une mémoire tampon.
Propriété publique ExpansionSession Retourne la session d'expansion créée pour gérer modifier l'extrait de code.
Propriété publique InTemplateEditingMode Indique si l'extrait de code actuellement est modifié.
Propriété publique Source Retourne l'objet d'Source associé à ce fournisseur d'expansion.
Propriété publique TextView Retourne l'affichage de texte contenant le fichier source manipulé par le fournisseur d'expansion.

Début

Méthodes

  Nom Description
Méthode publique BeginTemplateEditing Insère l'extrait de code au préalable préparé et démarre le mode de modification d'extrait de code.
Méthode publique DisplayExpansionBrowser Affiche une liste de modèles d'expansion du type et du type spécifiés.
Méthode publique Dispose Nettoie la ressource allouée juste avant que l'objet d'ExpansionProvider soit détruit.
Méthode publique EndExpansion Appelé lorsqu'une session d'expansion s'est terminée.
Méthode publique EndTemplateEditing Termine le mode de modification actuel d'extrait de code.
Méthode publique Equals Détermine si l'objet Object spécifié est égal à l'objet Object actuel. (Hérité de Object.)
Méthode protégée Finalize Nettoie toutes les ressources juste avant que l'objet d'ExpansionProvider soit détruit. (Substitue Object.Finalize().)
Méthode publique 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.
Méthode publique FormatSpan Met en forme l'étendue de texte spécifiée.
Méthode publique 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.
Méthode publique 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).
Méthode publique GetExpansionSpan Retourne l'étendue occupée par l'extrait de code actuellement étant modifié.
Méthode publique GetFieldSpan Obtient l'étendue de champ du champ spécifié
Méthode publique GetFieldValue Retourne la valeur du champ spécifié.
Méthode publique GetHashCode Sert de fonction de hachage pour un type particulier. (Hérité de Object.)
Méthode publique GetType Obtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publique HandlePostExec Appelé après qu'une commande ait été exécutée.
Méthode publique HandlePreExec Appelé avant une commande est exécuté.
Méthode publique HandleQueryStatus Détermine si la commande spécifiée est gérée par la classe d'ExpansionProvider.
Méthode publique InsertNamedExpansion Insère l'extrait de code spécifié dans la source à la position donnée.
Méthode publique InsertSpecificExpansion Insère l'extrait de code spécifique dans la source à la position spécifiée.
Méthode publique 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.
Méthode publique 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.
Méthode protégée MemberwiseClone Crée une copie superficielle de l'objet Object actuel. (Hérité de Object.)
Méthode publique OnAfterInsertion Appelé après un extrait de code a été inséré dans la source.
Méthode publique OnBeforeInsertion Appelé juste avant l'extrait de code a été inséré dans la source.
Méthode publique OnItemChosen Appelé lorsqu'un élément est choisi dans un navigateur d'extrait de code.
Méthode publique PositionCaretForEditing Place le signe insertion dans une position appropriée pour modifier.
Méthode publique PrepareTemplate Prépare à la mise en place de l'extrait de code spécifié.
Méthode publique 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 :

  1. Le navigateur d'extrait de code,

  2. Sélectionner un nom de raccourci d'extrait de code d'une liste de saisie semi-automatique, ou

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

Autres ressources

Extraits de code

Référence de schéma des extraits de code