-
Notifications
You must be signed in to change notification settings - Fork 29
Home
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 bypfff_db
andcodegraph
. 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 http://ocaml.org/meetings/ocaml/2013/program.html Notes http://www.syslog.cl.cam.ac.uk/2013/09/24/liveblogging-ocaml-workshop-2013/
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 https://github.com/returntocorp/pfff.git --depth=1
Then follow the instructions in install.txt
which
essentially tell you to do:
$ ./configure $ opam install . --deps-only $ make
Here is a screenshot of Codemap when applied on the early source of the Linux kernel.
part1: http://www.youtube.com/watch?v=HRZjBGD3osw
part2: http://www.youtube.com/watch?v=993pmNLY_VU
- Entry points: Vision, Features, Roadmap, work in progress: Pfff manual
- The visualizer: see Codemap, the Linux Plumbers slides and the work in progress: Visualizer manual
- sgrep/spatch: see Sgrep and Spatch
- scheck: see Scheck
- Language specifics analysis and tools: see Matrix
- Internals: see Internals
Look in Internals.
Email to pad at fb dot com or click on "Issues" in the github project bar above.
See also Examples and Examples2.
pfff is a continuation of the work I've done on coccinelle, an advanced refactoring tool for C http://coccinelle.lip6.fr/ I co-designed with Julia Lawall.
Related research work:
- http://research.microsoft.com/en-us/groups/hip/ and especially http://research.microsoft.com/en-us/projects/spatialcode/default.aspx
- SeeSoft
- AspectBrowser
Related old-school Unix tools:
- ctags
- cscope
Related tools:
- Source Insight
- lxr http://lxr.sourceforge.net/en/index.shtml
- http://www.ndepend.com/
- http://blog.jetbrains.com/blog/2014/05/27/nitra-goes-open-source/
- a recent polyglot analysis library https://srclib.org/ (aka sourcegraph.com)
- a recent similar effort by Google for C++ and Java: http://www.kythe.io/
- the understand tool https://scitools.com/support/complete-overview-video/