J'écris ma propre extension Visual Studio 2010 qui devrait m'aider à naviguer dans une solution assez volumineuse.
J'ai déjà une extension VS basée sur une boîte de dialogue qui me montre un nom de classe et un nom de fonction en fonction de certains critères de recherche. Je peux maintenant cliquer sur cette classe/méthode et je peux alors déjà ouvrir le bon fichier et passer à la fonction.
Ce que je veux maintenant faire est de placer le curseur au début de cette fonction.
Mon code pour accéder à la fonction est:Définition de la position du curseur avec Visual Studio Extension
Solution currentSolution = ((EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0")).Solution;
ProjectItem requestedItem = GetRequestedProjectItemToOpen(currentSolution.Projects, "fileToBeOpened");
if (requestedItem != null)
{
// open the document
Window window = requestedItem.Open(Constants.vsViewKindCode);
window.Activate();
// search for the function to be opened
foreach (CodeElement codeElement in requestedItem.FileCodeModel.CodeElements)
{
// get the namespace elements
if (codeElement.Kind == vsCMElement.vsCMElementNamespace)
{
foreach (CodeElement namespaceElement in codeElement.Children)
{
// get the class elements
if (namespaceElement.Kind == vsCMElement.vsCMElementClass)
{
foreach (CodeElement classElement in namespaceElement.Children)
{
try
{
// get the function elements
if (classElement.Kind == vsCMElement.vsCMElementFunction)
{
if (classElement.Name.Equals("functionToBeOpened", StringComparison.Ordinal))
{
classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);
this.Close();
}
}
}
catch
{
}
}
}
}
}
}
}
Les points importants sont window.Activate();
pour ouvrir le fichier correct et classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);
pour accéder à la fonction correcte.
Malheureusement, le curseur n'est pas positionné au début de la fonction demandée. Comment puis-je faire ceci? Je pense à quelque chose comme classElement.StartPoint.SetCursor()
.
Vive Simon
complexe Cyclomatically? En outre, on dirait que vous ne renoncez pas à la méthode lorsque vous trouvez ce que vous cherchez, ce qui pourrait avoir des effets secondaires (WAG). – Will
@Will: Oui, je sais. Ceci est juste une sorte de code prototype. Juste pour montrer comment j'ouvre la classe et la fonction demandées ... –