c# - para - En Visual Studio, ¿hay una manera de ordenar los métodos privados por uso?
ordenar codigo visual studio (5)
En Visual Studio, con o sin una extensión, ¿hay una manera de ordenar automáticamente los métodos privados dentro de una clase según el orden de su uso (su ubicación en la pila de llamadas)?
Por ejemplo, considere la siguiente clase:
public class MyClass
{
public void MyMethod()
{
TestC();
}
private void TestA()
{
TestB();
}
private void TestB()
{
Console.WriteLine("Hello");
}
private void TestC()
{
TestA();
}
}
El método público en esta clase es MyMethod
, llama a TestC
que llama a TestA
que llama a TestB
. Me gustaría (automáticamente) ordenar estos métodos por este orden para que la clase se vea así:
public class MyClass
{
public void MyMethod()
{
TestC();
}
private void TestC()
{
TestA();
}
private void TestA()
{
TestB();
}
private void TestB()
{
Console.WriteLine("Hello");
}
}
Necesito poder seleccionar una clase, solicitar tal clasificación de método y ordenar los métodos automáticamente. Es decir, no quiero ordenar manualmente estos métodos.
Entiendo que hay algunos matices. Por ejemplo, podría haber un método privado que se llame desde dos métodos que estén en dos niveles diferentes en la pila de llamadas. Supongo que en este caso tiene sentido considerar la distancia más pequeña (pila de llamadas) del método público.
ACTUALIZAR:
Esta idea de clasificar los métodos de esta manera proviene del libro Clean Code de Robert C. Martin. En el capítulo 3, se define la regla Stepdown, que habla de que las funciones de nivel superior aparezcan antes que las funciones de nivel bajo.
Al hacer una búsqueda rápida de la regla de reducción en Google, encontré un complemento de Netbeans en: http://plugins.netbeans.org/plugin/58863/stepdownruleplugin
Supongo que hace algo similar a lo que necesito, pero para netbeans.
Aquí están los otros productos a los que nadie ha hecho referencia y que podrían agregar la funcionalidad con una solicitud amigable:
No es tan difícil escribir esto tú mismo. Las nuevas plantillas de Visual Studio VSIX Project están disponibles en la configuración de VS2015, si no puede encontrarlas en (Archivo> Nuevo> Proyecto .. Visual C #> Extensibilidad) solo modifique la instalación (cmd> appwiz.cpl> VS2015 Change / Modify).
La buena noticia es que el proyecto CodeMaid es de código abierto y contiene la mayoría del código y la lógica que necesitará para reordenar los fragmentos de código.
La otra cosa que necesitará es la pila de llamadas y uno de nuestros colaboradores útiles ha proporcionado el código para eso aquí: ¿Cómo obtener el seguimiento de la pila de un proceso en ejecución desde un complemento de Visual Studio?
Dado que esta es una recompensa que probablemente esperaba una solución completa, lo siento, no tengo tiempo de programarlo ahora, pero me complace darle una mano si tiene algún problema. Házmelo saber en los comentarios.
Para comenzar a trabajar rápidamente, personalmente copio el código en esta extensión de Visual Studio y sustituyo las agallas con Reordenar por pila de llamadas: depurar hilo único .
El Complemento ReSharper "Greenkeeper" hace el trabajo:
https://bitbucket.org/denniskniep/greenkeeper
El complemento puede ordenar los métodos en "newspapermode": el código importante primero y los detalles en la parte inferior. El newspapermode tiene el mismo comportamiento que la "regla de reducción".
https://bitbucket.org/denniskniep/greenkeeper/wiki/SortingDeclarations
La respuesta corta es NO. La razón es simplemente porque la mayoría de los desarrolladores intentan escribir código que sea fácil de leer. Si necesito actualizar a TestB y ver el código, esperaría que se definiera TestB después de TestA y antes de TestC. Luego también tiene en cuenta los campos definidos para la clase y el uso de los métodos de obtención / configuración para establecer y obtener el valor de un campo definido.
El siguiente código muestra 2 clases. La primera clase está en el diseño que yo personalmente uso para facilitar la lectura, en caso de que otro desarrollador necesite actualizar el código en el que no están perdiendo el tiempo buscando el código. La segunda clase sigue la forma en que desea que se reorganicen.
public class MyClass
{
private string _HelloWorld;
public string HelloWorld
{
get {return _HelloWorld;}
set {_HelloWorld = value;}
}
public void MyMethod
{
TestC();
}
public void TestA()
{
TestB();
}
public void TestB()
{
Console.WriteLine(HelloWorld);
}
public void TestC()
{
TestA();
}
}
public class MyClass2
{
private string _HelloWorld;
public void MyMethod
{
TestC();
}
public void TestC()
{
TestA();
}
public void TestA()
{
TestB();
}
public void TestB()
{
Console.WriteLine(HelloWorld);
}
public string HelloWorld
{
get {return _HelloWorld;}
set {_HelloWorld = value;}
}
}
No sé si es posible hacerlo de forma nativa dentro de Visual Studio. Sin embargo, creo que el mejor método sería usar ReSharper (una extensión de Visual Studio) para hacer esto.
Proporciona al menos dos opciones que vienen a la mente:
1) Usando las preferencias de Diseño de Archivo y Tipo con patrones,
2) Usando la ventana Estructura de archivos (esta podría ser la forma más rápida si la clase que desea reordenar no tiene demasiados métodos). Puedes comprobarlo aquí.
Espero que ayude.
Si desea activar esa lógica manualmente y usa vs 2015, puede crear un CodeFix de estudio visual que usará Roslyn. ver: Construir CodeFix ex
Los pasos que debes hacer son:
- Crear proyecto CodeFix
- La lógica de CodeFix, utilizando Roslyn, analizará todos los métodos en el documento y creará un gráfico de dependencia entre los métodos. A continuación, cambiará el orden y reescribirá el código al documento.
- Instale el CodeFix, como analizador, y utilícelo para cada documento de estudio visual que desee