pad edited this page May 27, 2014 · 7 revisions


The main goal of pfff is to provide tools to help understand and manipulate large codebase. Working in a new codebase, as part of your new job or because you want to extend some popular open source projects, is very hard. In fact it is so hard that the main solution found by many people to extend a project is actually instead to restart it from scratch. There has to be a better way. The goal of pfff is then to provide tools to accelerate the comprehension of a large codebase and then tools to help manipulate in one direction on another this codebase, to fight its inertia.


Analyze php/javascript/html/css/sql as well as their interactions, holistically.

Analyze ocaml code so can apply the ideas to my own code :)

Analyze statically and dynamically.

Mine all code artifacts


  • code (number of callers/users, distance to bottom, distance to use of new concepts and refactoring effort, code complexity, code_rank, test_rank, test coverage, bugs, security bad smells)
  • git (age of lines, number of authors, activity)
  • org (number of people in different team or buildings or countries)
  • mailing lists, IRC, discussions
  • documentation (important abstractions, software architecture, wiki)

for useful specifications, coupling, etc.



  • OCaml environment: good tools, good library with nice and small readable headers.
  • DrScheme/Racket: make it easy to learn the language and excellent API documentation.
  • Perl: good documentation, with examples of use for each func.


  • Grok by Google.
  • Nitra by Jetbrains