pad edited this page Aug 18, 2015 · 129 revisions

Welcome to the pfff Wiki!


pfff is a set of tools and APIs to perform some static analysis (e.g. to find bugs), dynamic analysis, source code indexing, code search, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code. There is good support for C, Java, PHP, JavaScript, HTML, CSS, and preliminary support for C++, Rust, C#, Erlang, Lisp, Scheme, Haskell, Python, OPA, Sql, and even TeX. There is also very good support for OCaml and noweb (literate programming) so that pfff can be used on the code of pfff itself.

Here are the pfff tools:

  • pfff, a small command line program to test the different programming language parsers
  • scheck, a lint-like bugs finder
  • stags, a more precise Emacs tag generator
  • sgrep, a syntactical grep, to make it easy to find precise code patterns
  • spatch, a syntactical patch, to make it easy to refactor code
  • codemap, a semantic source code visualizer/navigator/searcher which can also leverage the information computed by pfff_db and codegraph. See Examples and Examples2 for screenshots of the tool applied to many different open source projects.
  • NEW codegraph, a package/module/class dependency visualizer as well as a source code indexer (a.k.a grapher)
  • NEW codequery, an interactive tool a la SQL to query information about the structure of a codebase using Prolog as the query engine
  • pfff_db, which does some simple global analysis on a set of source files and store the data in a marshalled or JSON form in a file somewhere (e.g. /tmp/pfff_db.json)


Presentation of codemap and codegraph at the OCaml workshop 2013. Slides available at Notes

Look in Changes.


Click on the "Download Source" button in the top right of this window. If you have git installed on your machine you can also do:

$ git clone --depth=1

Then follow the instructions in install.txt which essentially tell you to do:

$ ./configure
$ make depend
$ make; make opt


Here is a screenshot of Codemap when applied on the early source of the Linux kernel.






Look in Internals.


Email to pad at fb dot com or click on "Issues" in the github project bar above.

More Screenshots

See also Examples and Examples2.

Linux kernel

OCaml Compiler

Pfff itself

Related work

pfff is a continuation of the work I've done on coccinelle, an advanced refactoring tool for C I co-designed with Julia Lawall.

Related research work:

Related old-school Unix tools:

  • ctags
  • cscope

Related tools:

In the press