Avertissement: faux positifs; En pratique, cela est utile pour «l'exploration» plutôt que pour «l'application»
Commande verticale
En général, nous voulons que les dépendances d'appel de fonction pointent dans la direction vers le bas. Autrement dit, une fonction qui est appelée doit être ci-dessous une fonction qui fait l'appel. Cela crée un joli flux dans le module de code source du niveau élevé à un niveau bas. Comme dans les articles de journaux, nous nous attendons à ce que les concepts les plus importants viennent en premier, et nous nous attendons à ce qu'ils soient exprimés avec le moins de détails polluants. Nous nous attendons à ce que les détails de bas niveau arrivent en dernier. Cela nous permet de parcourir les fichiers source, d'obtenir l'essentiel de quelques fonctions FRIST, sans avoir à nous plonger dans les détails.
- Clean Code, chapitre 5, p84, Robert C. Martin, 2009

go install github . com / nikolaydubina / vertfn @ latest vertfn --verbose ./...
L'amélioration du taux de faux positifs est bonne, comme pour les cas suivants:
Code propre, chapitre 5, exemple de code 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 ;
}
...
}