-*- org -*-
can now visualize the result of a git grep on a project.
so can visualize also Tex/Latex/Noweb source (which includes the documentation of pfff!)
store additional attributes/properties per entities in the light code db
e.g. is the function dead, does it use a global, does it take argument by refs. This can help the visualizer to give more semantic visual feedback.
wrote a few wiki pages
Also applied pfff_visual on many open source project and generated screenshots.
Real start of multi-language support.
introduce source code navigator/searcher/visualizer using cairo
Show treemap and thumbnails of file content! Have also minimap, zoom, labels, alpha for overlapping labels, labels in diagonal, anamorphic content showing in bigger fonts the important stuff, magnifying glass, clickable content where a click opens the file in your editor at the right place, etc. => A kind of google maps but on code :)
For PHP do also URL highlighting which helps understand the control flow in webapps. Also highlight local/globals/parameters variables differently. Also highlight bad smells (especially security related bad smells)
Integrate other PL artifacts:
- The builtins API reference
- PLEAC cookbooks
=> a single place to query information about the code (no need to first grep the code, then google for the function because it turns out to be a builtin).
Can easily go the definition of a function (whether it’s a builtin or not, thanks to the parsable PHP manual and HPHP idl files).
Can easily go to the example of use of a function (whether it’s a builtin or not, thanks to PLEAC for the builtin functions).
Far more flexible and powerful than the previous treemap visualizer which was using Graphics. Now also render file content!
support linear patterns (e.g. sgrep -e ‘X & X’) and a -pvar option to print matched metavarables instead of matched code
Allow to use and experiment the treemap code visualizer on the pfff source itself; to see if such features are useful.
introduce analyze_js/, analyze_cpp/, analyze_ml/
very basic support. Just highlighting
reorganized the treemap and h_program-lang/ to be less facebook and pfff specific. Have a commons/file_type.ml for instance.
introduce database_code.ml, a generic code-information database using JSON as support. Will help make pfff less php-specific.
warn about “unused variable” and “use of undefined variable”.
use fast global analysis (bonus: it’s flib-aware and desugar the require_module_xxx and other flib conventions).
a more precise TAGS file generator (bonus: it’s xhp-aware).
checkModule part 2
parsing/unparsing/dumping. preliminary refactoring support.
introduce builtin XHP support
introduce PIL, PHP Intermediate Language, a more conveninent AST to work on for doing complex analysis such as dataflow, type-inference, tainted analysis, etc.
include/require analysis as well as flib-unsugaring. Make it possible to grab all the files needed to check one file, in a way similar to what gcc does with cpp. Provide a DFS and BFS algo.
introduce test coverage analysis using xdebug.ml and phpunit.ml
used by arc unit.
rank, filter, parallelize (using MPI), cronize.
more refactorings with spatch_php
fix parsing (lexer) and unparsing bugs
introduce the transfo field, mimicing part of coccinelle.
improve support for XHP and refactoring, merging tokens heuristic.
extract and modularize code from reaper
extract code from facebook/qa_code into analyze_php/qa_code
dead variables/typo detection
static method calls analysis (with self/parent special cases handling)
more work on include/require, now stored in the database. better environment handling (PHP_ROOT, THRIFT_ROOT, etc)
more work on builtins, needed by checkModule
users_of_class, users_of_define, extenders/implementers of class
fix bugs in lexer
now can parse <?= code
split analyze_php/ in multiple dirs moved code from facebook/ to analyze_php/
started to use OUnit.ml !
unit tests for parsing, analysis, deadcode, callgraph, xdebug
first work on web gui
extract and modularize php highlighting logic from gtk gui.
started integrate treemap and web gui.
first work on thrift interface to pfff services
dead sitevars analysis
static arrays lint checks
proto of undeterministic PHP bugs finder using diff and xdebug
proto for flib dependencies display
- cyclomatic complexity,
- email annotations and notifications
- output results via R
but for now very rudimentary
control flow graph analysis: useful for cyclomatic complexity, and potentially useful or far more things (sgrep, dataflow, etc)
start of dataflow analysis
start of coverage analysis (static and dynamic)
start of include_require static analysis (and flib file dependencies too)
start of type unioning
phpunit result analysis and parsing
used by fb_phpunit_wrap
useful to get local regression information on tests.
updated the deadcode reaper, fb_phpunit_wrap, and pfff_db to analyze the current code
more xdebug parsing
reorganized facebook/ with fb_common/www.ml, etc and fb_org/fb_employee.ml, etc
reorganized json/sexp output, factorize code and use more ocaml.ml
xdebug trace parsing
Can now do dynamic analysis! Done for type “inference/extraction”.
sgrep: introducing $V special metavar
trivial type inference feedback based on xdebug info
could be useful at some point for better type checking or type inference
introducing ppp, php pre processor, and implement closure
by source-to-source transformation.
now I can code in PHP :)
improved pretty printer, and helpers for AST transformation
with map_php.ml. Used by ppp and closure implemetation.
- a -emacs flag
- improved -xhp and made it the default operating mode
- do fixpoint analysis per file
a code matcher working at the AST level
introducing treemap viewer using Graphics.mli
first part (with its literate programming manual)
update: superseded by web gui
XHP experimental support. A new -pp option to give opportunity to call a preprocessor (eg XHP).
a new -json option and json support
also supported in sgrep.
programmer manual for parsing_php/ internals manual for parsing_php/
!!use literate programming method (via noweb/syncweb)!! (hence the special marks in the source)
callgraph for methods (using weak heuristic), with optimisations to scale (partially because use weak heuristic)
deadcode analysis v2, v3, v4 diffcamp/facebook integration (via mysql and git)
ORM for mysql (using camlmix) Mysql support (with ocamlmysql/)
IRC support (adapting ocamlirc/)
deadcode analysis v1
introducing PHP gui (with ocamlgtk/)
update: superseded by web gui
global analysis first draft, PHP database (with ocamlbdb/)
PHP parser first draft !
reused Zend flex/bison code.