Descargo de responsabilidad: falsos positivos; Prácticamente esto es útil para la "exploración" en lugar de la "aplicación"
Pedido vertical
En general, queremos que las dependencias de llamadas de función apunten en la dirección hacia abajo. Es decir, una función que se llama debe ser una función que realice la llamada. Esto crea un buen flujo hacia abajo en el módulo del código fuente desde el nivel alto hasta el nivel bajo. Al igual que en los artículos periodísticos, esperamos que los conceptos más importantes vengan primero, y esperamos que se expresen con la menor cantidad de detalles contaminantes. Esperamos que los detalles de bajo nivel lleguen al último. Esto nos permite escabullir archivos fuente, obteniendo la esencia de las pocas funciones de Frist, sin tener que sumergirnos en los detalles.
- Código limpio, Capítulo 5, P84, Robert C. Martin, 2009

go install github . com / nikolaydubina / vertfn @ latest vertfn --verbose ./...
Mejorar la tasa de falsos positivos es bueno, como para los siguientes casos:
Código de limpieza, capítulo 5, ejemplo de ejemplo WikiPageResponder.java
public class WikiPageResponder implements SecureResponder {
protected WikiPage page ;
protected PageData pageData ;
protected String pageTitle ;
protected Request request ;
protected PageCrawler crawler ;
public Response makeResponse ( FitNesseContext context , Request request )
throws Exception {
String pageName = getPageNameOrDefault ( request , "FrontPage" );
loadPage ( pageName , context );
if ( page == null )
return notFoundResponse ( context , request );
else
return makePageResponse ( context );
}
private String getPageNameOrDefault ( Request request , String defaultPageName )
{
String pageName = request . getResource ();
if ( StringUtil . isBlank ( pageName ))
pageName = defaultPageName ;
return pageName ;
}
protected void loadPage ( String resource , FitNesseContext context )
throws Exception {
WikiPagePath path = PathParser . parse ( resource );
crawler = context . root . getPageCrawler ();
crawler . setDeadEndStrategy ( new VirtualEnabledPageCrawler ());
page = crawler . getPage ( context . root , path );
if ( page != null )
pageData = page . getData ();
}
private Response notFoundResponse ( FitNesseContext context , Request request )
throws Exception {
return new NotFoundResponder (). makeResponse ( context , request );
}
private SimpleResponse makePageResponse ( FitNesseContext context )
throws Exception {
pageTitle = PathParser . render ( crawler . getFullPath ( page ));
String html = makeHtml ( context );
SimpleResponse response = new SimpleResponse ();
response . setMaxAge ( 0 );
response . setContent ( html );
return response ;
}
...
}