Question

J'espère que c'est une question valide: comment intellisense fonctionne-t-il dans VS2008? Je cherche ce que l’on sait de l’algorithme utilisé pour trouver les suggestions, quand il apparaît exactement (le "." N’est qu’un déclencheur évident), comment son comportement peut être modifié si possible, etc.

Pour placer cette question dans son contexte: le problème principal que je tente de résoudre est de savoir comment activer et désactiver intellisense dans certaines parties de l'écran de l'éditeur et comment modifier l'endroit où il cherche pour remplir la boîte à suggestions.

Toutes les informations sont les bienvenues.

Était-ce utile?

La solution

Consultez cet article DIY Intellisense sur CodeProject.

Autres conseils

Cependant, il est plus amusant de procéder à une ingénierie inverse. Considérons le problème:

  • vous devez identifier les mots qui vous intéressent
  • vous devez trouver les options possibles
  • vous devez les présenter

La première étape signifie que vous devez analyser le code. Vous avez les mots-clés C / C **, vous pré-analysez les différentes déclarations de fonctions et de classes, puis vous les chargez dans une sorte de structure de données. Ensuite, vous analysez le code et stockez les noms de classe, de variable, etc. et les placez dans la même structure de données.

La deuxième étape signifie que vous voulez une structure de données qui peut efficacement rechercher un mot partiel et obtenir tous les mots qui ont ce préfixe. Vous pouvez faire cela avec des expressions régulières, mais ce n'est pas très efficace. Une structure de données efficace pour ce type de recherche est une méthode, qui est décrite ici sur SO .

Une fois que vous avez la liste des possibilités, il vous suffit de la présenter. Vous souhaitez probablement conserver une référence à la racine de l’arbre des possibilités afin de pouvoir les rechercher en temps réel au fur et à mesure que quelqu'un tape plus de lettres.

Eclipse a également cette fonctionnalité et il s’agit d’un projet open source. Pourquoi ne pas vérifier comment Eclipse le fait en regardant le code?

Cette question est trop large. Étant donné qu’il existe un certain nombre de langues différentes que VS IDE prend en charge ET qu’il existe un nombre N d’améliorations DSL et IDE prenant en charge d’intellisense, cela implique un certain nombre de réponses. Si vous parlez de C # en particulier, voir Outils | Options | Éditeur de texte | C # | Zone Intellisense pour voir les options disponibles des options de complétion. En ce qui concerne l'algorithme [s] utilisé, vous rechercherez les métadonnées des assemblys, la mise en cache copieuse des membres de type, la liste MRU du dernier membre choisi pour un type spécifique, etc. Si vous avez une question plus spécifique, je vous suggère vous clarifiez.

Voir l'exemple d'un DSL (ironpython) et de son implémentation ici .

Je n'ai vu aucun éditeur de texte dans VS limitant la présence d'IntelliSense. Tout est spécifique à la langue. Si votre curseur se trouve à un endroit où IntelliSense pourrait contribuer à un jeton valide, c'est à ce moment-là qu'il sera utilisé.

Je crois qu’il existe certaines interactions avec le système de projet utilisé, mais pour autant que je sache. Je pense également qu’il existe un exemple de système de projet dans le SDK de Visual Studio, ce qui peut vous donner une idée.

Dans de tels cas, j’utilise parfois ma propre version d’InteliSense que j’ai développée pour AutoHotKey quand je veux un comportement spécifique. L’intérêt de ce script est qu’il peut être utilisé avec n’importe quel éditeur ou essentiellement avec tout contrôle acceptant du texte. Cela fonctionne en enregistrant une entrée de texte et en l'interprétant dans un fichier de syntaxe.

Vous pouvez peut-être l'utiliser comme base pour ce que vous voulez réaliser. J'ai utilisé ISense avec succès avec plusieurs langues dépourvues de cette fonctionnalité, telles que Csound ou même batch. les scripts. Il sera possible de l’étendre au C # en utilisant la surveillance des entrées en combinaison avec Reflection.

Quoi qu’il en soit, avec AHK, vous pouvez même contrôler VS intelissense en "prenant". la liste des éléments qu'il présente et filtre, ou des choses similaires. Vous pouvez avoir quelques petits problèmes avec les limites de processus, mais rien ne peut être corrigé.

L’intellisense ius en général, autant que je sache, est mis en oeuvre selon différentes méthodes. J'ai lu que Delphi est si rapide qu'il implémente isense en recompilant le projet sur chaque jeton et que c'est la raison pour laquelle C ++ Builder n'a pas eu isense car sa compilation est très lente.

Pour ce qui est de savoir comment changer l’endroit, la réponse est: vous ne pouvez pas. Intellisense est en grande partie fourni par la réflexion des assemblys inclus dans votre projet (et quelques astuces avec C ++). Ce que vous obtenez est le résultat du traitement par les logiciels virtuels de tous les assemblages que vous avez inclus et de tous les assemblages du GAC.

Cela dit, si vous souhaitez fournir des résultats explicites intellisense à partir d'un projet sur lequel vous travaillez, consultez IVsContextualIntellisenseFilterProvider

Enfin, pour mieux comprendre le processus des coulisses, consultez cet article de blog

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top