pfff is a set of tools and APIs to perform static analysis, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code. There is good support for Javascript, Python, C, Java, and PHP. There is also preliminary support for other languages such as C++, Rust, C#, Html, CSS, Erlang, Lisp, Haskell, Skip, and SQL. There is also very good support for OCaml code so that the framework can be used on the code of pfff itself.
For each languages there are mainly 2 libraries, for instance
parsing_php.cma
and analysis_php.cma
, that you can
embed in your own application if you need to process PHP code. See the
demos/
directory for example of use of the pfff API. See also
docs/manual/Parsing_xxx.pdf
and docs/manual/Analyzis_xxx.pdf
for
more documentation on how to use or extend pfff.
pfff is also made of few tools:
pfff
, which allows to test the different parsers on a single filescheck
, a bug finderstags
, an Emacs tag generatorsgrep
, a syntactical grepspatch
, a syntactical patchcodemap
, which is a gtk and cairo based source code visualizer/navigator/searcher leveraging the information computed bypfff_db
andcodegraph_build
codegraph_build
, a source code indexercodegraph
, a package/module/class dependency visualizer leveraging the information computed previously bycodegraph_build
codequery
, an interactive tool a la SQL to query information about the structure of a codebase using Prolog as the query enginepfff_db
, which does some global analysis on a set of source files and store the data in a marshalled form in a file somewhere (e.g./tmp/db.json
)
For more information, look at the pfff wiki here: http://github.com/facebook/pfff/wiki/Main as well as the docs/manual/ directory.
$ ./pfff -parse_php demos/foo.php
or
$ ./pfff -dump_php demos/foo.php
You can also look at ./pfff --help
$ ./pfff_db -lang ml -o /tmp/pfff.json ~/pfff
to analyze all the .ml
and .mli
files under ~/pfff
and store metadata
information (the database) in /tmp/pfff.json
$ ./codemap ~/pfff
This should launch a gtk-based GUI that allows you to visualize source code and perform some code search.
$ ./codegraph_build -lang cmt ~/pfff
to generate a graph_code.marshall
file in ~/pfff
containing
all dependency information about the pfff codebase using the
typed bytecode .cmt
files generated during the compilation of pfff.
$ ./codegraph ~/pfff
This should launch a gtk-based GUI that allows you to visualize source code dependencies.
Look at the pfff wiki here: http://github.com/facebook/pfff/wiki/Main