From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id B26BB7EE6B for ; Wed, 27 Nov 2013 02:16:39 +0100 (CET) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of pad@fb.com) identity=pra; client-ip=67.231.145.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="prvs=4043e17564=pad@fb.com"; x-sender="pad@fb.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of prvs=4043e17564=pad@fb.com designates 67.231.145.42 as permitted sender) identity=mailfrom; client-ip=67.231.145.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="prvs=4043e17564=pad@fb.com"; x-sender="prvs=4043e17564=pad@fb.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mx0a-00082601.pphosted.com) identity=helo; client-ip=67.231.145.42; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="prvs=4043e17564=pad@fb.com"; x-sender="postmaster@mx0a-00082601.pphosted.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqUDACpHlVJD55Eqf2dsb2JhbABZgz9TvCsWDgEBCQ0KCBQogiw6BgEBOBEBPkInBIgUDa1WAQGEUQEFjTwCBI0GhR2BE5Fnmi2BPoIq X-IPAS-Result: AqUDACpHlVJD55Eqf2dsb2JhbABZgz9TvCsWDgEBCQ0KCBQogiw6BgEBOBEBPkInBIgUDa1WAQGEUQEFjTwCBI0GhR2BE5Fnmi2BPoIq X-IronPort-AV: E=Sophos;i="4.93,778,1378850400"; d="scan'208";a="45595703" Received: from mx0a-00082601.pphosted.com ([67.231.145.42]) by mail2-smtp-roc.national.inria.fr with ESMTP; 27 Nov 2013 02:16:38 +0100 Received: from pps.filterd (m0044008 [127.0.0.1]) by mx0a-00082601.pphosted.com (8.14.5/8.14.5) with SMTP id rAR1DGpb008327 for ; Tue, 26 Nov 2013 17:16:36 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fb.com; h=from : to : subject : date : message-id : content-type : content-id : content-transfer-encoding : mime-version; s=facebook; bh=Y0rLnQNpiAqsoXME76Gq29rsmGHhjyT5e1tXnQ+sIKQ=; b=CdHwqD6D1gOLLIuebfFCPebxCopql7eKVFULoGzEPo4jGd51FqiqFrIngJMbwJ0TqMv+ 55Lu9ti9LjOy6RveGuIf+lacHyQkUu8tIRieS/ouJ9d8kP5ITdOZwdtc/c3gZuxn7K6J 7S5vxlFPoRXodL4KN+RxnqzQWr+c+SI/KE0= Received: from mail.thefacebook.com (prn1-cmdf-dc01-fw1-nat.corp.tfbnw.net [173.252.71.129] (may be forged)) by mx0a-00082601.pphosted.com with ESMTP id 1gcygr9vuv-1 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=OK) for ; Tue, 26 Nov 2013 17:16:35 -0800 Received: from PRN-MBX02-4.TheFacebook.com ([169.254.5.182]) by PRN-CHUB12.TheFacebook.com ([fe80::ddee:413f:3120:8216%12]) with mapi id 14.03.0158.001; Tue, 26 Nov 2013 17:16:34 -0800 From: Yoann Padioleau To: caml users Thread-Topic: [ANN] pfff 0.25, tools and APIs for program analysis of PHP/Java/JS/C/ML/PHP/... Thread-Index: AQHO6w5QIQ7wNp6E/kik+31DreUhog== Date: Wed, 27 Nov 2013 01:16:34 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.16.4] Content-Type: text/plain; charset="us-ascii" Content-ID: <1D56F2BEBE6A50488468D82E2C167060@fb.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.11.72,1.0.14,0.0.0000 definitions=2013-11-27_01:2013-11-26,2013-11-27,1970-01-01 signatures=0 Subject: [Caml-list] [ANN] pfff 0.25, tools and APIs for program analysis of PHP/Java/JS/C/ML/PHP/... Hello, pfff is a set of tools and APIs to perform some static analysis, dynamic analysis, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code. For now the effort has focused mainly on PHP but there is also good support for C, C++, Java, HTML, JavaScript, and CSS. There is also very good support for OCaml and noweb (literate programming) so that pfff can be used on the code of pfff itself. For more information see the pfff wiki at: https://github.com/facebook/pfff/wiki/Main The current release source code is accessible from: https://github.com/facebook/pfff/releases/tag/v0.25.1 There is now also an OPAM package for pfff. It contains though just the parsers, visitors, and AST dumpers (for C, Java, Javascript, PHP, ML, HTML and CSS). To install it just do: $ opam install pfff Once installed you should have access to the different libraries in ~/.opam/.../lib/pfff-lang_yyy.=20 The AST dumpers are useful to get familiar with the constructors. Here is an example: $ cd pfff $ cat demos/foo.js function foo() { return 1; } $ ./pfff -dump_js demos/foo.js [FunDecl( {f_tok=3DSome(()); f_name=3DSome(("foo", ())); f_params=3D[];=20 f_return_type=3DNone;=20 f_body=3D[St(Return((), Some(L(Num(("1", ())))), Some(())))]; }); FinalDef(())] In the next few weeks I'll make OPAM packages for the other components of pfff: sgrep, spatch, stags, codemap, codegraph, the treemap library, etc. Thanks to: - Eric Cooper for the initial version of the java parser - Patrick Doane and Gerd Stolpmann for their html parser - Dario Teixeira for his css parser - Facebook