Isenção de responsabilidade: falsos positivos; Praticamente isso é útil para "exploração" e não para "aplicação"
Pedidos verticais
Em geral, queremos que as dependências de chamadas de função apontem na direção descendente. Ou seja, uma função chamada deve ser uma função que faça a chamada. Isso cria um bom fluxo no módulo de código -fonte do nível alto para o nível baixo. Como nos artigos de jornais, esperamos que os conceitos mais importantes cheguem primeiro, e esperamos que eles sejam expressos com a menor quantidade de detalhes poluentes. Esperamos que os detalhes de baixo nível venham por último. Isso nos permite passar os arquivos de origem, obtendo a essência das poucas funções do Frist, sem ter que nos imergir nos detalhes.
- Código limpo, Capítulo 5, P84, Robert C. Martin, 2009

go install github . com / nikolaydubina / vertfn @ latest vertfn --verbose ./...
Melhorar a taxa de falsos positivos é boa, como para os seguintes casos:
Código limpo, Capítulo 5, Exemplo de Código 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 ;
}
...
}