Editeur C # / VB.Net intégré avec intellisense – Roslyn, VSTA ou autre chose?

Je dois fournir des fonctionnalités de script au sein de mon application, permettant aux clients d’étendre ses fonctionnalités à l’aide de notre modèle object. J’espérais proposer une sorte d’éditeur intégré C # / VB.Net avec intellisense, mais après avoir examiné des produits tels que AvalonEdit et ScintillaNet, ils ne semblent pas fournir un véritable traitement de code, mais juste une API où vous pouvez fournir votre propre liste. des éléments à afficher dans la liste déroulante à complétion automatique.

Je me demandais donc si Roslyn fournissait de telles fonctionnalités? D’après les tutoriels et les exemples que j’ai rencontrés, il apparaît que Roslyn n’est en réalité qu’un service de compilation.

En dernier recours, les clients pourraient utiliser quelque chose comme VS Express, mais un éditeur intégré est évidemment un peu plus agréable.

(J’ai aussi rencontré Visual Studio Tools pour Applications, ce qui semblait prometteur. Cependant, les ressources en ligne datent de plusieurs années et la documentation / didacticiels inexistants. J’ai donc tracé un blanc avec celui-ci).

Je ne suis certainement pas un expert dans ce domaine. Mais comme vous n’avez pas reçu d’autres réponses, je vais essayer.

Je pense que la réponse courte est “oui”.

En regardant le code dans AvalonEdit et SharpDevelop, il apparaît que la complétion de code est l’une des parties les plus difficiles. Essentiellement, vous devez écrire un compilateur (ou un parsingur, de toute façon) pour déterminer quels éléments doivent figurer sur la liste d’achèvement. Il semble que Roslyn fournit des outils pour construire la liste de complétion. Dans les versions antérieures, ces outils étaient liés à l’éditeur de VS, mais j’ai vu des déclarations affirmant qu’ils étaient indépendants dans la dernière version. Si tel est le cas, ces outils seront très utiles pour implémenter la complétion de code.

Je n’ai pas vraiment examiné les détails, mais j’ai l’intention de le faire, car j’ai les mêmes objectives que vous, et Roslyn semble pouvoir vous aider (sur la base de ce que je sais jusqu’à présent, ce qui n’est pas beaucoup ).

Vous avez fait une affirmation très intéressante selon laquelle “après avoir examiné des produits comme AvalonEdit, SharpDevelop et ScintillaNet, ils ne semblent pas fournir un véritable intellisense de complétion de code”. SharpDevelop est un IDE complet, et pourquoi ne trouvez-vous pas le “véritable” achèvement de code Intellisense? Vous devrez fournir des preuves ou cette déclaration sera invalide.

Ce que vous voulez réaliser ne peut être réalisé qu’avec deux composants importants:

  • Un parsingur de langage, avec lequel vous pouvez obtenir un contexte et des éléments pour compléter le code. C’est ce que propose Roslyn, mais Roslyn n’est pas encore assez mature pour parsingr toute la syntaxe C # existante. SharpDevelop (ainsi que MonoDevelop) utilise NRefactory , qui sert le même objective.

  • Un élément d’interface utilisateur qui prend en charge la coloration syntaxique. Ceci peut être réalisé avec AvalonEdit ou ScintillaNet en fonction du framework d’interface utilisateur choisi.

Visual Studio Shell peut vous aider, comme l’a souligné @Mystere Man. Mais personnellement, je ne sais pas grand chose à ce sujet.

J’ai vraiment essayé d’utiliser l’un de ces composants intégrés, mais j’ai fini par en implémenter un moi-même. Après une journée passée à explorer RichTextBox api, vous pouvez facilement construire ce support. Il suffit de jouer avec PreviewKeyDown / Up et de s’assurer qu’un lot de travail est exécuté avec le support d’annulation, etc.