Wow, you did a fantastic job fielding this question. I only even found one of those tools, OCamlspotter and some etags, otags and cscope functionality! :) On Tue, Nov 18, 2014 at 4:06 AM, Gabriel Scherer wrote: > (One can find a description of Go oracle's design in > > https://docs.google.com/document/d/1WmMHBUjQiuy15JfEnT8YBROQmEv-7K6bV-Y_K53oi5Y/view > and its user manual in > > https://docs.google.com/document/d/1SLk36YRjjMgKqe490mSRzOPYEDe0Y_WQNRv-EiFYUyw/view#heading=h.kthq8ap0mdwi > ) > > The ecosystem of OCaml tooling is not as refined as Go's (but > contributions are welcome). There is no centralized tool provider with > a common interface, but several contributors have developped separate > tool to anayze different aspects of OCaml programs: > > - ocamlspotter: https://bitbucket.org/camlspotter/ocamlspot > - ocp-index: http://typerex.ocamlpro.com/ocp-index.html > - pfff: https://github.com/facebook/pfff > - merlin: http://the-lambda-church.github.io/merlin/ > > These tool provide a relatively complete coverage of the information > that can easily be retrieved from the typedtree of a program (>=4.01 > versions of the OCaml compiler have the option to generate a reified > typedtree for external tools): the occurences of a declared/defined > name, the definition place of a name, the type of an expression, etc. > As far as I'm aware, there is not much in the direction of the more > advanced static analysis feature Go's oracle supports: points-to > information, "who may update this mutable field", etc. I'm not > familiar with Pfff's capabilities, it may be the more advanced in this > regard. > > (There is also more experimental work going on, for example Thomas > Blanc's work on static analysis of exception flow at OCamlPro: > https://github.com/OCamlPro/socaml-analyzer ) > > I think merlin is the best-positioned tool to deal with > partially-incorrect files (typical of an edition session) and > incrementality. It also incorporates some query/analysis feature, but > it's unclear whether those should grow inside a monolithic tool (eg. > it could encompass the current feature set of ocp-index and > ocamlspotter, if it does not already), or rather try to communicate > with external analysis/query plugins. It also interacts with existing > editors through a reasonable query-answer interface, but does not > provide a direct command-line interface (anyone interested in this > could work on it, it may be relatively easy to implement). > > There are fairly orthogonal aspects to a "answering questions about > programs" toolbox, among which: > 1) user-interface, interactive use, and interface with existing editors > 2) support for incrementality and robustness under partially-incorrect > files > 3) knowledge of what the "project", or whole program, is; which > dependencies are required to understand the work? (build system > knowledge) > 4) implementation of various program analyses and transformations > > Is it possible to provide them in separate programs and have them > interact to form a useful whole? Or would it be easier, faster and > more robust to implement them all in a monolithic program? What are > the necessary interdependence between these aspects and what interface > should them provide to each other? > > On Tue, Nov 18, 2014 at 6:00 AM, Kenneth Adam Miller > wrote: > > If anybody knows what Go's oracle is you'll know that its a great > > accelerator for your time; it allows expressive and meaningful searches > to > > be done over a source repository. It's fast and dead useful. Opengrok is > > much the same, but to a lesser extent (having links is nice, but not > quite > > as powerful as oracle, I could be wrong). > > > > Is there anything like this for OCaml? >