Skip to content

Latest commit

 

History

History
440 lines (270 loc) · 10.1 KB

changes.txt

File metadata and controls

440 lines (270 loc) · 10.1 KB

-*- org -*-

0.15 beta (Q1 2011)

introduce web-based source code navigator a la lxr using ocsigen

introduce lang_html/

(using code from a stripped down version of ocamlnet)

introduce lang_css/

(using code from ccss by dario teixeira)

0.14 (Q4 2010)

codemap

google-earth like layers!

  • architecture/aspect layer (default one)
  • static dead code layer
  • dynamic live code layer (using xhprof data)
  • test coverage layer (using phpunit and xdebug data)
  • bugs layer
  • security layer
  • cyclomatic complexity,
  • age (and activity) layer
  • number of authors layer

more semantic visual feedback

can see arguments passed by refs visually (TakeArgNByRef) as well as functions containing dynamic calls (ContainDynamicCall)

visual grep

can now visualize the result of a git grep on a project

better visualization of directories

use different color for dirs and files labels, and highlight first letter of label at depth = 1

introduce spatch, a syntactical patch

a DSL to express easily refactoring on PHP.

sgrep/spatch

better support for XHP patterns with flexible matching

on attributes

experimental support for statement patterns

can now express patterns like: sgrep -e ‘foreach($A as $V) { if (strpos($T, $V) !== false) { return Z; }}’

introducing lang_nw/

so can visualize also Tex/Latex/Noweb source (which includes the documentation of pfff!)

introducing lang_lisp/

introducing lang_haskell/

introducing lang_java/

introducing lang_python/

introducing lang_csharp/

introducing lang_erlang/

php analysis

finalized the PIL

dataflow analysis using PIL (thanks to iproctor)

global analysis

store additional attributes/properties per entities in the light code db

  • does it take argument by refs.
  • does it contain dynamic calls ($fn(…))

This can help the visualizer to give more semantic visual feedback.

layer type, so can save results of global analysis and process them

later in codemap or pfff_statistics

lang_ml

more highlight

documentation

wrote wiki pages (intro, sgrep, spatch, features, vision, roadmap, etc)

applied codemap on many open source project and generated screenshots.

internals

refactored the code in visual/ to have smaller and cleaner files

thanks to literate programming and codemap itself to show the problem and assist in the refactoring

refactored code about defs/uses in defs_uses_php.ml

and put more generic stuff in h_program-lang/

renamed pfff_visual in codemap

0.13

first public release!

0.12 (Q3 2010)

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 :)

Support for PHP, Javascript, ML, C++, C, thrift.

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!

sgrep

support linear patterns (e.g. sgrep -e ‘X & X’) and a -pvar option to print matched metavarables instead of matched code

introduce parsing_ml/

Allow to use and experiment the treemap code visualizer on the pfff source itself; to see if such features are useful.

introduce parsing_cpp/

introduce analyze_js/, analyze_cpp/, analyze_ml/

very basic support. Just highlighting

internals

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.

0.11

introduce checker

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).

introduce php_etags

a more precise TAGS file generator (bonus: it’s xhp-aware).

checkModule part 2

introduce javascript support, parsing_js/

parsing/unparsing/dumping. preliminary refactoring support.

introduce builtin XHP support

analysis

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.

0.10 (Q2 2010)

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.

introduce fixer

extract and modularize code from reaper

extract code from facebook/qa_code into analyze_php/qa_code

dead variables/typo detection

analysis

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

parser

fix bugs in lexer

now can parse <?= code

internal

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

misc

dead sitevars analysis update: not used

static arrays lint checks

proto of undeterministic PHP bugs finder using diff and xdebug

proto for flib dependencies display

0.9

introduce facebook/check_code

introduce facebook/qa_test

with

  • test_rank,
  • cyclomatic complexity,
  • test_smells,
  • email annotations and notifications
  • output results via R

introduce facebook/fb_phpunit_wrap

and tools/phpunit.ml update: supersed by ‘t’

introduce compile_php/

but for now very rudimentary update: not used for now

analysis

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.

bugfixes

updated the deadcode reaper, fb_phpunit_wrap, and pfff_db to analyze the current code

more xdebug parsing

internals

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

0.8 (Q1 2010)

xdebug trace parsing

Can now do dynamic analysis! Done for type “inference/extraction”.

sgrep: introducing $V special metavar

GUI

trivial type inference feedback based on xdebug info update: not really used for now

introducing parsing_sql/

could be useful at some point for better type checking or type inference update: not sure for now

0.7

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.

sgrep:

  • a -emacs flag
  • improved -xhp and made it the default operating mode

deadcode:

  • do fixpoint analysis per file

0.6

introducing sgrep_php

a code matcher working at the AST level

introducing treemap viewer using Graphics.mli

update: superseded by cairo-based viewer (but reused most of the algorithms)

introducing code_rank

introducing checkModule

first part (with its literate programming manual)

introducing flib_navigator

update: superseded by web gui

treemap algorithms library and basic literate programming manual

0.5

parser

XHP poor’s man support. Just have A new -pp option to give opportunity to call a preprocessor (eg ‘xhpize -d’).

ffi/meta

a new -json option and json support

also supported in sgrep.

0.4

doc

programmer manual for parsing_php/ internals manual for parsing_php/

!!use literate programming method (via noweb/syncweb)!! (hence the special marks in the source)

analysis

callgraph for methods (using weak heuristic), with optimisations to scale (partially because use weak heuristic)

0.3 (Q4 2009)

analysis

deadcode analysis v2, v3, v4 diffcamp/facebook integration (via mysql and git)

infrastructure

ORM for mysql (using camlmix) Mysql support (with ocamlmysql/) note: for diffcamp/facebook integration

IRC support (adapting ocamlirc/) update: not used anymore

complement git.ml

0.2

analysis

deadcode analysis v1

0.1

introducing PHP gui (with ocamlgtk/)

update: superseded by codemap, a fancy gui using cairo and gtk

beta

global analysis first draft, PHP database (with ocamlbdb/)

alpha (Nov 2009)

PHP parser first draft !

reused Zend flex/bison code.

visitor (using ocamltarzan)

AST pretty printer (also using ocamltarzan and lib-sexp)