Liste de vérification : Créer un service de langage
La liste de vérification suivante résume les étapes de base que vous devez entrer à nouveau la commande pour créer un service de langage pour l'éditeur principal de Visual Studio . Pour intégrer votre service de langage dans Visual Studio, vous devez créer un évaluateur d'expression de débogage. Pour plus d'informations, consultez Écrire un évaluateur d'expression du common langage runtime dans Extensibilité du débogueur Visual Studio.
Étapes pour créer un service de langage
Implémenter l'interface IVsPackage.
Dans votre VSPackage, implémentez l'interface d' IServiceProvider pour fournir le service de langage.
Rendez votre service de langage disponible à l'environnement (IDE) de développement intégré dans votre implémentation d' SetSite .
Implémentez l'interface d' IVsLanguageInfo dans la classe principale de service de langage.
L'interface d' IVsLanguageInfo est le point de départ d'interaction entre l'éditeur principal et le service de langage.
Fonctionnalités facultatives
Les fonctionnalités suivantes sont facultatives et peuvent être implémentées dans n'importe quel ordre. Ces fonctionnalités augmentent la fonctionnalité de votre service de langage.
coloration de syntaxe
Implémenter l'interface IVsColorizer. Votre implémentation de cette interface si les informations d'analyseur retournent des informations sur la couleur appropriées.
La méthode d' GetColorizer retourne l'interface d' IVsColorizer . Une instance séparée de coloriseur est créée pour chaque mémoire tampon de texte, vous devez implémenter l'interface d' IVsColorizer séparément. Pour plus d'informations, consultez coloration de syntaxe.
fenêtre de code
Implémentez l'interface d' IVsCodeWindowManager pour permettre au service de langage pour recevoir la notification de lorsqu'une nouvelle fenêtre de code est créée.
La méthode d' GetCodeWindowManager retourne l'interface d' IVsCodeWindowManager . Le service de langage peut ensuite ajouter l'une interface utilisateur spéciale à la fenêtre de code dans AddAdornments. Le service de langage peut également effectuer un traitement spécial, par exemple ajouter un filtre d'affichage de texte dans l' OnNewView.
filtre d'affichage de texte
Pour fournir la saisie semi-automatique des instructions Intellisense dans un service de langage, vous devez désactiver certaines commandes que l'affichage de texte ' sinon. Pour arrêter ces commandes, exécutez les étapes suivantes :
Implémentez IOleCommandTarget de participer aux touches de modification de chaîne et de handle de commande.
Appelez la méthode d' AddCommandFilter et passez votre implémentation d' IOleCommandTarget .
Appelez la méthode d' RemoveCommandFilter lorsque vous détachez de la vue afin que ces commandes ne soient plus passées à vous.
Les commandes qui doivent être gérées dépendent des services fournis. Pour plus d'informations, consultez Commandes importantes pour les filtres de service de langage.
Notes
l'interface d' IVsTextViewFilter doit être implémentée sur le même objet que l'interface d' IOleCommandTarget .
Saisie semi-automatique des instructions
Implémenter l'interface IVsCompletionSet.
Prend en charge la commande de saisie semi-automatique des instructions (autrement dit, COMPLETEWORD) et appelez la méthode d' UpdateCompletionStatus dans l'interface d' IVsTextView , en passant l'interface d' IVsCompletionSet . Pour plus d'informations, consultez saisie semi-automatique des instructions.
conseils de méthode
Implémentez l'interface d' IVsMethodData pour fournir des données pour la fenêtre de conseils de méthode.
Installez le filtre d'affichage de texte pour gérer les commandes correctement, afin que vous sachiez lorsque l'affichage d'une fenêtre de conseils de données de méthode. Pour plus d'informations, consultez Info-bulles des informations sur les paramètres.
Marqueurs d'erreurs
Implémenter l'interface IVsTextMarkerClient.
Créez les objets de marque d'erreurs qui implémentent l'interface d' IVsTextMarkerClient et appelez la méthode d' CreateLineMarker , en passant l'interface d' IVsTextMarkerClient de l'objet de marque d'erreurs.
En général chaque point d'erreurs gère un élément dans la fenêtre liste des tâches.
éléments de la liste des tâches
implémentez une classe de tâche fournissant l'interface d' IVsTaskItem .
implémentez une classe de fournisseur de tâche fournissant l'interface d' IVsTaskProvider et l'interface d' IVsTaskProvider2 .
implémentez une classe d'énumérateur de tâche fournissant l'interface d' IVsEnumTaskItems .
Enregistrer le fournisseur de tâche avec la méthode de l' RegisterTaskProvider de la liste des tâches.
Obtenez l'interface d' IVsTaskList en appelant le fournisseur de services du service de langage avec le service GUID SVsTaskList.
Créez les objets de tâche et appelez la méthode d' RefreshTasks dans l'interface d' IVsTaskList lorsqu'il existe de nouvelles ou mises à jour tâches.
Commentaires
Utilisez l'interface d' IVsCommentTaskInfo et l'interface d' IVsEnumCommentTaskTokens pour obtenir les jetons de commentaire.
obtenez une interface d' IVsCommentTaskInfo du service d' SVsTaskList .
obtenez l'interface d' IVsEnumCommentTaskTokens de la méthode d' EnumTokens .
Implémentez l'interface d' IVsTaskListEvents pour écouter les modifications dans la liste de jetons.
Mode Plan
Il existe plusieurs options pour prendre en charge le mode Plan. Par exemple, vous pouvez prendre en charge la commande de Réduire aux définitions , fournir les régions en mode Plan contrôlées par l'éditeur, ou pour prendre en charge les régions client-contrôlées. Pour plus d'informations, consultez Comment : Fournissez la prise en charge étendue du mode Plan.
Inscription de service de langage
Pour plus d'informations sur l'enregistrement d'un service de langage, consultez Enregistrer un service de langage et le chargement VSPackages.
aide contextuelle
Fournissez le contexte à l'éditeur de l'une des façons suivantes :
- Fournissez le contexte pour les marqueurs de texte en implémentant l'interface d' IVsTextMarkerContextProvider .
Fournissez tout le contexte d'utilisateur en implémentant l'interface d' IVsLanguageContextProvider .