-
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 ca 10000 n 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/